国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        Python搭建人臉識別考勤系統

        2021-12-24 11:16
        磐創AI
        關注

        介紹

        在本文中,你將學習如何使用 Python 構建人臉識別系統。人臉識別比人臉檢測更進一步。在人臉檢測中,我們只檢測人臉在圖像中的位置,但在人臉識別中,我們制作了一個可以識別人的系統。

        “人臉識別是驗證或識別圖片或視頻中的人的挑戰。大型科技巨頭仍在努力打造更快、更準確的人臉識別模型。”

        人臉識別的實際應用

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

        有幾個用例:

        · 尋找失蹤人員

        · 零售犯罪

        · 安全標識

        · 識別社交媒體上的帳戶

        · 考勤系統

        · 識別汽車中的駕駛員

        根據性能和復雜性,有多種方法可以執行面部識別。

        傳統人臉識別算法

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

        每種方法都遵循不同的方法來提取圖像信息并將其與輸入圖像進行匹配。Fischer-faces和Eigenfaces與 SURF 和 SIFT 具有幾乎相似的方法。LBPH 是一種簡單但非常有效的方法,但與現代人臉識別器相比,速度較慢。與現代人臉識別算法相比,這些算法并不快。傳統算法不能僅通過拍攝一個人的單張照片來訓練。

        人臉識別深度學習:

        一些廣泛使用的基于深度學習的人臉識別系統如下:DeepFaceDeepID series of systemsVGGFaceFaceNet人臉識別器一般是在人臉圖像中找出重要的點,如嘴角、眉毛、眼睛、鼻子、嘴唇等。這些點的坐標稱為五官點,這樣的點有66個。這樣,尋找特征點的不同技術給出不同的結果。

        人臉識別模型涉及的步驟:

        1.**人臉檢測:**定位人臉并在人臉周圍繪制邊界框并保留邊界框的坐標。

        2.**人臉對齊:**標準化人臉以與訓練數據庫一致。

        3.**特征提取:**提取將用于訓練和識別任務的人臉特征。

        4.人臉識別: 將人臉與準備好的數據庫中的一張或多張已知人臉進行匹配。在傳統的人臉識別方法中,我們有單獨的模塊來執行這 4 個步驟。在本文中,你將看到一個將這 4 個步驟組合在一個步驟中的庫。

        構建人臉識別系統的步驟

        安裝庫

        我們需要安裝 2 個庫來實現人臉識別。

        dlib : dlib是一個現代 C++ 工具包,包含機器學習算法和工具,用于在 C++ 中創建復雜的軟件以解決實際問題。

        # installing dlib

        pip install dlib

        臉部識別:將face_recognition庫,創建和維護 Adam Geitgey(https://adamgeitgey.com/),包含了dlib人臉識別功能。

        # installing face recognition

        pip install face recognition

        Opencv 用于一些圖像預處理。

        # installing opencv

        pip install opencv

        注意:如果你在安裝dlib 時遇到任何錯誤 **,**我建議你使用vs_code 社區版安裝 C++ 開發工具包

        導入庫

        現在你已經下載了所有重要的庫,讓我們導入它們來構建系統。

        import cv2

        import numpy as np

        import face_recognition

        加載圖像

        導入庫后,你需要加載圖像。

        face_recognition 庫以 BGR 的形式加載圖像,為了打印圖像,你應該使用 OpenCV 將其轉換為 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)

        如你所見,RGB 看起來很自然,因此你將始終把通道更改為 RGB。

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

        你需要在人臉周圍繪制一個邊界框,以顯示是否已檢測到人臉。

        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)

        為人臉識別訓練圖像

        該庫的制作方式是自動查找人臉并僅處理人臉,因此你無需從圖片中裁剪人臉。

        訓練:

        在這個階段,我們將訓練圖像轉換為一些編碼,并使用該圖像的人名存儲編碼。

        train_elon_encodings = face_recognition.face_encodings(imgelon)[0]

        測試:

        為了測試,我們加載圖像并將其轉換為編碼,然后在訓練期間將編碼與存儲的編碼進行匹配,這種匹配基于尋找最大相似度。當你找到與測試圖像匹配的編碼時,你將獲得與訓練編碼相關聯的名稱。

        # 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,如果兩個圖像中的人相同,返回True,否則返回False。

        構建人臉識別系統

        導入必要的庫

        import cv2

        import face_recognition

        import os

        import numpy as np

        from datetime import datetime

        import pickle

        定義將存儲訓練圖像數據集的文件夾路徑

        path = 'student_images'

        注意:對于訓練,我們只需要將訓練圖片放到path目錄下,圖片名稱必須是person_name.jpg/jpeg格式。

        例如:

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

        現在創建一個列表來存儲 person_name 和圖像數組。

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

        image.png

        創建一個函數來對所有訓練圖像進行編碼并將它們存儲在一個變量encoding_face_train 中。

        image.png

        創建一個函數,該函數將創建一個Attendance.csv文件來存儲考勤時間。

        注意:這里需要手動創建Attendance.csv文件并在函數中給出路徑

        image.png

        **with open(“filename.csv”,'r+')創建一個文件,'r+'**模式用于打開文件進行讀寫。

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

        如果出席者的名字在attends.csv中不可用,我們將在函數調用的時間中寫入出席者的名字。

        閱讀網絡攝像頭進行實時識別

        # 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

        僅將識別部分的圖像大小調整為 1/4。

        輸出幀將是原始大小。調整大小可提高每秒幀數。

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

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

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

        找到匹配的名稱后,我們調用markAttendance函數。

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

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

        考勤報告

        人臉識別系統面臨的挑戰

        盡管構建面部識別看起來很容易,但在沒有任何限制的情況下拍攝的現實世界圖像中卻并不容易。面部識別系統面臨的幾個挑戰如下:

        **照明:**它極大地改變了面部外觀,觀察到照明條件的輕微變化對其結果產生重大影響。

        **姿勢:**面部識別系統對姿勢高度敏感,如果數據庫僅在正面視圖上進行訓練,可能會導致識別錯誤或無法識別。

        面部表情:同一個人的不同表情是另一個需要考慮的重要因素。不過,現代識別器可以輕松處理它。

        低分辨率:識別器的訓練必須在分辨率好的圖片上進行,否則模型將無法提取特征。

        **老化:**隨著年齡的增長,人臉的形狀、線條、紋理變化是另一個挑戰。

        結論

        在本文中,我們討論了如何使用face_recognition庫創建人臉識別系統并制作了考勤系統。你可以使用Tkinter或Pyqt進一步設計用于人臉識別考勤系統的GUI。

        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 成人视频AAA| 精品综合视频精品| 肃北| 日日撸夜夜干| 3PAV乱伦视频| 亚洲欧美?va天堂人熟伦| 长寿区| 人人操网| 亚洲AV第二区国产精品| 国产精品久久久久久久白晢女i| 超碰精品在线| 阳山县| 91n在线观看| 成人无码AV片| 日韩AV一区二区三区| 国产人妖TS重口系列网站观看| 柠檬福利第一导航在线| 迅雷AV| 国产97在线?|?日韩| 蜜臂AV| 精品人妻潮喷久久久又裸又黄| 五大连池市| 兴文县| 伊春市| 日产精品久久久一区二区| 哈巴河县| 南昌市| 国产AV一区二区三区| 奇米成人| 国内老熟妇对白XXXXHD| 两个人xxx性爱视频| 国产成人做爰A片免费胖人| 亚洲国内自拍| 亚洲图片视频丝袜| 亚洲成年网| 亚洲女人天堂| 射阳县| jizz麻豆| 厦门市| 久久无码一区二区三区| 祁东县|