您好,登錄后才能下訂單哦!
本篇內容主要講解“如何利用opencv實現人臉識別功能”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何利用opencv實現人臉識別功能”吧!
一、環境
二、使用Haar級聯進行人臉檢測
三、Haar級聯結合攝像頭
四、使用SSD的人臉檢測
五、 SSD結合攝像頭人臉檢測
pip install opencv-python
python3.9
pycharm2020
人狠話不多,直接上代碼,注釋在代碼里面,不說廢話。
測試案例:
代碼:(記得自己到下載地址下載對應的xml)
# coding=gbk """ 作者:川川 @時間 : 2021/9/5 16:38 https://github.com/opencv/opencv/tree/master/data/haarcascades """ import cv2 # 待檢測的圖片路徑 imagepath="2.jpg" image = cv2.imread(imagepath)#讀取圖片 gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#圖像轉換為灰度圖: face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')#加載使用人臉識別器 faces = face_cascade.detectMultiScale(gray)#檢測圖像中的所有面孔 #為每個人臉繪制一個藍色矩形 for x, y, width, height in faces: # 這里的color是 藍 黃 紅,與rgb相反,thickness設置寬度 cv2.rectangle(image, (x, y), (x + width, y + height), color=(255, 0, 0), thickness=2) # 最后,讓我們保存新圖像 cv2.imwrite("beauty_detected.jpg", image)
效果:
效果可以看出這個效果并不是很好。
代碼:(還是用的前面得xml)
# coding=gbk """ 攝像頭人臉識別 作者:川川 @時間 : 2021/9/5 17:15 Haar級聯結合攝像頭 """ import cv2 #創建新的cam對象 cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) #初始化人臉識別器(默認的人臉haar級聯) face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml') while True: # 從攝像頭讀取圖像 _, image = cap.read() # 轉換為灰度 image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 檢測圖像中的所有人臉 faces = face_cascade.detectMultiScale(image_gray, 1.3, 5) # 為每個人臉繪制一個藍色矩形 for x, y, width, height in faces: cv2.rectangle(image, (x, y), (x + width, y + height), color=(255, 0, 0), thickness=2) cv2.imshow("image", image) if cv2.waitKey(1) == ord("q"): break cap.release() cv2.destroyAllWindows()
效果:
代碼:
# coding=gbk """ 圖片人臉識別 作者:川川 @時間 : 2021/9/5 17:22 """ import cv2 import numpy as np # 下載鏈接:https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt prototxt_path = r"./deploy.prototxt.txt" # 下載鏈接:https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20180205_fp16/res10_300x300_ssd_iter_140000_fp16.caffemodel model_path =r"./res10_300x300_ssd_iter_140000_fp16.caffemodel" model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path) image = cv2.imread("2.jpg") h, w = image.shape[:2] blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300),(104.0, 177.0, 123.0)) model.setInput(blob) output = np.squeeze(model.forward()) font_scale = 1.0 for i in range(0, output.shape[0]): confidence = output[i, 2] if confidence > 0.5: box = output[i, 3:7] * np.array([w, h, w, h]) start_x, start_y, end_x, end_y = box.astype(np.int) cv2.rectangle(image, (start_x, start_y), (end_x, end_y), color=(255, 0, 0), thickness=2) cv2.putText(image, f"{confidence*100:.2f}%", (start_x, start_y-5), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 0, 0), 2) cv2.imshow("image", image) cv2.waitKey(0) cv2.imwrite("beauty_detected.jpg", image)
效果:
我們可以看到現在的識別效果非常好了。
代碼:
# coding=gbk """ 作者:川川 @時間 : 2021/9/5 17:26 SSD結合攝像頭的人臉檢測 """ import cv2 import numpy as np prototxt_path = "deploy.prototxt.txt" model_path = "res10_300x300_ssd_iter_140000_fp16.caffemodel" model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path) cap = cv2.VideoCapture(0) while True: _, image = cap.read() h, w = image.shape[:2] blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300), (104.0, 177.0, 123.0)) model.setInput(blob) output = np.squeeze(model.forward()) font_scale = 1.0 for i in range(0, output.shape[0]): confidence = output[i, 2] if confidence > 0.5: box = output[i, 3:7] * np.array([w, h, w, h]) start_x, start_y, end_x, end_y = box.astype(np.int) cv2.rectangle(image, (start_x, start_y), (end_x, end_y), color=(255, 0, 0), thickness=2) cv2.putText(image, f"{confidence*100:.2f}%", (start_x, start_y-5), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 0, 0), 2) cv2.imshow("image", image) if cv2.waitKey(1) == ord("q"): break cv2.destroyAllWindows() cap.release()
效果:
可以發現SSD效果特別好!
到此,相信大家對“如何利用opencv實現人臉識別功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。