工作也算完成了九成,示例代码改动的是可以运行并识别人脸的,就是效率差了点。
如果有问题,欢迎留言!
前言:
8月17拿到博观的人脸识别SDK,一直到现在11月1日还未完成,我自己都觉得太久了,好在领导也不催。两个半月没完成,我只能自我安慰,毕竟是新手,5月23入职,打打杂,然后就整了个中上难度的活(这难度可不是我瞎说的,是任务表上写的),而且全靠我自己摸索,干得慢多正常呀!
主要任务:在公司项目上增加一个人脸识别,使用博观的SDK
任务一句话,把我难到死
难点一、不了解人脸识别的原理,流程
难点二、SDK中的代码是c++写的,掺杂着opencv的内容,c++一些基础语法我还是懂的,但是对opencv啥也不懂
难点三、没有正儿八经的代码编写经验
逐一击破:
1、人脸识别,最简洁的话说,就是把视频中的一帧(一帧就是一幅图)取出来,转成YUV(YUV是图像的一种格式)后送到别人的API中来处理,返回人脸的坐标。
建议去看虹软的代码,这是个开源平台,有示例程序和API说明,大体上API流程都差不多的
2、不懂c++和opencv,怎么看懂示例代码
我花了好久来了解c++和opencv,其实当时浪费了很多时间,我是按顺序看的C++ Primer Plus和OpenCV计算机视觉编程攻略.第3版,c++看到类的使用,opencv算是看完了,然后才对示例代码动手。
3、关于正儿八经的代码编写
那没办法,只能慢慢练
1.1博观人脸识别API流程(这里就不贴代码了,毕竟不开源)
a.获取许可文件,就是说使用API前需要读取一个xxx.lic的文件,不然无法使用他们的API
b.配置一些参数,像处理图像的日志等,人脸算法库的路径等等
c.设置要识别图片的分辨率等参数,加载人脸特征库
d.把图片放到API中,得到坐标即可
往最简的说就一句话:把图片推入到API中,让它识别把结果返回给你
2.1c++和opencv
示例代码为sample.cpp,公司代码不支持c++,所以要看懂示例代码后把代码改写成c代码。函数要参考c++参考手册
opencv也一样
遇到的问题
把示例代码改成c之后,要往项目上整合时遇到的问题
这个可有的说了,简直不要太多
1、许可文件的读取问题
当我要读取许可文件xxx.lic,想着把它打印出来,然后cat一下原文件,通过对比来看读取的对不对。问题出现了,打印出的函数总是比cat出来看到的短很多。
整了一天,最后问了一个c++大佬,他说可能是代码中打印函数缓存不够,导致打印不全,其实应该是全部读取了。我试了一下喵了个咪的还真的,浪费我一天时间来搞这个
2、算法路径问题
这一步是紧接着上一步的,要设置人脸算法所在路径,我粗心大意,路径写错了,但是我坚信没错!一直在检查其它方向,又是一天,又问了另一个大佬,他说路径对不对,我说对!瞬间打脸。
3、YUV数据的获取
示例代码是读取mp4文件来获取图片,但是项目中哪有这种图片给你读啊,都是摄像头采集的原始数据转出来的。要花点时间看一下海思多媒体处理流程了解一下摄像头采集数据原理,百度一下可以搜到很多
熟悉项目代码中的YUV数据的部分,然后获取YUV,推到API中处理即可
4、关于Makefile的问题
当初学到的就是A依赖B,然后下面跟一个编译语句这种简单的,但是项目中就没那么简单的。木有捷径可走,学一下呗!
5、库的链接
我这种小白,把Makefile中的编译路径当做了实际运行时的链接路径,在交叉编译这种环境下,编译和运行在不同的平台,这就是两码事了,库一定要拷贝到板子的库目录中。
两个半月就做了一件事,还没做完,目前的问题是:代码整合到项目中后,识别到人脸就报错,算法库中有符号未定义。这个我也整了快一周了,没搞定,今天让大佬试试。我得闲写了这篇粗糙的文章来记录一下我的经历!
本文分享了作者从零开始将博观的人脸识别SDK整合到项目中的经历,包括学习人脸识别原理、解决C++与OpenCV相关问题及调试过程中遇到的各种挑战。
502

被折叠的 条评论
为什么被折叠?



