zoukankan      html  css  js  c++  java
  • 虹软 Android 人脸检测与人脸识别集成分享

    目前我们的应用内使用了 ArcFace 的人脸检测功能,其他的我们并不了解,所以这里就和大家分享一下我们的集成过程和一些使用心得

    集成
    ArcFace FD 的集成过程非常简单

    在 ArcFace FD 的文档上有说明支持的系统为 5.0 及以上系统,但其实在 4.4 系统上也是可以跑的,

    if (engine == null) { // && Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
    try {
    engine = new AFD_FSDKEngine();
    AFD_FSDKError err = engine.AFD_FSDK_InitialFaceEngine(
    "XXXX",
    "XXXX",
    AFD_FSDKEngine.AFD_OPF_0_HIGHER_EXT, 12, 3);
    if (err.getCode() != 0) {
    engine.AFD_FSDK_UninitialFaceEngine();
    engine = null;
    }
    } catch (Exception e) {
    e.printStackTrace();
    engine = null;
    }
    }
    

      


    我觉得 ArcFace 的优势除了多角度检测之外,另外一个是他的每次检测并不是独立,即这一次的检测结果会指导下一次的检测 (我猜测的->_->)

    所以 ArcFace 在检测到人脸之后,识别的时间会大幅减少,而 Seeta FD 的检测每次都是独立的,所以在无人脸的情况下,Seeta 的检测速度要快于 ArcFace, 但是检测到人脸之后,因为应用整体的计算量增加,导致 Seeta 的检测速度降低的非常明显,大大慢于 ArcFace, (所以二者是不是可以结合一下…)

    AFD_FSDKError err = engine.AFD_FSDK_StillImageFaceDetection(
    data, width, height, AFD_FSDKEngine.CP_PAF_NV21, result);
    

    优化
    不得不说 ArcFace FD 的错误率是比较高的,比 Seeta 要高,虽然 ArcFace 没有提供任何可以调节的参数,但是还是可以稍微优化一下!

    因为从摄像头出来的 yuv 数据是横向的,而 ArcFace 只有 AFD_OPF_0_HIGHER_EXT 这个扩展选项,优先检测 0 度方向, 但是这个方向一般是没有人脸的,所以如果直接进行检测,我们觉得这个可能会增加检测的错误率(猜的->_->),所以处理方法是将 yuv 旋转到手机竖屏方向(当然这个操作不是直接由 CPU 来处理,而是从 Camera 的外部纹理上开始做操作)再拿去检测,这样会减少一点错误率(从用户反馈得出),虽然错误率依然很高(特别对于带栅格的物体)希望虹软能继续优化!

    最后希望虹软能把 ArcFace 越做越好 _ 因为只有产品足够好才会不断的有人为你做免费宣传

  • 相关阅读:
    转:C/C++基本数据类型所占字节数
    转:为什么C++中空类和空结构体大小为1?
    转:内存字节对齐
    转:100层楼扔两个鸡蛋的问题
    移动互联网
    辗转相除法
    斐波那契数列
    error C2783: 无法为“T”推导 模板 参数
    创新工场和海豚浏览器宣讲会启示
    转:快速排序的一个小问题没想明白,求助各位
  • 原文地址:https://www.cnblogs.com/Zzz-/p/10556932.html
Copyright © 2011-2022 走看看