Python OpenCV调用笔记本摄像头实现人脸与眼睛检测
本文详解如何使用Python OpenCV调用笔记本摄像头进行人脸及眼睛检测。涵盖Win10与Ubuntu系统下的OpenCV安装步骤,重点解析haarcascade数据集绝对路径配置方法,并提供完整的Python检测代码与运行结果展示,帮助开发者快速实现基础视觉识别功能。
OpenCV摄像头人脸检测概述
本文分享利用Python OpenCV调用笔记本摄像头进行人脸检测的具体实现方案,供读者参考。
OpenCV环境安装配置
第一步:安装OpenCV库
首先,请参照相关指南完成pip工具的安装。
随后,以管理员权限打开命令提示符窗口,执行以下命令以安装OpenCV:
pip install --user opencv-python
安装完成后,可使用以下代码验证安装是否成功:
#导入opencv模块
import cv2
#捕捉帧,笔记本摄像头设置为0即可
capture = cv2.VideoCapture(0)
#循环显示帧
while(True):
ret, frame = capture.read()
#显示窗口第一个参数是窗口名,第二个参数是内容
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):#按Q退出
break

Windows系统人脸检测实现
第二步:实现基础人脸识别
在Windows 10及Python 3.6.6环境下,参考以下代码实现:
import cv2
import numpy as np
face_cascade = cv2.CascadeClassifier("C:\ProgramData\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier("C:\ProgramData\Anaconda3\Lib\site-packages\cv2\data\haarcascade_eye.xml")
cap=cv2.VideoCapture(0)
while True:
ret,img=cap.read()
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.1,5)
if len(faces)>0:
for faceRect in faces:
x,y,w,h = faceRect
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h//2,x:x+w]
roi_color = img[y:y+h//2,x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray,1.1,1,cv2.CASCADE_SCALE_IMAGE,(2,2))
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
cv2.imshow("img",img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
需注意,数据集haarcascade_frontalface_default.xml与haarcascade_eye.xml必须使用绝对路径,否则易导致错误。具体路径可通过系统搜索功能获取。
运行效果如下所示:

Ubuntu系统配置与代码实现
Ubuntu系统下的OpenCV安装流程与Win10类似,先确保pip已安装,然后在终端执行相应代码即可。此方式默认安装的是Python 2版本。
pip install --user opencv-python
若需安装Python 3版本,请先安装pip3,随后在终端输入以下命令:
pip3 install --user opencv-python
此外,若使用虚拟机运行Ubuntu,默认情况下可能无法直接驱动笔记本摄像头。若使用VirtualBox虚拟机,可前往官网下载并安装扩展包以解决此问题。
Ubuntu下的人脸识别代码逻辑与Win10相似,但需特别注意数据集的绝对路径配置。可通过以下命令查询路径:
sudo find / -iname "*haarcascade_frontalface_default.xml*"
两个数据集位于同一文件夹内,最终完整代码如下:
import cv2
import numpy as np
face_cascade = cv2.CascadeClassifier("/home/yukino/.local/lib/python2.7/site-packages/cv2/data/haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier("/home/yukino/.local/lib/python2.7/site-packages/cv2/data/haarcascade_eye.xml")
cap=cv2.VideoCapture(0)
while True:
ret,img=cap.read()
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.1,5)
if len(faces)>0:
for faceRect in faces:
x,y,w,h = faceRect
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h//2,x:x+w]
roi_color = img[y:y+h//2,x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray,1.1,1,cv2.CASCADE_SCALE_IMAGE,(2,2))
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
cv2.imshow("img",img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
最终运行结果如下:

以上为本文全部内容,希望对各位的学习有所帮助,欢迎继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









