Mac+python+opencv实现实时人脸检测
编译器pycharm
conda内置python3.7
第三方依赖库:opencv下的cv2/data/haarcascade_frontalface_alt2.xml文件
代码如下:
import cv2
import sys
if __name__ == '__main__':
if len(sys.argv) != 1:
print("Usage:%s camera_id\r\n" % (sys.argv[0]))
sys.exit(0)
# 框住人脸的矩形边框颜色
color = (0, 255, 0)
# 捕获指定摄像头的实时视频流
cap = cv2.VideoCapture(0)
# 人脸识别分类器本地存储路径
cascade_path = "/Users/anaconda3-py37/anaconda3/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_alt2.xml"
# 循环检测识别人脸
while True:
ret, frame = cap.read() # 读取一帧视频
if ret is True:
# 图像灰化,降低计算复杂度
frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
else:
continue
# 使用人脸识别分类器,读入分类器
cascade = cv2.CascadeClassifier(cascade_path)
# 利用分类器识别出哪个区域为人脸
faceRects = cascade.detectMultiScale(frame_gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
if len(faceRects) > 0:
for faceRect in faceRects:
x, y, w, h = faceRect
# 在摄像头中实时检测跟踪框出人脸区域并拍照保存
image = frame[y - 10: y + h + 10, x - 10: x + w + 10]
cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, thickness=2)
cv2.imshow("人脸检测", frame)
# 等待100毫秒看是否有按键输入
k = cv2.waitKey(100)
# 如果输入q则退出循环
if k & 0xFF == ord('q'):
break
# 释放摄像头并销毁所有窗口
cap.release()
cv2.destroyAllWindows()
结果(视频无法上传所以只能贴照片):
**
**
最后,欢迎大家来交流提问。
**
**