Python OpenCV调用笔记本摄像头实现人脸与眼睛检测

咖啡半糖
咖啡半糖
发布时间:2026-10-14 | 6人浏览过
原创

本文详解如何使用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

最终运行结果如下:

以上为本文全部内容,希望对各位的学习有所帮助,欢迎继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表