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