基于OpenCV和Gradio實現(xiàn)簡單的人臉識別詳解
更新時間:2024年04月08日 11:44:07 作者:Livingbody
這篇文章主要為大家詳細介紹了如何基于OpenCV和Gradio實現(xiàn)簡單的人臉識別功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
環(huán)境配置
- gradio 安裝
pip install gradio
- cv2 安裝
pip install python-opencv
實驗原理
cv2有預訓練模型face_cascade,可以對人臉進行檢測,檢測到人臉,繪制框框標識。
完成檢測,調(diào)用cv2進行顯示。
程序設計
# -*- coding: utf-8 -*- """ Created on Sun Apr 10 17:11:06 2022 @author: liujianjian """ import gradio as gr import time import cv2 #############這里需要添加絕對路徑################### pathf = './haarcascades/haarcascade_frontalface_alt.xml' pathe = './haarcascades/haarcascade_eye.xml' ###########################################
1.上傳圖片
上傳圖片采用gradio,直接上傳即可,或者可加入demo圖片,供選擇。
demo = gr.Interface( face_rec, gr.Image(), "image", examples=["images/1.jpg", "images/2.jpg", "images/3.jpg", "images/4.jpg"], )
2.人臉識別
人臉識別簡單,復制配置文件到本地,加載進去即可。
# 轉(zhuǎn)為灰度圖 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 創(chuàng)建人臉識別分類器 face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml') face_cascade.load('./haarcascades/haarcascade_frontalface_default.xml') # 創(chuàng)建人眼識別分類器 eye_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml') face_cascade.load('./haarcascades/haarcascade_eye.xml') # 檢測人臉 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=3, flags=cv2.IMREAD_GRAYSCALE, minSize=(40, 40))
3.繪制方框
就是繪制方框了,繪制顯示即可。
# 在人臉周圍繪制方框 for (x, y, w, h) in faces: img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2) # 進行眼部檢測 eyes = eye_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, flags=cv2.IMREAD_GRAYSCALE, minSize=(3, 3)) for (ex, ey, ew, eh) in eyes: # 繪制眼部方框 img = cv2.rectangle(img, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
4.保存預測結果
調(diào)用cv2.imwrite即可,注意圖像轉(zhuǎn)換。
cv2.imwrite(f"result/{time.time_ns()}.jpg", cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
5.最后運行gradio的lauch
if __name__ == "__main__": demo.launch()
完整代碼
# -*- coding: utf-8 -*- """ Created on Sun April 4 17:11:06 2023 @author: liujianjian """ import gradio as gr import time import cv2 #############這里需要添加絕對路徑################### pathf = './haarcascades/haarcascade_frontalface_alt.xml' pathe = './haarcascades/haarcascade_eye.xml' ########################################### # 人臉檢測函數(shù) def face_rec(img): # 轉(zhuǎn)為灰度圖 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 創(chuàng)建人臉識別分類器 face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml') face_cascade.load('./haarcascades/haarcascade_frontalface_default.xml') # 創(chuàng)建人眼識別分類器 eye_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml') face_cascade.load('./haarcascades/haarcascade_eye.xml') # 檢測人臉 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=3, flags=cv2.IMREAD_GRAYSCALE, minSize=(40, 40)) # 在人臉周圍繪制方框 for (x, y, w, h) in faces: img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2) # 進行眼部檢測 eyes = eye_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, flags=cv2.IMREAD_GRAYSCALE, minSize=(3, 3)) for (ex, ey, ew, eh) in eyes: # 繪制眼部方框 img = cv2.rectangle(img, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) cv2.imwrite(f"result/{time.time_ns()}.jpg", cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) return img demo = gr.Interface( face_rec, gr.Image(), "image", examples=["images/1.jpg", "images/2.jpg", "images/3.jpg", "images/4.jpg"], ) if __name__ == "__main__": demo.launch()
項目地址: https://github.com/livingbody/face_det_cv2
以上就是基于OpenCV和Gradio實現(xiàn)簡單的人臉識別詳解的詳細內(nèi)容,更多關于OpenCV Gradio人臉識別的資料請關注腳本之家其它相關文章!
相關文章
Python K-means實現(xiàn)簡單圖像聚類的示例代碼
本文主要介紹了Python K-means實現(xiàn)簡單圖像聚類的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10