利用opencv 做一個簡單的人臉識別
# %%
import cv2 as cv
import numpy as np
import imutils
import os
from PIL import Image
# %%
face_cascade = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
VIDEO_PATH = 'video/hero2.mp4'
face_id = 2
#sampleNum 用來計數樣本數目
count = 0
SAVE_PATH = 'data/'
cap = cv.VideoCapture(VIDEO_PATH)
count = 0
while cap.isOpened():
ret, img = cap.read()
if ret is not None:
if img is None:
continue
img = imutils.resize(img, width=600)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
face = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in face:
cv.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0))
count += 1
if not os.path.exists(SAVE_PATH + 'user.' + str(face_id)):
os.mkdir(SAVE_PATH + 'user.' + str(face_id))
cv.imwrite(SAVE_PATH + 'user.' + str(face_id) + "/count_" + str(count) + ".jpg", gray[y: y + h, x: x + w])
if count >= 800:
break
cv.imshow('h', img)
key = cv.waitKey(1)
if key == 27:
break
else:
break
cap.release()
cv.destroyAllWindows()
# %%
import tensorflow.keras as keras
from keras.preprocessing.image import ImageDataGenerator
train_gen = ImageDataGenerator(rescale= 1./255)
train_img_gen = train_gen.flow_from_directory('./data/')
# %%
# 人臉識別器
import time
recog = cv.face.LBPHFaceRecognizer_create()
recog.read('trainner/face.yaml')
# 建立一個函式,用於從資料集資料夾中獲取訓練圖片 , 並獲取 id
time_start = time.process_time()
def get_imgs_labels():
face_id = 0
face_arr = []
face_ids = []
for user_id in os.listdir(SAVE_PATH):
face_id = user_id.split('.')[1]
user_path = SAVE_PATH + user_id
image_paths = [os.path.join(user_path, key) for key in os.listdir(user_path)]
for path in image_paths:
face_ids.append(int(face_id))
img = cv.imread(path, 0)
# img_arr = np.array(img, dtype="uint8")
face_arr.append(img)
return face_arr, face_ids
face_arr, face_ids = get_imgs_labels()
time_end =外匯跟單gendan5.com time.process_time ()
print('runTime' + str((time_end - time_start)))
recog.train(train_img_gen)
print('train' + str((time.process_time () - time_end)))
recog.save('trainner/face.yaml')
# %%
VIDEO_PATH = 'video/hero2.mp4'
font = cv.FONT_HERSHEY_SIMPLEX
idNum = 0
names = ['unknow', 'cc', 'dm']
cap = cv.VideoCapture(VIDEO_PATH)
while cap.isOpened():
ret, img = cap.read()
img = imutils.resize(img, width=600)
if ret is not None:
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
face = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in face:
cv.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0))
id, conf = recog.predict(gray[y: y+h, x: x+w])
user = ''
if conf < 100:
user = names[id]
conf = "{0}%".format(round(100-conf))
else:
user = "unknown"
conf = "{0}%".format(round(100-conf))
cv.putText(img, user, (x + 5, y - 5), font, 1, (0,255, 0), 1)
cv.putText(img, str(conf), (x + 50, y - 5), font, 1, (0,255, 0), 1)
cv.imshow('face', img)
key = cv.waitKey(1)
if key == 27:
break
cap.release()
cv.destroyAllWindows()
# %%
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2908067/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個簡單的人臉識別庫
- 如何理解並實現一個簡單的人臉識別演算法(下):人臉識別演算法
- opencv 人臉識別OpenCV
- OpenCV — 人臉識別OpenCV
- 一個簡單的完整人臉識別系統
- 史上最簡單的人臉識別專案登上GitHub趨勢榜Github
- 基於深度學習的人臉識別系統系列(Caffe+OpenCV+Dlib)——【六】設計人臉識別的識別類深度學習OpenCV
- 樹莓派利用OpenCV的影像跟蹤、人臉識別等樹莓派OpenCV
- SAP官方提供的人臉識別APIAPI
- 用Python實現簡單的人臉識別,10分鐘搞定!(附原始碼)Python原始碼
- OpenCV-Python 人臉眼睛嘴識別OpenCVPython
- 【基於PCA的人臉識別演算法】從QR分解到PCA,再到人臉識別PCA演算法
- 基於PCA(主成分分析)的人臉識別PCA
- 基於OpenCV+dlib開發一個人臉識別應用OpenCV
- 基於opencv實現簡單人臉檢測OpenCV
- Python+OpenCV人臉識別技術詳解PythonOpenCV
- 直播美顏SDK的人臉識別技術進階知識
- 64行程式碼實現簡單人臉識別行程
- 用Python實現類FaceID的人臉識別?一文告訴你該怎麼做Python
- 玉伯的人生答案:做一個簡單自由有愛的技術人
- 一個簡單快速的OCR表單識別錄入工具
- Python-OpenCV人臉識別之資料集生成PythonOpenCV
- 基於卷積神經網路的人臉表情識別應用--AR川劇變臉(一)卷積神經網路
- 弱電智慧化系統中的人臉識別技術
- 【opencv3】 svm實現手寫體與人臉識別OpenCV
- 【ROS】OpenCV+ROS 實現人臉識別(Ubantu16.04)ROSOpenCV
- 基於OpenCV和dlib的人臉交換實現探究OpenCV
- 基於DNN的人臉識別中的反欺騙機制DNN
- Python驗證碼識別:利用pytesser識別簡單圖形驗證碼Python
- Java教程:PC人臉識別登入,竟然出乎意料的簡單Java
- 如何訓練一個簡單的音訊識別網路音訊
- 【OpenCv】OpenCv原始版本與新版本(2.4.10)的一個簡單對比OpenCV
- [OpenCV實戰]1 基於深度學習識別人臉性別和年齡OpenCV深度學習
- 帶你玩轉OpenHarmony AI:基於Seetaface2的人臉識別AI
- 一個簡單木馬分析及接管利用
- 一張照片,幾秒get你的所有資訊!這個APP的人臉識別資料庫遠超FBIAPP資料庫
- nodeJS做一個簡單的爬蟲NodeJS爬蟲
- 一種採用隨機動作指令的人臉活體檢測技術,有效避免人臉識別唄破解隨機