离线识别Android版,批量注册成功率低
Ta的回复 :本来也想着可能是人脸图片大小不合适,做了裁剪后,也不行。 后来试着在官方demo的离线批量注册人脸的asyncImport方法中对线程做了一个休眠的处理,结果是:39张图片都可以注册成功了... 贴上一段代码: ```java Executors.newSingleThreadExecutor().submit(new Runnable() { @Override public void run() { for (int i = 0; i < files.length; i++) { if (!importing) { break; } Log.e("-------", "currentThread name: " + Thread.currentThread().getName()); String file = files[i]; boolean success = false; File facePath = new File(batchfaceDir, file); if (facePath.exists()) { Bitmap bitmap = BitmapFactory.decodeFile(facePath.getAbsolutePath()); ARGBImg argbImg = FeatureUtils.getImageInfo(bitmap); byte[] bytes = new byte[2048]; int ret = FaceSDKManager.getInstance().getFaceFeature().faceFeature(argbImg, bytes); if (ret == FaceDetector.NO_FACE_DETECTED) { Log.e("-------", "未检测到人脸,可能原因:人脸太小(必须大于最小检测人脸minFaceSize)," + "或者人脸角度太大,人脸不是朝上"); } else if (ret == 512) { //512是什么意思??? String fileName = facePath.getName(); String userName = fileName.substring(0, fileName.indexOf('[')); String userid = fileName.substring(fileName.indexOf('[') + 1, fileName.lastIndexOf(']')); Feature feature = new Feature(); feature.setGroupId(groupId); // final String uid = UUID.randomUUID().toString(); feature.setUserId(userid); feature.setFeature(bytes); feature.setImageName(file); User user = new User(); user.setUserId(userid); user.setUserName(userName); user.setGroupId(groupId); user.getFeatureList().add(feature); if (FaceApi.getInstance().userAdd(user)) { success = true; File faceDir = FileUitls.getFaceDirectory(); if (faceDir != null) { File saveFacePath = new File(faceDir, file); if (FileUitls.saveFile(saveFacePath, bitmap)) { // facePath.delete(); } } } try { //因为线程不睡眠一下的话,注册失败率极高,39张图片只能成功1张或者2张 //这里睡眠一下,基本都能注册成功 Thread.sleep(700); } catch (InterruptedException e) { e.printStackTrace(); } } else if (ret == -1) { Log.e("-------", "抽取特征失败"); } else { Log.e("-------", "未检测到人脸"); } } if (success) { successCount++; } else { failCount++; Log.i("wtf", "失败图片:" + file); } finishCount++; progressDisplay("总人脸数:" + totalCount + ", 完成:" + finishCount + " 成功:" + successCount + " 失败:" + failCount); } importFinish(); } }); ```