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

歡迎訪問 生活随笔!

生活随笔

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

pytorch

人脸识别-入门学习

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

基于opencv,face_recognition和dlib的人臉識別的入門學習

近期課程學習了一些入門級別的人臉識別技術實現,所以借此機會整理整理

何為人臉識別

1.人臉識別,是基于人的臉部特征信息進行身份識別的一種生物識別技術。用攝像機或攝像頭采集含有人臉的圖像或視頻流,并自動在圖像中檢測和跟蹤人臉,進而對檢測到的人臉進行臉部識別的一系列相關技術,通常也叫做人像識別、面部識別。

2.人臉識別系統根據輸入的圖片,識別出人物信息,應用到不同的任務場景中。具體,這個復雜的人臉識別系統負責哪些工作呢?

opencv

通過命令pip3 install opencv-python快速安裝

然后由于我使用的是macos
在macos系統中,需要將haarcascade_frontalface_default.xml的路徑找到并寫入代碼中。

一般路徑:"/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml"

demo

import cv2def detect(filename):face_cascade = cv2.CascadeClassifier('/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml')#加載haar數據img=cv2.imread(filename)#加載圖片,讀進來直接是BGR格式gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#cv2.cvtColor(p1,p2) 是顏色空間轉換函數,p1是需要轉換的圖片,p2是轉換成何種格式。#cv2.COLOR_BGR2GRAY 將BGR格式轉換成灰度圖faces = face_cascade.detectMultiScale(gray, 1.3, 5)# 識別圖像中的人臉,返回所有人臉的矩形框向量組# scaleFactor=1.3 為了檢測到不同大小的目標,通過scalefactor參數把圖像長寬同時按照一定比例1.3逐步縮小,# 然后檢測,這個參數設置的越大,計算速度越快,但可能會錯過了某個大小的人臉。# minNeighbors=5 構成檢測目標的相鄰矩形的最小個數,此處設置為5for(x,y,w,h) in faces:img=cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)#在圖像中畫上矩形框cv2.imshow('Person Detected!',img)cv2.waitKey(0)cv2.destroyAllWindows()#顯示結果if __name__ == '__main__':detect('1.jpeg')

識別結果

可以看到,雖然有一些人臉能夠被正確識別到,但還是有一些人臉(例如側臉)不能夠識別,甚至有一些錯誤的識別。這就要求我們使用更高級的算法來識別人臉

face_recognition

GitHub項目:face_recognition

  • 該項目目前star數超過3萬,是GitHub上最主流的人臉識別工具包之一。
  • Face_recognition主要參考了OpenFace項目以及谷歌的facenet。
  • 世界上最簡潔的人臉識別庫,可以使用Python和命令行工具提取、識別、操作人臉。
  • 本項目的人臉識別是基于業內領先的C++開源庫dlib中的深度學習模型,用Labeled Faces in the Wild人臉數據集進行測試,有高達99.38%的準確率。但對小孩和亞洲人臉的識別準確率尚待提升。

安裝dlib和face_recognition

在安裝dlib時,可能會因為沒有安裝依賴包而出現錯誤,所以在安裝dlib之前,我們先用brew安裝openblas和cmake

  • brew install openblas
  • brew install cmake
  • pip install dlib
  • pip install face_recognition
  • demo

    import face_recognition import cv2def detect(filename):image=face_recognition.load_image_file(filename)#加載圖片到imageface_locations_noCNN=face_recognition.face_locations(image)#Returns an array of bounding boxes of human faces in a image#A list of tuples of found face locations in css (top, right, bottom, left) order#因為返回值的順序是這樣子的,因此在后面的for循環里面賦值要注意按這個順序來print("face_location_noCNN:")print(face_locations_noCNN)face_num2=len(face_locations_noCNN)print("I found {} face(s) in this photograph.".format(face_num2))# 到這里為止,可以觀察兩種情況的坐標和人臉數,一般來說,坐標會不一樣,但是檢測出來的人臉數應該是一樣的# 也就是說face_num1 = face_num2; face_locations_useCNN 和 face_locations_noCNN 不一樣org=cv2.imread(filename)img=cv2.imread(filename)#cv2.imshow(filename,img) #顯示原始圖片for i in range(0,face_num2):top=face_locations_noCNN[i][0]right=face_locations_noCNN[i][1]bottom=face_locations_noCNN[i][2]left=face_locations_noCNN[i][3]start=(left,top)end=(right,bottom)color=(0,255,255)thickness=2cv2.rectangle(org,start,end,color,thickness)#cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → None#img:圖片 pt1&pt2:矩形的左上角和右下角 color:矩形邊框的顏色(rgb) thickness:參數表示矩形邊框的厚度cv2.imshow("no cnn",org)cv2.waitKey(0)cv2.destroyAllWindows()# # use CNN # face_locations_useCNN = face_recognition.face_locations(image,model='cnn') # model – Which face detection model to use. “hog” is less accurate but faster on CPUs. # “cnn” is a more accurate deep-learning model which is GPU/CUDA accelerated (if available). The default is “hog”.# print("face_location_useCNN:") # print(face_locations_useCNN) # face_num1=len(face_locations_useCNN) # print(face_num1) # The number of faces# for i in range(0,face_num1): # top = face_locations_useCNN[i][0] # right = face_locations_useCNN[i][1] # bottom = face_locations_useCNN[i][2] # left = face_locations_useCNN[i][3] # # start = (left, top) # end = (right, bottom) # # color = (0,255,255) # thickness = 2 # cv2.rectangle(img, start, end, color, thickness) # opencv 里面畫矩形的函數# # Show the result # cv2.imshow("useCNN",img)if __name__ =='__main__':detect('1.png')

    識別結果

    可以看到,相比較第一次識別的結果,這一次的準確度提高了,但是在這次識別中,側臉依舊無法識別,所以我們要找到人臉特征點。

    人臉特征點

    Dlib有專門的函數和模型,能夠實現人臉68個特征點的定位。
    找到特征點后,就可以通過圖像的幾何變換(仿射、旋轉、縮放),使各個特征點對齊(將眼睛、嘴等部位移到相同位置)。

    下載和安裝

    需要下載包:shape_predictor_68_face_landmarks.dat
    并添加到路徑"/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages"中(Mac用戶)

    demo

    import cv2 import dlibdef detect(filename):img=cv2.imread(filename)gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#人臉分類器detector=dlib.get_frontal_face_detector()#獲取人臉檢測器predictor=dlib.shape_predictor(r"/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/shape_predictor_68_face_landmarks.dat")#dets保存的是圖像中人臉的矩形框,可以有多個dets=detector(gray,1)for face in dets:shape=predictor(img,face)# 尋找人臉的68個標定點# 遍歷所有點,打印出其坐標,并圈出來for pt in shape.parts():pt_pos=(pt.x,pt.y)cv2.circle(img,pt_pos,2,(0,255,0),1)cv2.imshow("image",img)cv2.waitKey(0)cv2.destroyAllWindows()if __name__=='__main__':detect('1.png')


    雖然這次依舊沒有能夠把側臉識別出,這說明了我們的算法依然待提升,但是成功將幾個人臉的特征點提取出來了,這也為我們之后對人臉進行對齊等操作提供了數據。

    總結

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

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