Luxand API для сходства на андроид - PullRequest
3 голосов
/ 03 ноября 2019

Я собираюсь использовать Luxand API для обнаружения людей. Сценарий:

1- При первом занятии в реестре люди сидят перед камерой и фотографируют и сохраняют шаблоны в базе данных sqlite. также будет сохранена личная информация;

2- После этого при обнаружении активности один из них садится перед камерой и выполняет автоматическое обнаружение и находит ту же температуру и показывает информацию о человеке (сходство составляет 96%)

моя проблема: к сожалению, слишком часто обнаружение происходит неправильно, и шаблоны двух разных людей будут распознаваться как один и тот же человек. Мой код:

1- Зарегистрируйте активность для формы регистрации

  for (int i = 0; i < MAX_FACES; ++i) {
  if (rects[i] != null && rects[i].x1 <= x && x <= rects[i].x2 && rects[i].y1 <= y && y <= rects[i].y2 + 30) {
      mTouchedID = IDs[i];

      mTouchedIndex = i;
       temp = (byte[]) ImageFrameFaceIDTemps.get(mTouchedID);
        if (mPreview != null) {
             onTouchMode = true;
              try {
                    requesting name on tapping the face  
                     if (faceSelected != null) {                         
                      faceSelected.Selected(temp, data);
                     }
                  } finally {
                      onTouchMode = false;
                  }
        }
                        break;
  }

2- Активность обнаружения для формы соответствия

    public int RetrievePersonDetection(byte[] template, float[] maxSimilarity_UnderAccepted, float[] maxSimilarityArray) {

    if (IDTemps == null || IDTemps.size() == 0) {
        return 0;
    }
    int person = 0;
    FSDK_FaceTemplate currentFaceTemp = new FSDK_FaceTemplate();
    currentFaceTemp.template = template;
    float[] similarityArray = new float[1];
    float maxSimilarity = 0;
    float MatchingThreshold[] = new float[1];
    FSDK.GetMatchingThresholdAtFRR(LocalSetting.MIN_ACCEPTED_SIMILAITY, MatchingThreshold);
    for (int i = 0; i < IDTemps.size(); i++) {
        long key = IDTemps.keyAt(i);
        FSDK_FaceTemplate faceTemp = (FSDK_FaceTemplate) IDTemps.get(key);
        int result = FSDK.MatchFaces(currentFaceTemp, faceTemp, similarityArray);
        if (result == 0) {
            if (maxSimilarity < similarityArray[0] && similarityArray[0] >= MatchingThreshold[0]) {
                maxSimilarity = similarityArray[0];
                person = (int) key;
                maxSimilarityArray[0] = similarityArray[0];
                FSDK_FaceTemplate currentFaceTemp2 = new FSDK_FaceTemplate();
            }
            else if (maxSimilarity_UnderAccepted[0] < similarityArray[0]) {
                maxSimilarity_UnderAccepted[0] = similarityArray[0];
            }
        }
    }

    return person;
}

Не знаю, в чем моя проблема? почему возвращают не того человека и 2 человека сходство составляет 96%

...