成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python-OpenCV訓(xùn)練一個人臉識別器

付永剛 / 2287人閱讀

摘要:想要能人臉識別,我們需要訓(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

相關(guān)文章

  • Python-OpenCV人臉識別之?dāng)?shù)據(jù)集生成

    摘要:我們把要做的事分成三部分創(chuàng)建數(shù)據(jù)集訓(xùn)練識別在本文中,我們會嘗試寫一個程序來生成數(shù)據(jù)集。生成數(shù)據(jù)集我們來寫一個數(shù)據(jù)集生成腳本。為了不會將不同的人臉照片弄混,我們需要定一個命名規(guī)則,用于給照片命名。 在上一篇文章中,我們學(xué)習(xí)了如何安裝配置OpenCV和Python,然后寫了些代碼玩玩人臉檢測。現(xiàn)在我們要進(jìn)行下一步了,即搞一個人臉識別程序,就是不只是檢測還需要識別到人是誰。 來,搞人臉識別 ...

    ivyzhang 評論0 收藏0
  • Python-OpenCV進(jìn)行人臉識別

    摘要:在之前的文章中,我們學(xué)習(xí)了使用數(shù)據(jù)集訓(xùn)練出一個識別器。現(xiàn)在,我們將使用這個訓(xùn)練好的文件去識別人臉了。我們把程序改成釋放資源記得釋放資源測試然后在測試階段,這個人工智障完美地識別不出我。 在之前的文章中,我們學(xué)習(xí)了使用數(shù)據(jù)集訓(xùn)練出一個識別器。本文中,我們將載入這個識別器,然后來看見怎么識別人臉。 如果看過之前的文章,你就已經(jīng)準(zhǔn)備好了一個識別器,它就在trainner文件夾和trainne...

    Pines_Cheng 評論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • 警察必備工具!用空間融合卷積神經(jīng)網(wǎng)絡(luò)鑒別偽裝的「壞蛋」

    摘要:劍橋大學(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...

    anyway 評論0 收藏0
  • 多倫多大學(xué)反人臉識別,身份欺騙成功率達(dá)99.5%

    摘要:現(xiàn)在,人臉識別的克星反人臉識別問世了。多倫多大學(xué)教授和研究生的團(tuán)隊開發(fā)了一種算法,可以動態(tài)地破壞人臉識別系統(tǒng)。因此,成功的攻擊需要同時欺騙所有對象方案。算法對抗生成器訓(xùn)練給定人臉檢測置信度的對抗成功率。 論文地址:https://joeybose.github.io/assets/adversarial-attacks-face.pdf在一些社交媒體平臺,每次你上傳照片或視頻時,它的人臉識別...

    TalkingData 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<