基于OpenCV和Gradio實(shí)現(xiàn)簡(jiǎ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í)別簡(jiǎn)單,復(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)簡(jiǎ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的教程
- 樹莓派極簡(jiǎn)安裝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 selenium頁面加載慢超時(shí)的解決方案
這篇文章主要介紹了Python selenium頁面加載慢超時(shí)的解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
python獲取當(dāng)前git的repo地址的示例代碼
大家好,當(dāng)談及版本控制系統(tǒng)時(shí),Git是最為廣泛使用的一種,而Python作為一門多用途的編程語言,在處理Git倉庫時(shí)也展現(xiàn)了其強(qiáng)大的能力,本文給大家介紹了python獲取當(dāng)前git的repo地址的方法,需要的朋友可以參考下2024-09-09
python 函數(shù)嵌套及多函數(shù)共同運(yùn)行知識(shí)點(diǎn)講解
在本篇文章里小編給各位整理的是一篇關(guān)于python 函數(shù)嵌套及多函數(shù)共同運(yùn)行知識(shí)點(diǎn)講解,需要的朋友們可以學(xué)習(xí)下。2020-03-03
Python3中編碼與解碼之Unicode與bytes的講解
今天小編就為大家分享一篇關(guān)于Python3中編碼與解碼之Unicode與bytes的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
python實(shí)現(xiàn)簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)算法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03

