这是我在这里的第一篇文章,所以如果我的问题不明确或者提供的信息不足,我很抱歉.

我目前正在研究一种可以识别图片中脸部的Android应用程序.

我的第一个方法是使用JavaCV并且一切正常,除了面部检测需要花费太多时间才能完成的事实!

之后,我尝试使用FaceDetector.Face检测面部.然后我使用检测到的面部来训练我的脸部识别器模型.到目前为止没有发现任何错误.

我的问题是我的模型无法识别FaceDetector.Face给出的任何检测到的面部.我总是从预测函数得到-1.谁能说出可能出错的地方呢?先感谢您!

这是我在检测后裁剪面部的方法:

for(int count=0;count<NUMBER_OF_FACE_DETECTED;count++)
    {
        Face face=detectedFaces[count];
        PointF midPoint=new PointF();
        face.getMidPoint(midPoint);         
        eyedistance=face.eyesdistance();

        left = midPoint.x - (float)(1.4 * eyedistance);
        top = midPoint.y - (float)(1.8 * eyedistance);

        bmFace = Bitmap.createBitmap(origiImage,(int) left,(int) top,(int) (2.8 * eyedistance),(int) (3.6 * eyedistance));          
        bmFaces.add(bmFace);
    }

这是培训模型的主要部分.

MatVector images = new MatVector(imageFiles.length);            
    int[] labels = new int[imageFiles.length];

    IplImage img;
    IplImage grayImage;
    FaceRecognizer faceRecognizer = createLBPHFaceRecognizer(1,8,binaryTreshold);
    try
    {          
        FileInputStream fstream = new FileInputStream(working_Dir.getAbsolutePath()+"/csv.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
        String imgInfo;

        for (int i = 0; (imgInfo = br.readLine()) != null; i++)  
        {
            String info[] = imgInfo.split(";");

            String imagePath = info[0];             
            img = cvLoadImage(imagePath);
            grayImage = IplImage.create(img.width(),img.height(),IPL_DEPTH_8U,1);
            cvCvtColor(img,grayImage,CV_BGR2GRAY);
            images.put(i,grayImage);
            labels[i] = Integer.parseInt(info[1]);;
        }
        in.close();

        //train the FaceRecognizer model         
        faceRecognizer.train(images,labels);
    }catch (Exception e)
    {
        System.err.println("Error: " + e.getMessage());
    }

最后我用以下代码识别face:

public static String identifyFace(IplImage grayImg)
{
    String predictedname = "";

    //identify face from the image
    int predictedLabel = faceRecognizer.predict(grayImg);

    if(predictedLabel != -1 )
    {
        predictedname = new String(idToName.get(predictedLabel));
    }
    return predictedname;
}

解决方法

只有在未正确设置阈值时才会发生这种情况,请参阅文档:

> http://docs.opencv.org/trunk/modules/contrib/doc/facerec/facerec_api.html#createlbphfacerecognizer

创建LBPHFaceRecognizer的方法是:

Ptr<FaceRecognizer> createLBPHFaceRecognizer(int radius=1,int neighbors=8,int grid_x=8,int grid_y=8,double threshold=DBL_MAX)

,其中:

> threshold – 预测中应用的阈值.如果到最近邻居的距离大于阈值,则此方法返回-1.

因此,在上面的方法签名中,您会看到默认情况下阈值设置为DBL_MAX.因此,如果您只是将阈值排除在外,那么它永远不会产生-1.另一方面,如果将阈值设置得太低,FaceRecognizer总是会产生-1.也就是说,检查你在代码中设置了binaryTreshold的内容.为您的数据找到合适的决策阈值是一个典型的优化问题,您必须根据给定的标准(例如基于错误接受率/错误拒绝率)优化最佳阈值.

如何在Android上使用FaceDetector.Face进行人脸识别的更多相关文章

  1. 基于HTML5+tracking.js实现刷脸支付功能

    这篇文章主要介绍了基于HTML5+tracking.js实现刷脸支付功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 在iOS视角中,人脸检测与人脸识别有什么区别

    可能这听起来像是一个愚蠢的,但我真的很想知道,iOS视角中的“人脸检测和人脸识别”有什么区别?

  3. android – AutoCompleteTextView隐藏自动完成建议

    解决方法我建议一些方法1)如果你想像自动完成textView一样做“测试”,那么这样做,2)如果你需要用“test”填写文本视图,还需要阻止建议增加自动完成textview的阈值级别,如果您使用阈值,它将在5个字符后显示建议.如果您需要尝试设置不同的单词并尝试避免建议,请根据字符串的长度动态更改阈值.

  4. 如何在Android上使用FaceDetector.Face进行人脸识别

    之后,我尝试使用FaceDetector.Face检测面部.然后我使用检测到的面部来训练我的脸部识别器模型.到目前为止没有发现任何错误.我的问题是我的模型无法识别FaceDetector.Face给出的任何检测到的面部.我总是从预测函数得到-1.谁能说出可能出错的地方呢?

  5. Python+OpenCV实现阈值分割的方法详解

    阈值分割法是一种基于区域的图像分割技术,原理是把图像像素点分为若干类。本文将利用Python+OpenCV实现阈值分割,感兴趣的可以了解一下

  6. Python+OpenCV人脸识别签到考勤系统实现(附demo)

    本文主要介绍了Python+OpenCV人脸识别签到考勤系统实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. uniapp app 人脸识别的实现示例

    本文主要介绍了uniapp app 人脸识别的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  8. Keras目标检测mtcnn facenet搭建人脸识别平台

    这篇文章主要为大家介绍了Keras目标检测mtcnn facenet搭建人脸识别平台,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  9. Html5调用手机摄像头并实现人脸识别的实现

    这篇文章主要介绍了Html5调用手机摄像头并实现人脸识别的实现,混合App开发,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  10. 人脸识别测颜值、测脸龄、测相似度微信接口

    这篇文章主要给大家分享的是一段人脸识别测颜值、测脸龄、测相似度微信接口的代码,非常的有意思,有需要的小伙伴可以参考下

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部