济南做网站建设,ui设计需要学什么,logo设计在线生成免费无水印不需要登陆,网络公司名字大全1 基础
我们使用机器学习的方法完成人脸检测#xff0c;首先需要大量的正样本图像#xff08;面部图像#xff09;和负样本图像#xff08;不含面部的图像#xff09;来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用#xff0c;就像我们的卷积核首先需要大量的正样本图像面部图像和负样本图像不含面部的图像来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用就像我们的卷积核每一个特征是一 个值这个值等于黑色矩形中的像素值之后减去白色矩形中的像素值之和。 Haar特征值反映了图像的灰度变化情况。例如脸部的一些特征能由矩形特征简单的描述眼睛要比脸颊颜色要深鼻梁两侧比鼻梁颜色要深嘴巴比周围颜色要深等。
Haar特征可用于于图像任意位置大小也可以任意改变所以矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。故类别、大小和位置的变化使得很小的检测窗口含有非常多的矩形特征。 得到图像的特征后训练一个决策树构建的adaboost级联决策器来识别是否为人脸。 2.实现
OpenCV中自带已训练好的检测器包括面部眼睛猫脸等都保存在XML文件中我们可以通过以下程序找到他们
import cv2 as cv
print(cv.__file__)
找到的文件如下所示 那我们就利用这些文件来识别人脸眼睛等。检测流程如下 读取图片并转换成灰度图 实例化人脸和眼睛检测的分类器对象 # 实例化级联分类器
classifier cv.CascadeClassifier( haarcascade_frontalface_default.xml )
# 加载分类器
classifier.load(haarcascade_frontalface_default.xml) 进行人脸和眼睛的检测 rect classifier.detectMultiScale(gray, scaleFactor, minNeighbors, minSize,maxsize) 参数 Gray: 要进行检测的人脸图像 scaleFactor: 前后两次扫描中搜索窗口的比例系数 minneighbors目标至少被检测到minNeighbors次才会被认为是目标 minsize和maxsize: 目标的最小尺寸和最大尺寸 将检测结果绘制出来就可以了。 主程序如下所示
import cv2 as cv
import matplotlib.pyplot as plt
plt.rcParams[font.sans-serif] [uSimHei]
plt.rcParams[axes.unicode_minus] False# 1.以灰度图的形式读取图片
img cv.imread(img/tly.jpg)
gray cv.cvtColor(img,cv.COLOR_BGR2GRAY)# 2. 实例化OpenCV人脸和眼睛识别的分类器
# 2.1 实例化级联分类器
face_cas cv.CascadeClassifier( C:\\ProgramData\\Anaconda3\\envs\\py37\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml )
# 2.1 加载分类器
face_cas.load(C:\\ProgramData\\Anaconda3\\envs\\py37\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml)
# 2.2 实例化级联分类器
eyes_cas cv.CascadeClassifier(C:\\ProgramData\\Anaconda3\\envs\\py37\\Lib\\site-packages\\cv2\\data\\haarcascade_eye.xml)
# 2.2 加载分类器
eyes_cas.load(C:\\ProgramData\\Anaconda3\\envs\\py37\\Lib\\site-packages\\cv2\\data\\haarcascade_eye.xml)# 3.调用识别人脸
rect classifier.detectMultiScale(gray, scaleFactor, minNeighbors, minSize,maxsize) Gray: 要进行检测的人脸图像scaleFactor: 前后两次扫描中搜索窗口的比例系数minneighbors目标至少被检测到minNeighbors次才会被认为是目标minsize和maxsize: 目标的最小尺寸和最大尺寸faceRects face_cas.detectMultiScale(graygray, scaleFactor1.2, minNeighbors3, minSize(32, 32))
for faceRect in faceRects:x, y, w, h faceRect# 框出人脸cv.rectangle(img, (x, y), (x h, y w),(0,255,0), 3)# 4.在识别出的人脸中进行眼睛的检测roi_color img[y:yh, x:xw]roi_gray gray[y:yh, x:xw]eyes eyes_cas.detectMultiScale(roi_gray)for (ex,ey,ew,eh) in eyes:cv.rectangle(roi_color,(ex,ey),(exew,eyeh),(0,255,0),2)
# 5. 检测结果的绘制
plt.figure(figsize(8,6),dpi100)
plt.imshow(img[:,:,::-1]),plt.title(检测结果)
plt.xticks([]), plt.yticks([])
plt.show()
结果 此处报错 cv2.error: OpenCV(3.4.5) C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1698: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’ 解决方案 【在虚拟环境下完美解决】1698: error: (-215:Assertion failed) empty() in function cv::CascadeClassifier_李大狗的读研日记-CSDN博客https://blog.csdn.net/qq_39237205/article/details/122085915https://blog.csdn.net/qq_39237205/article/details/122085915 我们也可在视频中对人脸进行检测
import cv2 as cv
import matplotlib.pyplot as plt
# 1.读取视频
cap cv.VideoCapture(movie.mp4)
# 2.在每一帧数据中进行人脸识别
while(cap.isOpened()):ret, frame cap.read()if retTrue:gray cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 3.实例化OpenCV人脸识别的分类器 face_cas cv.CascadeClassifier( haarcascade_frontalface_default.xml ) face_cas.load(haarcascade_frontalface_default.xml)# 4.调用识别人脸 faceRects face_cas.detectMultiScale(gray, scaleFactor1.2, minNeighbors3, minSize(32, 32)) for faceRect in faceRects: x, y, w, h faceRect # 框出人脸 cv.rectangle(frame, (x, y), (x h, y w),(0,255,0), 3) cv.imshow(frame,frame)if cv.waitKey(1) 0xFF ord(q):break
# 5. 释放资源
cap.release()
cv.destroyAllWindows() 总结
opencv中人脸识别的流程是 读取图片并转换成灰度图 实例化人脸和眼睛检测的分类器对象
# 实例化级联分类器
classifier cv.CascadeClassifier( haarcascade_frontalface_default.xml )
# 加载分类器
classifier.load(haarcascade_frontalface_default.xml) 进行人脸和眼睛的检测
rect classifier.detectMultiScale(gray, scaleFactor, minNeighbors, minSize,maxsize) 将检测结果绘制出来就可以了。
我们也可以在视频中进行人脸识别