教你如何用Python實(shí)現(xiàn)人臉識(shí)別(含源代碼)
工具與圖書館
- Python-3.x
- CV2-4.5.2
- 矮胖-1.20.3
- 人臉識(shí)別-1.3.0
若要安裝上述軟件包,請(qǐng)使用以下命令。
pip install numpy opencv-python
要安裝FaceRecognition,首先安裝dlib包。
pip install dlib
現(xiàn)在,使用以下命令安裝面部識(shí)別模塊
pip install face_recognition
下載人臉識(shí)別Python代碼
請(qǐng)下載python面部識(shí)別項(xiàng)目的源代碼: 人臉識(shí)別工程代碼
項(xiàng)目數(shù)據(jù)集
我們可以使用我們自己的數(shù)據(jù)集來(lái)完成這個(gè)人臉識(shí)別項(xiàng)目。對(duì)于這個(gè)項(xiàng)目,讓我們以受歡迎的美國(guó)網(wǎng)絡(luò)系列“老友記”為數(shù)據(jù)集。該數(shù)據(jù)集包含在面部識(shí)別項(xiàng)目代碼中,您在上一節(jié)中下載了該代碼。
建立人臉識(shí)別模型的步驟
在繼續(xù)之前,讓我們知道什么是人臉識(shí)別和檢測(cè)。
人臉識(shí)別是從照片和視頻幀中識(shí)別或驗(yàn)證一個(gè)人的臉的過(guò)程。
人臉檢測(cè)是指在圖像中定位和提取人臉(位置和大小)以供人臉檢測(cè)算法使用的過(guò)程。
人臉識(shí)別方法用于定位圖像中唯一指定的特征。在大多數(shù)情況下,面部圖片已經(jīng)被移除、裁剪、縮放和轉(zhuǎn)換為灰度。人臉識(shí)別包括三個(gè)步驟:人臉檢測(cè)、特征提取、人臉識(shí)別。
OpenCV是一個(gè)用C++編寫的開(kāi)源庫(kù).它包含了用于計(jì)算機(jī)視覺(jué)任務(wù)的各種算法和深度神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)。
1.準(zhǔn)備數(shù)據(jù)集
創(chuàng)建2個(gè)目錄,訓(xùn)練和測(cè)試。從互聯(lián)網(wǎng)上為每個(gè)演員選擇一個(gè)圖片,并下載到我們的“火車”目錄中。確保您所選擇的圖像能夠很好地顯示人臉的特征,以便對(duì)分類器進(jìn)行分類。
為了測(cè)試模型,讓我們拍攝一張包含所有強(qiáng)制轉(zhuǎn)換的圖片,并將其放到我們的“test”目錄中。
為了您的舒適,我們?cè)黾恿伺嘤?xùn)和測(cè)試數(shù)據(jù)與項(xiàng)目代碼。
2.模型的訓(xùn)練
首先導(dǎo)入必要的模塊。
import face_recognition as fr import cv2 import numpy as np import os
人臉識(shí)別庫(kù)包含幫助人臉識(shí)別過(guò)程的各種實(shí)用程序的實(shí)現(xiàn)。
現(xiàn)在,創(chuàng)建2個(gè)列表來(lái)存儲(chǔ)圖像(人員)的名稱及其各自的臉編碼。
path = "./train/" known_names = [] known_name_encodings = [] images = os.listdir(path)
人臉編碼是一種值的矢量,它代表著臉部特征之間的重要度量,如眼睛之間的距離、額頭的寬度等。
我們循環(huán)遍歷火車目錄中的每個(gè)圖像,提取圖像中的人的姓名,計(jì)算其臉編碼向量,并將信息存儲(chǔ)在相應(yīng)的列表中。
for _ in images: image = fr.load_image_file(path + _) image_path = path + _ encoding = fr.face_encodings(image)[0] known_name_encodings.append(encoding) known_names.append(os.path.splitext(os.path.basename(image_path))[0].capitalize())
3.在測(cè)試數(shù)據(jù)集中測(cè)試模型
如前所述,我們的測(cè)試數(shù)據(jù)集只包含一個(gè)包含所有人員的圖像。
使用CV2 imread()方法讀取測(cè)試映像。
test_image = "./test/test.jpg" image = cv2.imread(test_image)
人臉識(shí)別庫(kù)提供了一種名為Face_Locations()的有用方法,它定位圖像中檢測(cè)到的每個(gè)人臉的坐標(biāo)(左、下、右、上)。使用這些位置值,我們可以很容易地找到臉編碼。
face_locations = fr.face_locations(image) face_encodings = fr.face_encodings(image, face_locations)
我們循環(huán)遍歷每個(gè)面部位置及其在圖像中的編碼。然后,我們將這種編碼與“列車”數(shù)據(jù)集中的人臉編碼進(jìn)行比較。
然后計(jì)算人臉距離,即計(jì)算測(cè)試圖像編碼和訓(xùn)練圖像編碼之間的相似性?,F(xiàn)在,我們從它選取最小值距離,表示測(cè)試圖像的這張臉是訓(xùn)練數(shù)據(jù)集中的人之一。
現(xiàn)在,使用CV2模塊中的方法繪制一個(gè)帶有面部位置坐標(biāo)的矩形。
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings): matches = fr.compare_faces(known_name_encodings, face_encoding) name = "" face_distances = fr.face_distance(known_name_encodings, face_encoding) best_match = np.argmin(face_distances) if matches[best_match]: name = known_names[best_match] cv2.rectangle(image, (left, top), (right, bottom), (0, 0, 255), 2) cv2.rectangle(image, (left, bottom - 15), (right, bottom), (0, 0, 255), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText(image, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
使用CV2模塊的imShow()方法顯示圖像。
cv2.imshow("Result", image)
使用imwrite()方法將圖像保存到當(dāng)前工作目錄中。
cv2.imwrite("./output.jpg", image)
釋放未被釋放的資源(如果有的話)。
cv2.waitKey(0) cv2.destroyAllWindows()
Python人臉識(shí)別輸出
讓我們看看模型的輸出。
摘要
在這個(gè)機(jī)器學(xué)習(xí)項(xiàng)目中,我們使用我們自己的自定義數(shù)據(jù)集,在python和OpenCV中開(kāi)發(fā)了一個(gè)人臉識(shí)別模型。
到此這篇關(guān)于教你如何用Python實(shí)現(xiàn)人臉識(shí)別(含源代碼)的文章就介紹到這了,更多相關(guān)Python人臉識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 基于Python實(shí)現(xiàn)簡(jiǎn)單的人臉識(shí)別系統(tǒng)
- Python實(shí)現(xiàn)人臉識(shí)別
- 基于Python搭建人臉識(shí)別考勤系統(tǒng)
- 使用Python實(shí)現(xiàn)簡(jiǎn)單的人臉識(shí)別功能(附源碼)
- Python基于pyopencv人臉識(shí)別并繪制GUI界面
- Python人臉識(shí)別之微笑檢測(cè)
- 基于Python實(shí)現(xiàn)人臉識(shí)別和焦點(diǎn)人物檢測(cè)功能
- Python摸魚神器之利用樹莓派opencv人臉識(shí)別自動(dòng)控制電腦顯示桌面
- Python 幾行代碼即可實(shí)現(xiàn)人臉識(shí)別
相關(guān)文章
PIP安裝python包出現(xiàn)超時(shí)問(wèn)題的解決
這篇文章主要介紹了PIP安裝python包出現(xiàn)超時(shí)問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03pytorch動(dòng)態(tài)網(wǎng)絡(luò)以及權(quán)重共享實(shí)例
今天小編就為大家分享一篇pytorch動(dòng)態(tài)網(wǎng)絡(luò)以及權(quán)重共享實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01Django如何繼承AbstractUser擴(kuò)展字段
這篇文章主要介紹了Django如何繼承AbstractUser擴(kuò)展字段,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python利用pandas將excel文件轉(zhuǎn)換為txt文件的方法
今天小編就為大家分享一篇python利用pandas將excel文件轉(zhuǎn)換為txt文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10keras實(shí)現(xiàn)VGG16方式(預(yù)測(cè)一張圖片)
這篇文章主要介紹了keras實(shí)現(xiàn)VGG16方式(預(yù)測(cè)一張圖片),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07基于Python編寫一個(gè)簡(jiǎn)單的垃圾郵件分類器
隨著電子郵件的廣泛使用,垃圾郵件也日益增多,本篇文章將介紹如何使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的垃圾郵件分類器,幫助您更好地管理自己的電子郵件,需要的可以參考一下2023-04-04