如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
<p>本篇测评由优秀测评者“eefocus_3914144”提供。</p><hr />
<p>本文将介绍基于米尔电子MYD-LMX93开发板(米尔基于NXP i.MX93开发板)的基于OpenCV的人脸检测方案测试。</p>
<p>OpenCV提供了一个非常简单的接口,用于相机捕捉一个视频(我用的电脑内置摄像头)<br />
1、安装python3-opencv</p>
<pre>
<code>apt install python3-opencv</code></pre>
<pre>
2、查看摄像头支持的格式与分辨率</pre>
<pre>
<code>root@debian:~# v4l2-ctl --device=/dev/video0 --list-formats-ext</code></pre>
<p> </p>
<div style="text-align: center;"></div>
<p> </p>
<p>经测试,只能支持640*480</p>
<p>为此建立opencv_test.py</p>
<section>
<pre>
<code>import cv2
video = cv2.VideoCapture(0)</code></pre>
<p> </p>
<p><strong>设置相机参数</strong></p>
</section>
<p>video .set(cv2.CAP_PROP_FRAME_WIDTH, 1280)</p>
<p>video .set(cv2.CAP_PROP_FRAME_HEIGHT, 720)</p>
<section>
<pre>
<code>while True:
ret, frame = video.read()
cv2.imshow("A video", frame)
c = cv2.waitKey(1)
if c == 27:
breakvideo.release()cv2.destroyAllWindows()</code></pre>
<p> </p>
</section>
<p>保存后执行”python3 opencv_test.py</p>
<p> </p>
<div style="text-align: center;"></div>
<p> </p>
<p>OpenCV装好后,可以为后面的人脸检测提供可行性。</p>
<p>要实现人脸识别功能,首先要进行人脸检测,判断出图片中人脸的位置,才能进行下一步的操作。</p>
<p><strong>OpenCV人脸检测方法</strong></p>
<p>在OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Haar特征和LBP特征。用得最多的是Haar特征人脸检测,此外OpenCV中还集成了深度学习方法来实现人脸检测。<br />
<br />
【参考资料】<br />
<a _href="https://blog.csdn.net/weixin_42149550/article/details/131474284" data-linktype="2" href="https://blog.csdn.net/weixin_42149550/article/details/131474284" target="_blank">使用OpenCV工具包成功实现人脸检测与人脸识别,包括传统视觉和深度学习方法(附完整代码,模型下载......)_opencv人脸识别-CSDN博客</a></p>
<p>【Haar级联检测器预训练模型下载】<br />
<a _href="https://github.com/opencv/opencv/tree/4.x" data-linktype="2" href="https://github.com/opencv/opencv/tree/4.x" target="_blank">opencv/opencv: Open Source Computer Vision Library (github.com)</a><br />
下载好的,在<a _href="https://github.com/opencv/opencv/tree/4.x" data-linktype="2" href="https://github.com/opencv/opencv/tree/4.x" target="_blank">opencv-4.xdatahaarcascades</a>文件夹下有模型,把他上传到开发板。</p>
<p> </p>
<div style="text-align: center;"></div>
<p> </p>
<p>【获取检测人脸的图片】<br />
我在百度上找到了**的图片,并把它也上传到开发板。</p>
<p>【编写检测代码】</p>
<section>
<pre>
<code>import numpy as np
import cv2 as cv
if __name__ == '__main__':
# (6) 使用 Haar 级联分类器 预训练模型 检测人脸
# 读取待检测的图片
img = cv.imread("yanmi.jpg")
print(img.shape)
# 加载 Haar 级联分类器 预训练模型
model_path = "haarcascade_frontalface_alt2.xml"
face_detector = cv.CascadeClassifier(model_path) # <class 'cv2.CascadeClassifier'>
# 使用级联分类器检测人脸
faces = face_detector.detectMultiScale(img, scaleFactor=1.1, minNeighbors=1,
minSize=(30, 30), maxSize=(300, 300))
print(faces.shape) # (17, 4)
print(faces) # (x, y, width, height)
# 绘制人脸检测框
for x, y, width, height in faces:
cv.rectangle(img, (x, y), (x + width, y + height), (0, 0, 255), 2, cv.LINE_8, 0)
# 显示图片
cv.imshow("faces", img)
cv.waitKey(0)
cv.destroyAllWindows()</code></pre>
<p> </p>
</section>
<p>【实验效果】<br />
运行程序后,可以正确地识别,效果如下:</p>
<section>
<div style="text-align: center;"></div>
<div style="text-align: center;"></div>
</section>
<p> </p>
<p>人脸检测,判断出图片中人脸的位置是算法的关键</p>
<p>有一点儿疑惑,为什么不直接采用独立的摄像头做单独的嵌入式开发呢?</p>
页:
[1]