基于OpenCV和Gradio實(shí)現(xiàn)簡單的人臉識(shí)別詳解
環(huán)境配置
- gradio 安裝
pip install gradio
- cv2 安裝
pip install python-opencv
實(shí)驗(yàn)原理
cv2有預(yù)訓(xùn)練模型face_cascade,可以對(duì)人臉進(jìn)行檢測(cè),檢測(cè)到人臉,繪制框框標(biāo)識(shí)。
完成檢測(cè),調(diào)用cv2進(jìn)行顯示。
程序設(shè)計(jì)
# -*- coding: utf-8 -*- """ Created on Sun Apr 10 17:11:06 2022 @author: liujianjian """ import gradio as gr import time import cv2 #############這里需要添加絕對(duì)路徑################### 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.人臉識(shí)別
人臉識(shí)別簡單,復(fù)制配置文件到本地,加載進(jìn)去即可。
# 轉(zhuǎn)為灰度圖 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 創(chuàng)建人臉識(shí)別分類器 face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml') face_cascade.load('./haarcascades/haarcascade_frontalface_default.xml') # 創(chuàng)建人眼識(shí)別分類器 eye_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml') face_cascade.load('./haarcascades/haarcascade_eye.xml') # 檢測(cè)人臉 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) # 進(jìn)行眼部檢測(cè) 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.保存預(yù)測(cè)結(jié)果
調(diào)用cv2.imwrite即可,注意圖像轉(zhuǎn)換。
cv2.imwrite(f"result/{time.time_ns()}.jpg", cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
5.最后運(yùn)行g(shù)radio的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 #############這里需要添加絕對(duì)路徑################### pathf = './haarcascades/haarcascade_frontalface_alt.xml' pathe = './haarcascades/haarcascade_eye.xml' ########################################### # 人臉檢測(cè)函數(shù) def face_rec(img): # 轉(zhuǎn)為灰度圖 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 創(chuàng)建人臉識(shí)別分類器 face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml') face_cascade.load('./haarcascades/haarcascade_frontalface_default.xml') # 創(chuàng)建人眼識(shí)別分類器 eye_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml') face_cascade.load('./haarcascades/haarcascade_eye.xml') # 檢測(cè)人臉 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) # 進(jìn)行眼部檢測(cè) 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()
項(xiàng)目地址: https://github.com/livingbody/face_det_cv2
以上就是基于OpenCV和Gradio實(shí)現(xiàn)簡單的人臉識(shí)別詳解的詳細(xì)內(nèi)容,更多關(guān)于OpenCV Gradio人臉識(shí)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 基于OpenCV實(shí)現(xiàn)動(dòng)態(tài)畫矩形和多邊形并保存坐標(biāo)
- 在樹莓派2或樹莓派B+上安裝Python和OpenCV的教程
- 樹莓派極簡安裝OpenCv的方法步驟
- visual studio 2012安裝配置方法圖文教程 附opencv配置教程
- windows下Pycharm安裝opencv的多種方法
- nodejs安裝與配置過程+初學(xué)實(shí)例解讀
- node-gyp安裝vuetify編譯失敗gyp?ERR的問題及解決
- 安裝nvm并使用nvm安裝nodejs及配置環(huán)境變量的全過程
- window系統(tǒng) nodejs安裝opencv環(huán)境配置圖文詳解
相關(guān)文章
Python K-means實(shí)現(xiàn)簡單圖像聚類的示例代碼
本文主要介紹了Python K-means實(shí)現(xiàn)簡單圖像聚類的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10Python模擬登錄之滑塊驗(yàn)證碼的破解(實(shí)例代碼)
這篇文章主要介紹了Python模擬登錄之滑塊驗(yàn)證碼的破解(實(shí)例代碼),代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11Python利用matplotlib繪制散點(diǎn)圖的新手教程
這篇文章主要給大家介紹了關(guān)于Python利用matplotlib繪制散點(diǎn)圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11基于Pycharm加載多個(gè)項(xiàng)目過程圖解
這篇文章主要介紹了基于Pycharm加載多個(gè)項(xiàng)目過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Python實(shí)現(xiàn)的下載8000首兒歌的代碼分享
這篇文章主要介紹了Python實(shí)現(xiàn)的下載8000首兒歌的代碼分享,本文直接給出實(shí)現(xiàn)代碼,下載的是有伴網(wǎng)的資源,需要的朋友可以參考下2014-11-11