日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

人脸识别-dlib

發布時間:2025/3/21 pytorch 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人脸识别-dlib 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文要做一個人臉比對功能,輸入兩張圖片,輸出是否同一人,用到了dlib模塊。
dlib是一個可以做人臉檢測和識別的第三方模塊,官方給出預訓練模型在亞洲人臉的識別率不是很理想,我們需要在自己的數據集上重新訓練,提高準確率。

  • 安裝使用dlib模塊
  • 安裝圖片標注工具imglab
  • 制作自己的數據集
  • 訓練人臉檢測模型
  • 人臉比對
  • 人臉檢測和比對源碼下載

  • 一、安裝dlib模塊

    環境:win10,pip

    1、下載“dlib-19.8.1-cp36-cp36m-win_amd64.whl”

    百度云鏈接鏈接:https://pan.baidu.com/s/1yTQ_404E_CbQUF4KDxTIYA
    提取碼:orgh

    2、打開命令行并進入到whl文件所在目錄

    運行pip install dlib-19.8.1-cp36-cp36m-win_amd64.whl

    3、引入dlib模塊

    找到dlib安裝路徑,找到dlib.pyd文件,直接復制到項目里,就可以正常引用和調用里面的方法

    二、安裝圖片標注工具imglab

    1、編譯imglab

    官方提供了imglab工具用于制作人臉識別的數據集,遺憾的是官方提供的是源碼,需要我們自己編譯 。這里提供一個編譯好的exe文件下載,能用可以直接跳到數據集制作部分。

    鏈接:https://pan.baidu.com/s/1jNArBPkW0S4ifgP_pHbmnA
    提取碼:w2re

    1)在github下載dlib的源碼,進入到imglab所在目錄,可以看到源碼,需要我們自己編譯。

    在imglab下新建build文件夾。

    2)安裝vs2019

    https://visualstudio.microsoft.com/zh-hans/vs/?visualstudio.microsoft.com

    ?

    3)安裝cmake

    安裝好后打開cmake-gui.exe

    Configure配置完成后,cmake顯示如下信息,此時點擊【Generate】按鈕,生成exe文件

    打開build文件夾,可以發現生成了imglab.exe文件

    三、制作自己的數據集

    1)新建文件夾images并添加圖片

    2)復制imglab.exe到images文件夾下

    3)打開命令行,進入到images文件夾下,輸入imglab -c mydataset.xml ./,按回車,在當前目錄生成mydataset.xml文件。

    4)命令行輸入imglab mydataset.xml,按回車,打開imglab程序窗口。

    5)如果想要訓練的模型檢測出來的人臉可以提取出人臉特征,供后面的人臉識別對接,那么標記圖片的時候需要按照特定方式來標記,標記方式有兩種,一種是68個特征點的標記方式,另一種是5個特征點的標記方式,特征標記順序如下圖:

    注意,特征點的順序必須如下圖所示,順序不能錯,不然可以正常訓練,但是訓練出來的模型提取不了特征向量。

    68個特征點位置

    5個特征點位置

    步驟:

  • 按住ctrl+加鼠標滾輪,調整圖片人臉是合適大小
  • 松開ctrl,按住shift鍵,框出人臉位置,剛畫出來的框是紅色
  • 松開shift,雙擊框的線條選中框,選中的框顏色變藍
  • 按住shift,按照標記點位置畫出人臉標記
  • 標記完成的圖片如下:

    四、訓練人臉檢測模型

    官方預訓練的模型對亞洲人臉的識別度不好,所以如果你有自己的數據集,可以訓練自己的模型來改善這個問題。
    人臉識別需要兩個模型,一個是人臉檢測模型,一個是人臉特征提取模型。官方的說法是:人臉特征提取模型是使用幾百萬張圖片訓練出來的,如果你有幾千張圖片,訓練的模型不會對準確率有太大提高,所以應該訓練人臉檢測模型,提高在特定數據集上的準確度。
  • 將images文件夾復制到項目里
  • 運行train_shape_predictor.py 文件,傳入參數./images。
  • 訓練完成,生成模型文件【predictor.dat】,進行測試,結果如下:
  • 五、人臉比對

    實現功能:輸入兩張圖片,判斷是否同一人。

    人臉比對使用了兩個預訓練的模型:

    • 人臉檢測:shape_predictor_68_face_landmarks.dat
    • 特征點提取:dlib_face_recognition_resnet_model_v1.dat

    其中的人臉檢測模型可以換成我們自己訓練的模型predictor.dat

    from skimage import io import numpy as np import dlibdef getVector(picPath):print("Processing file: {}".format(picPath))detector = dlib.get_frontal_face_detector()model1_path = 'shape_predictor_68_face_landmarks.dat'model2_path = 'dlib_face_recognition_resnet_model_v1.dat'sp = dlib.shape_predictor(model1_path)facerec = dlib.face_recognition_model_v1(model2_path)img = io.imread(picPath)dets = detector(img, 1)print("Number of faces detected: {}".format(len(dets)))for k, d in enumerate(dets):shape = sp(img, d)face_descriptor = facerec.compute_face_descriptor(img, shape)return np.array(face_descriptor,dtype=float)def comparePic(pic1,pic2):vector1 = getVector(pic1)vector2 = getVector(pic2)op1 = np.sqrt(np.sum(np.square(vector1 - vector2)))print("歐氏距離:{}".format(op1))return op1if __name__ == '__main__':score = comparePic('images/Aaron_Eckhart_0001.jpg','images/Aaron_Guiel_0001.jpg')if score < 0.6:print('同一人')else:print('不是一個人')

    六、人臉檢測和比對源碼下載

    鏈接:https://pan.baidu.com/s/1X0gBamWDz8cEjm_h1QwmKQ
    提取碼:y7uy

    ?

    編輯于 2020-03-13

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的人脸识别-dlib的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。