Python调用电脑摄像头实现人脸检测

Python调用电脑摄像头实现人脸检测

Python调用opencv库

OpenCV用 C++语言编写, 它的主要接口也是 C++语言, 但是依然保留了大量的 C 语言接口。 该库也有大量的 Python、 Java and MATLAB/OCTAVE(版本 2.5) 的接口。

基本步骤

1.打开摄像头
2.读取摄像头所拍摄的每一帧图像
3.显示每一帧图像
4.对读取到的每一帧图像调用人脸检测函数
–4.1对图像进行灰度转换
–4.2加载opencv的人脸特征库
–4.3调用opencv内置检测函数检测图像
–4.4在图像上用框或圈标识出检测到的特征
–4.5显示出每一帧被标识过的图像

代码

// camera_face_detect
import cv2 as cv


def face_detect_demo(image):
	# 灰度转换
    gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    # 加载库特征
    face_detector = cv.CascadeClassifier(
        "D:/Software/opencv/opencv/sources/data/haarcascades"
        "/haarcascade_frontalface_default.xml")
    left_eye_detector = cv.CascadeClassifier(
        "D:/Software/opencv/opencv/sources/data/haarcascades"
        "/haarcascade_lefteye_2splits.xml")
    right_eye_detector = cv.CascadeClassifier(
        "D:/Software/opencv/opencv/sources/data/haarcascades"
        "/haarcascade_lefteye_2splits.xml")
    # 调用内置检测函数
    faces = face_detector.detectMultiScale(gray_image)
    left_eyes = left_eye_detector.detectMultiScale(gray_image)
    right_eyes = right_eye_detector.detectMultiScale(gray_image)
    # 在图像上用框、圈标记
    for x,y,w,h in faces:
        cv.rectangle(image, (x,y),(x+w,y+h), color=(0,0,255), thickness=2)
    for x2,y2,w2,h2 in left_eyes:
        cv.rectangle(image, (x2,y2),(x2+w2,y2+h2), color=(0,255,0), thickness=2)
    for x3,y3,w3,h3 in right_eyes:
        cv.rectangle(image, (x3,y3),(x3+w3,y3+h3), color=(0,255,0), thickness=2)
    # 显示标记后的图像
    cv.imshow('result',image)


# 参数为0表示打开笔记本内置摄像头
# cv.CAP_DSHOW不加的话会有内存释放的报错
cap = cv.VideoCapture(0, cv.CAP_DSHOW)
while True:
    flag, imag = cap.read()
    if not flag:
        break
    cv.imshow('window', imag)
    if ord('q') == cv.waitKey(10):
        break
    # 检测摄像头识别到的人脸
    face_detect_demo(imag)


cv.destroyAllWindows()

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...