基本:
トレーニング後の機能プールはxmlに保存されます。機能のサイズはトレーニング中のパラメーターによって決定されます。検出する場合、各固定サイズの機能(検出ウィンドウ)を同じサイズの領域と比較することとして簡単に理解できます。入力画像。一致する場合は、この長方形の領域の位置を記録し、ウィンドウをスライドして画像の別の領域を検出し、操作を繰り返します。
たとえば、入力画像の特徴のサイズは可変であるため、入力画像の目は50x50の領域であり、トレーニングは25x25であり、入力画像が半分に縮小された場合にのみ一致させることができます。また、徐々に縮小された画像であり、画像ピラミッドを作成するプロセスです。
import cv2 as cv
import numpy as np
def face_detect_demo(image):
gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
face_detector=cv.CascadeClassifier("E:/files/face_detect_files/opencv-master/data/haarcascades/haarcascade_frontalface_alt_tree.xml")
# 第一个参数是灰度图像
# 第二个参数是尺度变换,就是向上或者向下每次是原来的多少倍,这里是1.1倍
# 第三个参数是人脸检测次数,设置越高,误检率越低,但是对于模糊图片,我们设置越高,越不易检测出来,要适当降低
#第二个和第三个参数的设置会影响检测的速度和视频的帧数,选择合适的数值更为重要
faces=face_detector.detectMultiScale(gray,1.1,2) #faces返回的是矩形框
for x,y,w,h in faces:
cv.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)
cv.imshow("result",image)
print("----Hello Opencv----")
src=cv.imread("D:/pythonprograms/tutorial1/images/face_detect.png")
capture=cv.VideoCapture(0)
cv.namedWindow("Input Image",cv.WINDOW_AUTOSIZE)
cv.namedWindow("result",cv.WINDOW_AUTOSIZE)
cv.imshow("Input Image",src)
face_detect_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
スクリーンショットを実行します。
カメラでの顔認識:
import cv2 as cv
import numpy as np
def face_detect_demo(image):
gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
# face_detector=cv.CascadeClassifier("E:/files/face_detect_files/opencv-master/data/haarcascades/haarcascade_frontalface_alt_tree.xml")
face_detector=cv.CascadeClassifier("E:/files/face_detect_files/opencv-master/data/haarcascades/haarcascade_frontalface_alt_tree.xml") #级联检测器获取文件
faces=face_detector.detectMultiScale(gray,1.1,2) #faces返回的是矩形框
for x,y,w,h in faces:
cv.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)
cv.imshow("result",image)
print("----Hello Opencv----")
# src=cv.imread("D:/pythonprograms/tutorial1/images/face_detect.png")
capture=cv.VideoCapture(0)
# cv.namedWindow("Input Image",cv.WINDOW_AUTOSIZE)
cv.namedWindow("result",cv.WINDOW_AUTOSIZE)
#检测视频中的人脸
while(True):
ret,frame=capture.read()
frame=cv.flip(frame,1)
face_detect_demo(frame)
c=cv.waitKey(10)
if c==27: #ESC
break
# cv.imshow("Input Image",src)
# face_detect_demo()
cv.waitKey(0)
cv.destroyAllWindows()