基于OpenCV和Gradio實(shí)現(xiàn)簡單的人臉識別詳解
環(huán)境配置
- gradio 安裝
pip install gradio - cv2 安裝
pip install python-opencv
實(shí)驗(yàn)原理
cv2有預(yù)訓(xùn)練模型face_cascade,可以對人臉進(jìn)行檢測,檢測到人臉,繪制框框標(biāo)識。
完成檢測,調(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 #############這里需要添加絕對路徑################### 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.人臉識別
人臉識別簡單,復(fù)制配置文件到本地,加載進(jìn)去即可。
# 轉(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)
# 進(jìn)行眼部檢測
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ù)測結(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
#############這里需要添加絕對路徑###################
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)
# 進(jìn)行眼部檢測
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)簡單的人臉識別詳解的詳細(xì)內(nèi)容,更多關(guān)于OpenCV Gradio人臉識別的資料請關(guān)注腳本之家其它相關(guān)文章!
- 基于OpenCV實(shí)現(xiàn)動態(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-10
Python模擬登錄之滑塊驗(yàn)證碼的破解(實(shí)例代碼)
這篇文章主要介紹了Python模擬登錄之滑塊驗(yàn)證碼的破解(實(shí)例代碼),代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
Python利用matplotlib繪制散點(diǎn)圖的新手教程
這篇文章主要給大家介紹了關(guān)于Python利用matplotlib繪制散點(diǎn)圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
基于Pycharm加載多個(gè)項(xiàng)目過程圖解
這篇文章主要介紹了基于Pycharm加載多個(gè)項(xiàng)目過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
Python實(shí)現(xiàn)的下載8000首兒歌的代碼分享
這篇文章主要介紹了Python實(shí)現(xiàn)的下載8000首兒歌的代碼分享,本文直接給出實(shí)現(xiàn)代碼,下載的是有伴網(wǎng)的資源,需要的朋友可以參考下2014-11-11

