上篇文章介紹了OpenCV進(jìn)行照片人臉檢測(cè),今天學(xué)習(xí)的是OpenCV進(jìn)行視頻人臉檢測(cè),所有的參考博文、文獻(xiàn)、視頻、代碼都會(huì)在文末附上鏈接或文件壓縮包。
本文的目錄如下:
一、Opencv 進(jìn)行視頻人臉檢測(cè)
1、代碼
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
# 人臉檢測(cè)函數(shù):
# useCamera參數(shù):True表示使用攝像頭,F(xiàn)alse表示讀取當(dāng)前目錄下視頻文件
def face_detection(useCamera=False):
# 1.調(diào)用攝像頭或者使用讀取視頻
cv2.namedWindow("CaptureFace")
if useCamera == True:
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
else:
cap = cv2.VideoCapture('./video2.mp4')
# 2.人臉識(shí)別器分類(lèi)器
classfier = cv2.CascadeClassifier('./opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
color = (0, 255, 0)
while cap.isOpened():
flag, frame = cap.read()
frame = cv2.flip(frame, 1) # 鏡像操作
if not flag:
break
# 3.灰度轉(zhuǎn)換
grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 4.人臉檢測(cè),1.2和2分別為圖片縮放比例和需要檢測(cè)的有效點(diǎn)數(shù)
facerects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
if len(facerects) > 0: # 大于0則檢測(cè)到人臉
for faceRect in facerects: # 單獨(dú)框出每一張人臉
x, y, w, h = faceRect
# 5.畫(huà)圖
cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 3)
cv2.imshow("CaptureFace", frame)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
face_detection() # 使用攝像頭
face_detection(useCamera=False) # 使用視頻
2、代碼解釋
detectMultiScale()函數(shù)
核心部分用到的同樣是detectMultiScale(),具體參數(shù)解釋見(jiàn)上篇博客OpenCV進(jìn)行照片人臉檢測(cè)。
cv2.rectangle()函數(shù)
這里主要記錄一下cv2.rectangle()函數(shù)。
cv2.rectangle 這個(gè)函數(shù)的作用是在圖像上繪制一個(gè)簡(jiǎn)單的矩形。
opencv 官網(wǎng)上給出的 cv2.rectangle 函數(shù)定義 如下:
cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → None
第一個(gè)參數(shù) img 指定一張圖片,在這張圖片的基礎(chǔ)上進(jìn)行繪制;
第二、三個(gè)參數(shù) pt1 和 pt2 分別代表矩形的左上角和右下角兩個(gè)點(diǎn),而且 x 坐標(biāo)軸是水平方向的,y 坐標(biāo)軸是垂直方向的。
第四個(gè)參數(shù) color 參數(shù)一般用 RGB 值指定,表示矩形邊框的顏色。RGB 對(duì)應(yīng)的顏色可以使用 https://www.sioe.cn/yingyong/yanse-rgb-16/ 查看。opencv中讀入圖片數(shù)據(jù)是按照b,g,r的順序,所以(0,0,255)代表紅色,(0,255,0)代表綠色??梢钥吹较旅娴淖R(shí)別框?yàn)榫G色。
第五個(gè)參數(shù) thickness 參數(shù)表示矩形邊框的厚度,即線條的粗細(xì)值,為正值時(shí)代表線條的粗細(xì)(以像素為單位),為負(fù)值時(shí)邊框?qū)嵭?如 CV_FILLED,則表示填充整個(gè)矩形。
第六個(gè)參數(shù) lineType 表示線型。如果指定為 CV_AA,則是使用高斯濾波器畫(huà)反鋸齒線。
第七個(gè)參數(shù) shift 參數(shù)表示點(diǎn)坐標(biāo)中的小數(shù)位數(shù)。
3、效果分析
隨著視頻播放,人物位置的改變,隨機(jī)從視頻中截取了兩張圖片,都能夠檢測(cè)到人臉。
參考博文
基于opencv的人臉檢測(cè)(圖片、視頻、攝像頭)
opencv cv2.rectangle 參數(shù)含義
使用的視頻: https://haokan.baidu.com/v?pd=wisenatural&vid=8158766618890451729文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-402455.html
本文先寫(xiě)到這里,歡迎大家批評(píng)指正!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-402455.html
到了這里,關(guān)于【使用OpenCV進(jìn)行視頻人臉檢測(cè)】------機(jī)器學(xué)習(xí)(附完整代碼和數(shù)據(jù)集)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!