当前位置:   article > 正文

基于seetaFace6.0的人脸识别

seetaface

最近项目需要用到人脸识别,经同事推荐,决定基于seetaFace6.0进行开发。开发过程还是比较顺利的,特别是在windows上,有编译好的现成的库,还有demo。照着demo做开发基本上就可以了。

问题出在了linux上。在linux上(centos7)上开发时,用了windows下的代码(经过测试验证是可以运行的),结果就是出错了。问题出在seeta::FaceDetector的构造函数的过程中。函数如下:

int getFeature(const char* _imgPath, float feature[])

{

***

seeta::FaceDetecr FD(fd_setting)

***

}

我第一次调用getFeature()是成功的,但是第二次再调用这个函数,在FD的构造的时候,就会crash。

因为项目时间比较紧,所以在没有找到root cause的情况下,暂时使用了静态变量,绕过去。修改函数如下:

int getFeature(const char* _imgPath, float feature[])

{

***

    static bool localInit = false;
    static seeta::FaceDetector *FD;

    if (!localInit)
    {

          FD = new seeta::FaceDetector(fd_setting);

    }

***

}

采用了这种折中的办法后,目前可以连续调用getFeature()。

追加:

经过后期的测试,发现之前第二次调用极有可能是机器的性能跟不上导致的。因为在创建一个FaceRecognizer或者FaceDetector,都会加载一次模型文件(face_dector.csta等),而析构时,则会释放相关资源。在测试的时候,发现,创建对象时,内存和CPU的占有率在短时间内,会有很大的提升。因此怀疑在短时间内,反复的创建和析构,极有可能会导致内存的非法访问。因为后面,我只在初始化的时候,加载模型,创建对象,就没有任何问题了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/361496
推荐阅读
相关标签
  

闽ICP备14008679号