tobot 发表于 2021-10-19 23:02

利用R329做离线人脸检测

<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">在之前的实验(</font><font face="Calibri">https://bbs.eeworld.com.cn/thread-1181419-1-1.html</font><font face="宋体">)中,我们尝试了通过百度</font><font face="Calibri">AI</font><font face="宋体">识别人脸,但事实上,</font><font face="Calibri">OpenCV</font><font face="宋体">自己就有人脸检测的功能,其模型库可以在</font><font face="Calibri">https://github.com/opencv/opencv/tree/master/data/haarcascades</font><font face="宋体">下载。</font></span></span></span></span></p>

<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">选择一个模型库,比如</font><font face="Calibri">&quot;data_haarcascades_haarcascade_frontalface_default.xml&quot;</font><font face="宋体">或者</font><font face="Calibri">&quot;data_haarcascades_haarcascade_frontalface_alt.xml&quot;</font><font face="宋体">,放在某个本地目录。</font></span></span></span></span></p>

<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">执行代码时,先载入本地模型库,将摄像头中实时获取的图像先转化成灰度图,再根据加载的模型库去调用</font><font face="Calibri">cv2.CascadeClassifier.detectMultiScale</font><font face="宋体">可以获得检测人脸数据的位置和大小,再到原图去画框,然后放到屏幕中显示。</font></span></span></span></span></p>

<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">还是把卡通人物和真实人物都测试一下吧。</font></span></span></span></span></p>

<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">首先是卡通人物。因为在代码中设置了检测到三个人脸就保存退出,所以在这里并没有能把四张脸都检测出来,但在多次实际验证中,左二女子的脸是可以被检测的,这再一次说明摄像头的清晰度实在是限制了整个系统的效率。</font></span></span></span></span></p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">待检测图片</font></span></span></span></span></p>

<p style="text-align:justify"> &nbsp;</p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">检测中(可以看到这时只检测出一张脸)</font></span></span></span></span></p>

<p style="text-align:justify"> &nbsp;</p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">检测成功保存的图片</font></span></span></span></span></p>

<p style="text-align:justify"> &nbsp;</p>

<p style="text-align:justify">&nbsp;</p>

<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">真实人物的检测也基本类似,当图片变得模糊时,一张脸都检测不出来,调整摄像头内容,只要在取景框里面的图片够清晰,立刻可以检测出图片中人脸。不得不说</font><font face="Calibri">opencv</font><font face="宋体">的确是非常方便的了。</font></span></span></span></span></p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">原始图片</font></span></span></span></span></p>

<p style="text-align:justify"> &nbsp;</p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">检测中</font></span></span></span></span></p>

<p style="text-align:justify"> &nbsp;</p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">最终获取</font></span></span></span></span></p>

<p style="text-align:justify"> &nbsp;</p>

<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">显然,检测功能还是有效的。</font></span></span></span></span></p>

<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">另外,通过操作日志记录,可以看到检测每一帧大约需要</font><font face="Calibri">0.3~0.5s</font><font face="宋体">,也就是说每秒实际只能处理</font><font face="Calibri">2~3</font><font face="宋体">帧图像。</font></span></span></span></span></p>

<p style="text-align:justify">本次实验的代码:</p>

<p style="text-align:justify"></p>

<p style="text-align:justify">模型如下:</p>

<p style="text-align:justify"></p>

Jacktang 发表于 2021-10-20 07:27

<p>每帧0.3~0.5s也正常</p>

<p>现在的人脸识别速度可以达到1秒解锁,基本上3秒内就可以解决问题。</p>

<p>&nbsp;</p>

w494143467 发表于 2021-10-20 11:15

<p>这个应该是只识别人脸,没法检测人脸是谁吧?</p>

tobot 发表于 2021-10-20 11:53

w494143467 发表于 2021-10-20 11:15
这个应该是只识别人脸,没法检测人脸是谁吧?

<p>是啊,opencv可以自己做训练,这里是引用了通用模型,我有自己训练过,但似乎数据源的数量不够,识别率非常低。。。百度到时有很方便的API,可以认证人脸和身份,但要收费,而且不能离线。。。</p>

tobot 发表于 2021-10-20 11:55

<p>最大问题是摄像头效果太差,获取图像不够清晰。我试过用转接线接一个高清usb摄像头,但系统不认,应该是驱动没安装。。。</p>

tobot 发表于 2021-10-20 11:58

Jacktang 发表于 2021-10-20 07:27
每帧0.3~0.5s也正常

现在的人脸识别速度可以达到1秒解锁,基本上3秒内就可以解决问题。

&nbsp;

<p>不能区分人,可以考虑用于红外测温。。。</p>
页: [1]
查看完整版本: 利用R329做离线人脸检测