设备使用带摄像头的笔记本与下载好IP摄像头软件的手机
Python版本为3.8
本人的OpenCV版本为4.5.1.48
本文人脸检测使用的是CV封装好的
haarcascade_frontalface_default.xml 和 haarcascade_eye.xml
分别是检测人脸和检测人眼的两个文件
首先导入OpenCv库,然后将下载好的haarcascade_frontalface_default.xml 和 haarcascade_eye.xml 放在和代码同一个目录下
import cv2
face_xml =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml =cv2.CascadeClassifier('haarcascade_eye.xml')
这里使用了两种摄像头打开方式:
第一种是笔记本自带的摄像头
第二种是手机充当摄像头
if __name__ == "__main__":
# 调用笔记本自带摄像头
# video_capture = cv2.VideoCapture(0) # 调用笔记本自带摄像头
#调用IP摄像头
video = "http://admin:[email protected]:8081/video"
video_capture = cv2.VideoCapture(video)
*此处的192.168.0.105:8081/video需要改为手机上IP摄像头提供的IP地址*
具体使用IP摄像头的方法可百度,下方链接供参考
https://www.cnblogs.com/suanai/p/14901290.html
将其写入一个循环,设置退出条件,一直进行,达成视频效果
while True:
ret, draw = video_capture.read()
# 人脸检测
# 参数1.表示的是要检测的灰度图像
# 参数2.表示图像缩放系数
# 参数3.目标大小,人脸最小不得小于5peix
faces = face_xml.detectMultiScale(draw, 1.3, 5)
# 绘制方框
# 参数1:需要绘制的数据
# 参数2,绘制的起始坐标
# 参数3,绘制的高度和宽度
# 参数4,颜色
# 参数5,线条宽度
for (x, y, w, h) in faces:
cv2.rectangle(draw, (x, y), (x + w, y + h), (255, 0, 0), 2)
#眼睛检测
eyes = eye_xml.detectMultiScale(draw, 1.2, 5)
for (eye_x, eye_y, eye_w, eye_h) in eyes:
cv2.rectangle(draw, (eye_x, eye_y), (eye_x + eye_w, eye_y + eye_h), (255, 255, 0), 3)
#展示
cv2.imshow('live camera', draw)
# cv2.waitKey(100)
#退出循环
if cv2.waitKey(20) & 0xFF == ord('q'):
break
import cv2
face_xml =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml =cv2.CascadeClassifier('haarcascade_eye.xml')
if __name__ == "__main__":
# 调用笔记本自带摄像头
# video_capture = cv2.VideoCapture(0) # 调用笔记本自带摄像头
#调用IP摄像头
video = "http://admin:[email protected]:8081/video"
video_capture = cv2.VideoCapture(video)
while True:
ret, draw = video_capture.read()
# 人脸检测
# 参数1.表示的是要检测的灰度图像
# 参数2.表示图像缩放系数
# 参数3.目标大小,人脸最小不得小于5peix
faces = face_xml.detectMultiScale(draw, 1.3, 5)
# 绘制方框
# 参数1:需要绘制的数据
# 参数2,绘制的起始坐标
# 参数3,绘制的高度和宽度
# 参数4,颜色
# 参数5,线条宽度
for (x, y, w, h) in faces:
cv2.rectangle(draw, (x, y), (x + w, y + h), (255, 0, 0), 2)
#眼睛检测
eyes = eye_xml.detectMultiScale(draw, 1.2, 5)
for (eye_x, eye_y, eye_w, eye_h) in eyes:
cv2.rectangle(draw, (eye_x, eye_y), (eye_x + eye_w, eye_y + eye_h), (255, 255, 0), 3)
#展示
cv2.imshow('live camera', draw)
# cv2.waitKey(100)
#退出循环
if cv2.waitKey(20) & 0xFF == ord('q'):
break
本人第一次尝试的视频流的人脸检测尝试,分享供给大家参考