欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python搭建人臉識(shí)別考勤系統(tǒng)

 更新時(shí)間:2021年12月29日 11:40:42   作者:woshicver  
人臉識(shí)別目前正被用于讓世界更安全、更智能、更方便。在本文中,你將學(xué)習(xí)如何使用 Python 構(gòu)建人臉識(shí)別系統(tǒng)。人臉識(shí)別比人臉檢測(cè)更進(jìn)一步。感興趣的可以學(xué)習(xí)一下

介紹

在本文中,你將學(xué)習(xí)如何使用 Python 構(gòu)建人臉識(shí)別系統(tǒng)。人臉識(shí)別比人臉檢測(cè)更進(jìn)一步。在人臉檢測(cè)中,我們只檢測(cè)人臉在圖像中的位置,但在人臉識(shí)別中,我們制作了一個(gè)可以識(shí)別人的系統(tǒng)。

“人臉識(shí)別是驗(yàn)證或識(shí)別圖片或視頻中的人的挑戰(zhàn)。大型科技巨頭仍在努力打造更快、更準(zhǔn)確的人臉識(shí)別模型?!?/p>

人臉識(shí)別的實(shí)際應(yīng)用

人臉識(shí)別目前正被用于讓世界更安全、更智能、更方便。

有幾個(gè)用例:

  • 尋找失蹤人員
  • 零售犯罪
  • 安全標(biāo)識(shí)
  • 識(shí)別社交媒體上的帳戶(hù)
  • 考勤系統(tǒng)
  • 識(shí)別汽車(chē)中的駕駛員

根據(jù)性能和復(fù)雜性,有多種方法可以執(zhí)行面部識(shí)別。

傳統(tǒng)人臉識(shí)別算法:

在 1990 年代,整體方法被用于人臉識(shí)別。手工制作的局部描述符在 1920 年代初期開(kāi)始流行,然后在 2000 年代后期采用局部特征學(xué)習(xí)方法。目前廣泛使用并在OpenCV中實(shí)現(xiàn)的算法如下:

每種方法都遵循不同的方法來(lái)提取圖像信息并將其與輸入圖像進(jìn)行匹配。

Fischer-faces和Eigenfaces與 SURF 和 SIFT 具有幾乎相似的方法。

LBPH 是一種簡(jiǎn)單但非常有效的方法,但與現(xiàn)代人臉識(shí)別器相比,速度較慢。

與現(xiàn)代人臉識(shí)別算法相比,這些算法并不快。傳統(tǒng)算法不能僅通過(guò)拍攝一個(gè)人的單張照片來(lái)訓(xùn)練。

人臉識(shí)別深度學(xué)習(xí):

一些廣泛使用的基于深度學(xué)習(xí)的人臉識(shí)別系統(tǒng)如下:

  • DeepFace
  • DeepID series of systems
  • VGGFace
  • FaceNet

人臉識(shí)別器一般是在人臉圖像中找出重要的點(diǎn),如嘴角、眉毛、眼睛、鼻子、嘴唇等。這些點(diǎn)的坐標(biāo)稱(chēng)為五官點(diǎn),這樣的點(diǎn)有66個(gè)。這樣,尋找特征點(diǎn)的不同技術(shù)給出不同的結(jié)果。

來(lái)源:https://www.pinterest.com/mrmosherart/face-landmarks/

人臉識(shí)別模型涉及的步驟:

1.人臉檢測(cè):定位人臉并在人臉周?chē)L制邊界框并保留邊界框的坐標(biāo)。

2.人臉對(duì)齊:標(biāo)準(zhǔn)化人臉以與訓(xùn)練數(shù)據(jù)庫(kù)一致。

3.特征提?。禾崛⒂糜谟?xùn)練和識(shí)別任務(wù)的人臉特征。

4.人臉識(shí)別: 將人臉與準(zhǔn)備好的數(shù)據(jù)庫(kù)中的一張或多張已知人臉進(jìn)行匹配。

在傳統(tǒng)的人臉識(shí)別方法中,我們有單獨(dú)的模塊來(lái)執(zhí)行這 4 個(gè)步驟。在本文中,你將看到一個(gè)將這 4 個(gè)步驟組合在一個(gè)步驟中的庫(kù)。

構(gòu)建人臉識(shí)別系統(tǒng)的步驟

安裝庫(kù)

我們需要安裝 2 個(gè)庫(kù)來(lái)實(shí)現(xiàn)人臉識(shí)別。

dlib : dlib是一個(gè)現(xiàn)代 C++ 工具包,包含機(jī)器學(xué)習(xí)算法和工具,用于在 C++ 中創(chuàng)建復(fù)雜的軟件以解決實(shí)際問(wèn)題。

# installing dlib 
pip install dlib

臉部識(shí)別:將face_recognition庫(kù),創(chuàng)建和維護(hù) Adam Geitgey,包含了dlib人臉識(shí)別功能。

# installing face recognition
pip install face recognition

Opencv 用于一些圖像預(yù)處理。

# installing opencv 
pip install opencv

導(dǎo)入庫(kù)

現(xiàn)在你已經(jīng)下載了所有重要的庫(kù),讓我們導(dǎo)入它們來(lái)構(gòu)建系統(tǒng)。

import cv2
import numpy as np
import face_recognition

加載圖像

導(dǎo)入庫(kù)后,你需要加載圖像。

face_recognition 庫(kù)以 BGR 的形式加載圖像,為了打印圖像,你應(yīng)該使用 OpenCV 將其轉(zhuǎn)換為 RGB。

imgelon_bgr = face_recognition.load_image_file('elon.jpg')
imgelon_rgb = cv2.cvtColor(imgelon_bgr,cv2.COLOR_BGR2RGB)
cv2.imshow('bgr', imgelon_bgr)
cv2.imshow('rgb', imgelon_rgb)
cv2.waitKey(0)

如你所見(jiàn),RGB 看起來(lái)很自然,因此你將始終把通道更改為 RGB。

查找人臉位置并繪制邊界框

你需要在人臉周?chē)L制一個(gè)邊界框,以顯示是否已檢測(cè)到人臉。

imgelon =face_recognition.load_image_file('elon.jpg')
imgelon = cv2.cvtColor(imgelon,cv2.COLOR_BGR2RGB)
#----------Finding face Location for drawing bounding boxes-------
face = face_recognition.face_locations(imgelon_rgb)[0]
copy = imgelon.copy()
#-------------------Drawing the Rectangle-------------------------
cv2.rectangle(copy, (face[3], face[0]),(face[1], face[2]), (255,0,255), 2)
cv2.imshow('copy', copy)
cv2.imshow('elon',imgelon)
cv2.waitKey(0)

為人臉識(shí)別訓(xùn)練圖像

該庫(kù)的制作方式是自動(dòng)查找人臉并僅處理人臉,因此你無(wú)需從圖片中裁剪人臉。

訓(xùn)練:

在這個(gè)階段,我們將訓(xùn)練圖像轉(zhuǎn)換為一些編碼,并使用該圖像的人名存儲(chǔ)編碼。

train_elon_encodings = face_recognition.face_encodings(imgelon)[0]

測(cè)試:

為了測(cè)試,我們加載圖像并將其轉(zhuǎn)換為編碼,然后在訓(xùn)練期間將編碼與存儲(chǔ)的編碼進(jìn)行匹配,這種匹配基于尋找最大相似度。當(dāng)你找到與測(cè)試圖像匹配的編碼時(shí),你將獲得與訓(xùn)練編碼相關(guān)聯(lián)的名稱(chēng)。

# lets test an image
test = face_recognition.load_image_file('elon_2.jpg')
test = cv2.cvtColor(test, cv2.COLOR_BGR2RGB)
test_encode = face_recognition.face_encodings(test)[0]
print(face_recognition.compare_faces([train_encode],test_encode))

face_recognition.compare_faces,如果兩個(gè)圖像中的人相同,返回True,否則返回False。

構(gòu)建人臉識(shí)別系統(tǒng)

導(dǎo)入必要的庫(kù)

import cv2
import face_recognition
import os
import numpy as np
from datetime import datetime
import pickle

定義將存儲(chǔ)訓(xùn)練圖像數(shù)據(jù)集的文件夾路徑

path = 'student_images'

注意:對(duì)于訓(xùn)練,我們只需要將訓(xùn)練圖片放到path目錄下,圖片名稱(chēng)必須是person_name.jpg/jpeg格式。

例如:

正如你在我的 student_images 路徑中看到的,有 6 個(gè)人。因此我們的模型只能識(shí)別這 6 個(gè)人。你可以在此目錄中添加更多圖片,以便更多人識(shí)別

現(xiàn)在創(chuàng)建一個(gè)列表來(lái)存儲(chǔ) person_name 和圖像數(shù)組。

遍歷path目錄中存在的所有圖像文件,讀取圖像,并將圖像數(shù)組附加到圖像列表,并將文件名附加到classNames。

images = []
classNames = []mylist = os.listdir(path)
for cl in mylist:
    curImg = cv2.imread(f'{path}/{cl}')
    images.append(curImg)
    classNames.append(os.path.splitext(cl)[0])

創(chuàng)建一個(gè)函數(shù)來(lái)對(duì)所有訓(xùn)練圖像進(jìn)行編碼并將它們存儲(chǔ)在一個(gè)變量encoding_face_train 中。

def findEncodings(images):
    encodeList = []
    for img in images:
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        encoded_face = face_recognition.face_encodings(img)[0]
        encodeList.append(encoded_face)
    return encodeList
encoded_face_train = findEncodings(images)

創(chuàng)建一個(gè)函數(shù),該函數(shù)將創(chuàng)建一個(gè)Attendance.csv文件來(lái)存儲(chǔ)考勤時(shí)間。

注意:這里需要手動(dòng)創(chuàng)建Attendance.csv文件并在函數(shù)中給出路徑

def markAttendance(name):
    with open('Attendance.csv','r+') as f:
        myDataList = f.readlines()
        nameList = []
        for line in myDataList:
            entry = line.split(',')
            nameList.append(entry[0])
        if name not in nameList:
            now = datetime.now()
            time = now.strftime('%I:%M:%S:%p')
            date = now.strftime('%d-%B-%Y')
            f.writelines(f'n{name}, {time}, {date}')

我們首先檢查出席者的名字是否已經(jīng)在attenting .csv中可用。

如果出席者的名字在attends.csv中不可用,我們將在函數(shù)調(diào)用的時(shí)間中寫(xiě)入出席者的名字。

閱讀網(wǎng)絡(luò)攝像頭進(jìn)行實(shí)時(shí)識(shí)別

# take pictures from webcam 
cap  = cv2.VideoCapture(0)while True:
    success, img = cap.read()
    imgS = cv2.resize(img, (0,0), None, 0.25,0.25)
    imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
    faces_in_frame = face_recognition.face_locations(imgS)
    encoded_faces = face_recognition.face_encodings(imgS, faces_in_frame)for encode_face, faceloc in zip(encoded_faces,faces_in_frame):
        matches = face_recognition.compare_faces(encoded_face_train, encode_face)
        faceDist = face_recognition.face_distance(encoded_face_train, encode_face)
        matchIndex = np.argmin(faceDist)
        print(matchIndex)
        if matches[matchIndex]:
            name = classNames[matchIndex].upper().lower()
            y1,x2,y2,x1 = faceloc
            # since we scaled down by 4 times
            y1, x2,y2,x1 = y1*4,x2*4,y2*4,x1*4
            cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)
            cv2.rectangle(img, (x1,y2-35),(x2,y2), (0,255,0), cv2.FILLED)
            cv2.putText(img,name, (x1+6,y2-5), cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),2)
            markAttendance(name)
    cv2.imshow('webcam', img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

僅將識(shí)別部分的圖像大小調(diào)整為 1/4。輸出幀將是原始大小。

調(diào)整大小可提高每秒幀數(shù)。

face_recognition.face_locations()在調(diào)整大小的圖像(imgS)上被調(diào)用。對(duì)于人臉邊界框坐標(biāo)必須乘以 4 才能覆蓋在輸出幀上。

**face_recognition.distance()**返回測(cè)試圖像的距離數(shù)組,其中包含我們訓(xùn)練目錄中存在的所有圖像。

最小人臉距離的索引將是匹配的人臉。

找到匹配的名稱(chēng)后,我們調(diào)用markAttendance函數(shù)。

使用**cv2.rectangle()**繪制邊界框。

我們使用**cv2.putText()**將匹配的名稱(chēng)放在輸出幀上。

考勤報(bào)告

人臉識(shí)別系統(tǒng)面臨的挑戰(zhàn)

盡管構(gòu)建面部識(shí)別看起來(lái)很容易,但在沒(méi)有任何限制的情況下拍攝的現(xiàn)實(shí)世界圖像中卻并不容易。面部識(shí)別系統(tǒng)面臨的幾個(gè)挑戰(zhàn)如下:

**照明:**它極大地改變了面部外觀,觀察到照明條件的輕微變化對(duì)其結(jié)果產(chǎn)生重大影響。

**姿勢(shì):**面部識(shí)別系統(tǒng)對(duì)姿勢(shì)高度敏感,如果數(shù)據(jù)庫(kù)僅在正面視圖上進(jìn)行訓(xùn)練,可能會(huì)導(dǎo)致識(shí)別錯(cuò)誤或無(wú)法識(shí)別。

面部表情:同一個(gè)人的不同表情是另一個(gè)需要考慮的重要因素。不過(guò),現(xiàn)代識(shí)別器可以輕松處理它。

低分辨率:識(shí)別器的訓(xùn)練必須在分辨率好的圖片上進(jìn)行,否則模型將無(wú)法提取特征。

**老化:**隨著年齡的增長(zhǎng),人臉的形狀、線(xiàn)條、紋理變化是另一個(gè)挑戰(zhàn)。

結(jié)論

在本文中,我們討論了如何使用face_recognition庫(kù)創(chuàng)建人臉識(shí)別系統(tǒng)并制作了考勤系統(tǒng)。你可以使用Tkinter或Pyqt進(jìn)一步設(shè)計(jì)用于人臉識(shí)別考勤系統(tǒng)的GUI。

以上就是基于Python搭建人臉識(shí)別考勤系統(tǒng)的詳細(xì)內(nèi)容,更多關(guān)于Python人臉識(shí)別考勤系統(tǒng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python?中10進(jìn)制數(shù)與16進(jìn)制數(shù)相互轉(zhuǎn)換問(wèn)題

    Python?中10進(jìn)制數(shù)與16進(jìn)制數(shù)相互轉(zhuǎn)換問(wèn)題

    這篇文章主要介紹了Python中10進(jìn)制數(shù)與16進(jìn)制數(shù)相互轉(zhuǎn)換,在Python中,我們可以使用內(nèi)置的hex()函數(shù)將10進(jìn)制數(shù)轉(zhuǎn)換為16進(jìn)制數(shù),需要的朋友可以參考下
    2023-05-05
  • pyqt實(shí)現(xiàn).ui文件批量轉(zhuǎn)換為對(duì)應(yīng).py文件腳本

    pyqt實(shí)現(xiàn).ui文件批量轉(zhuǎn)換為對(duì)應(yīng).py文件腳本

    今天小編就為大家分享一篇pyqt實(shí)現(xiàn).ui文件批量轉(zhuǎn)換為對(duì)應(yīng).py文件腳本,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Python中splitlines()方法的使用簡(jiǎn)介

    Python中splitlines()方法的使用簡(jiǎn)介

    這篇文章主要介紹了Python中splitlines()方法的使用簡(jiǎn)介,是Python入門(mén)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • 基于django傳遞數(shù)據(jù)到后端的例子

    基于django傳遞數(shù)據(jù)到后端的例子

    今天小編就為大家分享一篇基于django傳遞數(shù)據(jù)到后端的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 詳解如何利用Python拍攝延時(shí)攝影

    詳解如何利用Python拍攝延時(shí)攝影

    隨著游戲引擎技術(shù)的快速發(fā)展,游戲畫(huà)面越來(lái)越精美,很多玩家希望拍攝這些精美游戲中的畫(huà)面。本文將講解如何利用Python實(shí)現(xiàn)延時(shí)攝影的拍攝,需要的可以參考一下
    2022-03-03
  • 詳解Python中文件路徑

    詳解Python中文件路徑

    絕對(duì)路徑就是文件的真正存在的路徑,是指從硬盤(pán)的根目錄(盤(pán)符)開(kāi)始,進(jìn)行一級(jí)級(jí)目錄指向文件,這篇文章主要介紹了Python中文件路徑,需要的朋友可以參考下
    2023-02-02
  • Python3多線(xiàn)程爬蟲(chóng)實(shí)例講解代碼

    Python3多線(xiàn)程爬蟲(chóng)實(shí)例講解代碼

    本篇文章主要介紹了Python3多線(xiàn)程爬蟲(chóng)實(shí)例講解代碼,Python3使用threading模塊來(lái)進(jìn)行多線(xiàn)程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • django項(xiàng)目運(yùn)行因中文而亂碼報(bào)錯(cuò)的幾種情況解決

    django項(xiàng)目運(yùn)行因中文而亂碼報(bào)錯(cuò)的幾種情況解決

    django是一個(gè)不錯(cuò)的WEB開(kāi)源框架。今天測(cè)試,發(fā)現(xiàn)有些頁(yè)面中文亂碼,后來(lái)發(fā)現(xiàn)出現(xiàn)中文亂碼還不止一種情況,所以這篇文章主要給大家介紹了關(guān)于django項(xiàng)目運(yùn)行過(guò)程中因?yàn)橹形亩鴮?dǎo)致亂碼報(bào)錯(cuò)的幾種情況的解決方法,需要的朋友可以參考下。
    2017-11-11
  • Python命令啟動(dòng)Web服務(wù)器實(shí)例詳解

    Python命令啟動(dòng)Web服務(wù)器實(shí)例詳解

    這篇文章主要介紹了Python命令啟動(dòng)Web服務(wù)器實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Matplotlib繪制混淆矩陣的實(shí)現(xiàn)

    Matplotlib繪制混淆矩陣的實(shí)現(xiàn)

    對(duì)于機(jī)器學(xué)習(xí)多分類(lèi)模型來(lái)說(shuō),其評(píng)價(jià)指標(biāo)除了精度之外,常用的還有混淆矩陣和分類(lèi)報(bào)告,下面來(lái)展示一下如何繪制混淆矩陣,這在論文中經(jīng)常會(huì)用到。感興趣的可以了解一下
    2021-05-05

最新評(píng)論