irhammuch / android-face-recognition

Real Time Face Recognition App using Google MLKit, Tensorflow Lite, & MobileFaceNet.
30 stars 6 forks source link

How to store the face recognition #3

Open lendra-sejasa opened 1 month ago

lendra-sejasa commented 1 month ago

Hi,

How to store the data of face recognition locally or remotely?

Thanks

sa11k commented 4 days ago

I used "sharedPreferences" to store face data. Please refer to it.

/** Store face data **/
    private String floatArrayToString(float[] array) {
        StringBuilder sb = new StringBuilder();
        for (float value : array) {
            sb.append(value).append(",");
        }
        return sb.toString();
    }

    private float[] stringToFloatArray(String s) {
        String[] tokens = s.split(",");
        float[] array = new float[tokens.length];
        for (int i = 0; i < tokens.length; i++) {
            array[i] = Float.parseFloat(tokens[i]);
        }
        return array;
    }

    // save
    private void saveRegisteredFaces() {
        SharedPreferences sharedPreferences = getSharedPreferences("FaceData", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        for (Map.Entry<String, SimilarityClassifier.Recognition> entry : registered.entrySet()) {
            String name = entry.getKey();
            float[] embeddings = ((float[][]) entry.getValue().getExtra())[0];
            editor.putString(name, floatArrayToString(embeddings));
        }
        editor.apply();
    }

    // load
    private void loadRegisteredFaces() {
        SharedPreferences sharedPreferences = getSharedPreferences("FaceData", MODE_PRIVATE);
        Map<String, ?> allEntries = sharedPreferences.getAll();
        for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
            String name = entry.getKey();
            float[] embeddings = stringToFloatArray((String) entry.getValue());
            SimilarityClassifier.Recognition result = new SimilarityClassifier.Recognition("0", "", -1f);
            result.setExtra(new float[][]{embeddings});
            registered.put(name, result);
        }
    }