用Python實現簡單的人臉識別,10分鐘搞定!(附原始碼)
#----- 建立模型、建立資料集 -----#----- 建立模型、建立資料集 -----
import os
import cv2
import numpy as np
from PIL import Image
# 匯入 pillow 庫,用於處理影像
# 設定之前收集好的資料檔案路徑
path = 'data'
# 初始化識別的方法
recog = cv2.face.LBPHFaceRecognizer_create()
# 呼叫熟悉的人臉分類器
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 建立一個函式,用於從資料集資料夾中獲取訓練圖片 , 並獲取 id
# 注意圖片的命名格式為 User.id.sampleNum
def get_images_and_labels(path):
image_paths = [os.path.join(path,f) for f in os.listdir(path)]
# 新建連個 list 用於存放
face_samples = []
ids = []
# 遍歷圖片路徑,匯入圖片和 id 新增到 list 中
for image_path in image_paths:
# 透過圖片路徑將其轉換為灰度圖片
img = Image.open(image_path).convert('L')
# 將圖片轉化為陣列
img_np = np.array(img,'uint8')
if os.path.split(image_path)[-1].split(".")[-1] != 'jpg':
continue
# 為了獲取 id ,外匯跟單gendan5.com將圖片和路徑分裂並獲取
id = int(os.path.split(image_path)[-1].split(".")[1])
faces = detector.detectMultiScale(img_np)
# 將獲取的圖片和 id 新增到 list 中
for(x,y,w,h) in faces:
face_samples.append(img_np[y:y+h,x:x+w])
ids.append(id)
return face_samples,ids
# 呼叫函式並將資料餵給識別器訓練
print('Training...')
faces,ids = get_images_and_labels(path)
# 訓練模型
recog.train(faces,np.array(ids))
# 儲存模型
recog.save('trainner/trainner.yml')
這就讓電腦認識到你是與眾不同的那顆星~
3. 識別
檢測,校驗,輸出其實都是識別的這一過程,與前兩個過程不同,這是涉及實際使用的過程,所以我們把他整合放在一個統一的一個檔案內。
#----- 檢測、校驗並輸出結果 -----
import cv2
# 準備好識別方法
recognizer = cv2.face.LBPHFaceRecognizer_create()
# 使用之前訓練好的模型
recognizer.read('trainner/trainner.yml')
# 再次呼叫人臉分類器
cascade_path = "haarcascade_frontalface_default.xml"
face_cascade = cv2.CascadeClassifier(cascade_path)
# 載入一個字型,用於識別後,在圖片上標註出物件的名字
font = cv2.FONT_HERSHEY_SIMPLEX
idnum = 0
# 設定好與 ID 號碼對應的使用者名稱,如下,如 0 對應的就是初始
names = [' 初始 ','admin','user1','user2','user3']
# 呼叫攝像頭
cam = cv2.VideoCapture(0)
minW = 0.1*cam.get(3)
minH = 0.1*cam.get(4)
while True:
ret,img = cam.read()
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 識別人臉
faces = face_cascade.detectMultiScale(
gray,
scaleFactor = 1.2,
minNeighbors = 5,
minSize = (int(minW),int(minH))
)
# 進行校驗
for(x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
idnum,confidence = recognizer.predict(gray[y:y+h,x:x+w])
# 計算出一個檢驗結果
if confidence < 100:
idum = names[idnum]
confidence = "{0}%",format(round(100-confidence))
else:
idum = "unknown"
confidence = "{0}%",format(round(100-confidence))
# 輸出檢驗結果以及使用者名稱
cv2.putText(img,str(idum),(x+5,y-5),font,1,(0,0,255),1)
cv2.putText(img,str(confidence),(x+5,y+h-5),font,1,(0,0,0),1)
# 展示結果
cv2.imshow('camera',img)
k = cv2.waitKey(20)
if k == 27:
break
# 釋放資源
cam.release()
cv2.destroyAllWindows()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2764275/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何理解並實現一個簡單的人臉識別演算法(下):人臉識別演算法
- 一個簡單的人臉識別庫
- 64行程式碼實現簡單人臉識別行程
- 利用opencv 做一個簡單的人臉識別OpenCV
- 基於Java實現的人臉識別功能,一切都為了寵粉(附原始碼)Java原始碼
- 3 分鐘搞定 web 人臉識別登入,這樣式愛了Web
- 十分鐘搞定Keras序列到序列學習(附程式碼實現)Keras
- 史上最簡單的人臉識別專案登上GitHub趨勢榜Github
- 人臉識別的簡要介紹(附例項、Python程式碼)Python
- 用Python實現類FaceID的人臉識別?一文告訴你該怎麼做Python
- SAP官方提供的人臉識別APIAPI
- 30分鐘實現小程式語音識別
- 3分鐘內實現人臉檢測
- 10分鐘搭建你的第一個影象識別模型(附步驟、程式碼)模型
- 【設計模式】三、單例模式(10分鐘深度搞定)設計模式單例
- 基於深度學習的人臉性別識別系統(含UI介面,Python程式碼)深度學習UIPython
- 10分鐘瞭解MVVM,實現簡易MVVMMVVM
- 美顏sdk的人臉表情識別是依靠什麼技術實現的?
- 基於卷積神經網路和tensorflow實現的人臉識別卷積神經網路
- 低程式碼平臺探索:10分鐘實現一個表單應用(包含前端)前端
- 人臉檢測識別,人臉檢測,人臉識別,離線檢測,C#原始碼C#原始碼
- 白碼低程式碼平臺探索:10分鐘實現一個表單應用(包含前端)前端
- Python 超簡單實現人類面部情緒的識別Python
- 10分鐘教你用Python實現微信翻譯機器人Python機器人
- 兩分鐘教會你重灌系統Windows10,簡單到全程自動化搞定Windows
- 智慧校園人臉識別系統原始碼原始碼
- 【vue原始碼】簡單實現directive功能Vue原始碼
- 菜鳥學SSH(一)——Struts實現簡單登入(附原始碼)原始碼
- 【基於PCA的人臉識別演算法】從QR分解到PCA,再到人臉識別PCA演算法
- 一個簡單的完整人臉識別系統
- 10分鐘剖析Android原始碼——序Android原始碼
- 機器學習實戰-SVM模型實現人臉識別機器學習模型
- 基於PCA(主成分分析)的人臉識別PCA
- 五分鐘實現一個chrome外掛(含原始碼)Chrome原始碼
- 10分鐘搞定Mysql主從部署配置MySql
- 如何用Python實現iPhone X的人臉解鎖功能?PythoniPhone
- emacs最簡單入門,只要10分鐘Mac
- 基於Python的人臉檢測與分類Python