摘要:想要能人臉識別,我們需要訓(xùn)練一個識別器處理?,F(xiàn)在,是時候用這個訓(xùn)練集來訓(xùn)練一個人臉識別器了。同目錄下,創(chuàng)建一個文件夾,名為,用于存放我們訓(xùn)練后的識別器。訓(xùn)練差不多完成了,現(xiàn)在我們調(diào)用一下這個函數(shù),然后將我們的數(shù)據(jù)喂給識別器去訓(xùn)練吧。
想要能人臉識別,我們需要訓(xùn)練一個識別器處理。訓(xùn)練的話就需要之前已經(jīng)標(biāo)注好的訓(xùn)練集,在前一篇文章中,我們創(chuàng)建了一個已經(jīng)標(biāo)注好的訓(xùn)練集?,F(xiàn)在,是時候用這個訓(xùn)練集來訓(xùn)練一個人臉識別器了。當(dāng)然,是用OpenCV Python。
準(zhǔn)備首先,我們在(前一篇文章的)同目錄下創(chuàng)建一個叫Python文件,名為trainner.py,用于編寫數(shù)據(jù)集生成腳本。同目錄下,創(chuàng)建一個文件夾,名為trainner,用于存放我們訓(xùn)練后的識別器。
現(xiàn)在,項目目錄大概如此:
其他亂七八糟的文件、目錄,都是之前的文章中創(chuàng)建的。
在開始之前,我們先安裝一個Python庫,Pillow:
pip install pillow開始Coding 導(dǎo)入庫
編寫訓(xùn)練程序需要先做是:
導(dǎo)入opencv庫
導(dǎo)入os庫,用于方法文件
導(dǎo)入numpy庫,用于計算
導(dǎo)入pillow庫,用于處理圖像
其實就是這樣:
import cv2 import os import numpy as np from PIL import Image
現(xiàn)在我們初始化識別器和人臉檢測器:
recognizer = cv2.face.LBPHFaceRecognizer_create() # 有可能是 recognizer = cv2.createLBPHFaceRecognizer() detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
如果face.LBPHFaceRecognizer_create或createLBPHFaceRecognizer顯示不存在,則需要下載opencv-contrib-python:
pip install opencv-contrib-python
當(dāng)然用IDE的也行:
載入訓(xùn)練數(shù)據(jù)恩,現(xiàn)在我們來創(chuàng)建一個函數(shù),用于從數(shù)據(jù)集文件夾中獲取訓(xùn)練圖片,然后從圖片的文件名中獲取到這個素材相應(yīng)的id。需要remind的是,根據(jù)前文,圖片的格式是User.id.samplenumber。
給函數(shù)起個名字,就叫g(shù)et_images_and_labels吧(Python不建議用駝峰),然后參數(shù)需要有素材的文件夾:
def get_images_and_labels(path):
在函數(shù)中,我們需要的做的有:
從數(shù)據(jù)集文件夾中載入訓(xùn)練圖片
獲取到人臉和id
整理成list并返回
獲取圖片:
image_paths=[os.path.join(path, f) for f in os.listdir(path)]
新建兩個list用于存放:
face_samples=[] ids=[]
遍歷圖片路徑,導(dǎo)入圖片和id,添加到list:
for image_path in image_paths: image = Image.open(image_path).convert("L") image_np = np.array(image, "uint8") image_id = int(os.path.split(image_path)[-1].split(".")[1]) faces = detector.detectMultiScale(image_np) for (x, y, w, h) in faces: face_samples.append(image_np[y:y + h, x:x + w]) ids.append(image_id)
以上代碼,使用了Image.open(image_path).convert(‘L’)通過圖片路徑并將其轉(zhuǎn)換為灰度圖片。
接下來我們通過image_np = np.array(image, "uint8")將圖片轉(zhuǎn)換成了Numpy數(shù)組,Numpy數(shù)組的邏輯結(jié)構(gòu)和普通的數(shù)組無異,但是是經(jīng)過優(yōu)化的。
為了獲取到id,我們將圖片的路徑分裂一下并獲取相關(guān)信息,即image_id = int(os.path.split(image_path)[-1].split(".")[1])
接下來的一個循環(huán)for (x, y, w, h) in faces則是將圖片和id都添加在list中。
再return一下即可。
訓(xùn)練差不多完成了,現(xiàn)在我們調(diào)用一下這個函數(shù),然后將我們的數(shù)據(jù)喂給識別器去訓(xùn)練吧。
faces, Ids = get_images_and_labels("dataSet") recognizer.train(faces, np.array(Ids)) recognizer.save("trainner/trainner.yml")
現(xiàn)在只要我們運行這些代碼,程序就會在trainner文件夾中創(chuàng)建一個trainner.yml文件。
這個yml文件,存著我們的訓(xùn)練好的數(shù)據(jù),以后識別會用到的。
完整代碼import cv2 import os import numpy as np from PIL import Image # recognizer = cv2.createLBPHFaceRecognizer() detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") recognizer = cv2.face.LBPHFaceRecognizer_create() def get_images_and_labels(path): image_paths = [os.path.join(path, f) for f in os.listdir(path)] face_samples = [] ids = [] for image_path in image_paths: image = Image.open(image_path).convert("L") image_np = np.array(image, "uint8") if os.path.split(image_path)[-1].split(".")[-1] != "jpg": continue image_id = int(os.path.split(image_path)[-1].split(".")[1]) faces = detector.detectMultiScale(image_np) for (x, y, w, h) in faces: face_samples.append(image_np[y:y + h, x:x + w]) ids.append(image_id) return face_samples, ids faces, Ids = get_images_and_labels("dataSet") recognizer.train(faces, np.array(Ids)) recognizer.save("trainner/trainner.yml")
先這樣吧
原文,若有錯誤之處請指出,更多地關(guān)注煎魚。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41758.html
摘要:我們把要做的事分成三部分創(chuàng)建數(shù)據(jù)集訓(xùn)練識別在本文中,我們會嘗試寫一個程序來生成數(shù)據(jù)集。生成數(shù)據(jù)集我們來寫一個數(shù)據(jù)集生成腳本。為了不會將不同的人臉照片弄混,我們需要定一個命名規(guī)則,用于給照片命名。 在上一篇文章中,我們學(xué)習(xí)了如何安裝配置OpenCV和Python,然后寫了些代碼玩玩人臉檢測。現(xiàn)在我們要進(jìn)行下一步了,即搞一個人臉識別程序,就是不只是檢測還需要識別到人是誰。 來,搞人臉識別 ...
摘要:在之前的文章中,我們學(xué)習(xí)了使用數(shù)據(jù)集訓(xùn)練出一個識別器。現(xiàn)在,我們將使用這個訓(xùn)練好的文件去識別人臉了。我們把程序改成釋放資源記得釋放資源測試然后在測試階段,這個人工智障完美地識別不出我。 在之前的文章中,我們學(xué)習(xí)了使用數(shù)據(jù)集訓(xùn)練出一個識別器。本文中,我們將載入這個識別器,然后來看見怎么識別人臉。 如果看過之前的文章,你就已經(jīng)準(zhǔn)備好了一個識別器,它就在trainner文件夾和trainne...
摘要:時間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:劍橋大學(xué)印度國家技術(shù)學(xué)院近日聯(lián)合發(fā)布了一篇論文,名為利用空間融合卷積神經(jīng)網(wǎng)絡(luò)通過面部關(guān)鍵點進(jìn)行偽裝人臉識別,該論文利用空間融合卷積神經(jīng)網(wǎng)絡(luò)為刑偵過程的人臉識別提供了有力的支持,我們來一窺究竟。 劍橋大學(xué)、印度國家技術(shù)學(xué)院近日聯(lián)合發(fā)布了一篇論文,名為《利用空間融合卷積神經(jīng)網(wǎng)絡(luò)通過面部關(guān)鍵點進(jìn)行偽裝人臉識別Disguised Face Identification (DFI) with Faci...
摘要:現(xiàn)在,人臉識別的克星反人臉識別問世了。多倫多大學(xué)教授和研究生的團(tuán)隊開發(fā)了一種算法,可以動態(tài)地破壞人臉識別系統(tǒng)。因此,成功的攻擊需要同時欺騙所有對象方案。算法對抗生成器訓(xùn)練給定人臉檢測置信度的對抗成功率。 論文地址:https://joeybose.github.io/assets/adversarial-attacks-face.pdf在一些社交媒體平臺,每次你上傳照片或視頻時,它的人臉識別...
閱讀 1582·2021-11-02 14:42
閱讀 2321·2021-10-11 10:58
閱讀 670·2021-09-26 09:46
閱讀 2919·2021-09-08 09:35
閱讀 1418·2021-08-24 10:01
閱讀 1241·2019-08-30 15:54
閱讀 3613·2019-08-30 15:44
閱讀 1804·2019-08-30 10:49