OpenCV 简单的人脸识别
生活随笔
收集整理的這篇文章主要介紹了
OpenCV 简单的人脸识别
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
OpenCV中自帶已訓(xùn)練好的檢測器,包括面部,眼睛,貓臉等,都保存在XML文件中,我們可以通過以下程序找到他們:
import cv2 as cv print(cv.__file__)找到的文件如下所示:
opencv中人臉識(shí)別的流程是:
讀取圖片,并轉(zhuǎn)換成灰度圖
實(shí)例化人臉和眼睛檢測的分類器對象
參數(shù):
- Gray: 要進(jìn)行檢測的人臉圖像
- scaleFactor: 前后兩次掃描中,搜索窗口的比例系數(shù)
- minneighbors:目標(biāo)至少被檢測到minNeighbors次才會(huì)被認(rèn)為是目標(biāo)
- minsize和maxsize: 目標(biāo)的最小尺寸和最大尺寸
在圖片中對人臉進(jìn)行檢測:
import cv2 as cv import matplotlib.pyplot as plt# 1.以灰度圖的形式讀取圖片 img = cv.imread("img.png") gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# 2.實(shí)例化OpenCV人臉和眼睛識(shí)別的分類器 face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml") face_cas.load('haarcascade_frontalface_default.xml')eyes_cas = cv.CascadeClassifier("haarcascade_eye.xml") eyes_cas.load("haarcascade_eye.xml")# 3.調(diào)用識(shí)別人臉 faceRects = face_cas.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, 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.在識(shí)別出的人臉中進(jìn)行眼睛的檢測roi_color = img[y:y+h, x:x+w]roi_gray = gray[y:y+h, x:x+w]eyes = eyes_cas.detectMultiScale(roi_gray)for (ex, ey, ew, eh) in eyes:cv.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)# 5. 檢測結(jié)果的繪制 plt.figure(figsize=(8, 6), dpi=100) plt.imshow(img[:, :, ::-1]), plt.title('檢測結(jié)果') plt.xticks([]), plt.yticks([]) plt.show()在攝像頭中對人臉進(jìn)行檢測:
import cv2 as cv# 1.讀取攝像頭 cap = cv.VideoCapture(0)# 2.在每一幀數(shù)據(jù)中進(jìn)行人臉識(shí)別 while(cap.isOpened()):ret, frame = cap.read()if ret==True:gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 3.實(shí)例化OpenCV人臉識(shí)別的分類器face_cas = cv.CascadeClassifier("haarcascade_frontalface_default.xml")face_cas.load('haarcascade_frontalface_default.xml')# 4.調(diào)用識(shí)別人臉faceRects = face_cas.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, 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()| haarcascade_lefteye_2splits.xml | 可用來檢測睜開或閉著的眼睛 |
| haarcascade_eye.xml | 可用來檢測睜開或閉著的眼睛 |
| haarcascade_eye_tree_eyeglasses.xml | 僅在帶被檢測者戴眼鏡時(shí)方可檢測 |
| haarcascade_frontalcatface | 貓臉檢測 |
| haarcascade_frontalcatface_extended | 貓臉檢測 |
| haarcascade_smile | 微笑檢測 |
| haarcascade_upperbody | 人體上半部分檢測 |
| haarcascade_russian_plate_number.xml | 俄羅斯車牌識(shí)別 |
| haarcascade_righteye_2splits | 用于進(jìn)行人臉和人眼檢測 |
| haarcascade_profileface | 側(cè)臉檢測 |
| haarcascade_lowerbody | 身體下半部分檢測 |
| licence_plate_rus_16stages | 俄羅斯汽車牌照檢測 |
| haarcascade_fullbody | 人體全身檢測 |
| haarcascade_frontalface_default | 人臉識(shí)別 |
| haarcascade_frontalface_alt2 | 人臉識(shí)別 |
| haarcascade_frontalface_alt_tree | 人臉識(shí)別 |
| haarcascade_frontalface_alt.xml | 人臉識(shí)別 |
haarcascade_frontalface_default.xml下載:
https://github.com/opencv/opencv/tree/master/data/haarcascades
總結(jié)
以上是生活随笔為你收集整理的OpenCV 简单的人脸识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV meanshift目标追踪
- 下一篇: OpenCV camshift目标追踪