1. 程式人生 > 程式設計 >python 基於dlib庫的人臉檢測的實現

python 基於dlib庫的人臉檢測的實現

本週暫時比較清閒,可以保持每日一更的速度。

國外身份證專案新增需求,檢測出身份證正面的人臉。最開始考慮mobilenet-ssd,經同事提醒,有現成的人臉庫dlib,那就用傳統方法嘗試一下。

dlib安裝

dlib的安裝小費一波周折,我的python版本是3.6,直接pip install dlib安裝失敗。https://pypi.org/project/dlib/19.6.0/找到python3.6對應的whl檔案下載安裝或者直接pip install dlib==19.6.0 提示Successfully installed dlib-19.6.0安裝成功。事情沒那麼簡單,import dlib時報錯: ImportError: DLL load failed: 找不到指定的模組。

還是版本的問題,查詢最新版本的whl :https://pypi.org/simple/dlib/

下載dlib-19.8.1-cp36-cp36m-win_amd64.whl 然後cd到相應的目錄下pip install dlib-19.8.1-cp36-cp36m-win_amd64.whl

程式碼

import dlib
import cv2
import os
 
def resize(img,width=None,height=None,inter=cv2.INTER_AREA):
  """
  initialize the dimensions of the input image and obtain
  the image size
  """
 
  dim = None
  (h,w) = img.shape[:2]
 
  if width is None and height is None:
    return img
  if width is None:
    r = height / float(h)
    dim = (int(w * r),height)
  else:
    r = width / float(w)
    dim = (width,int(h * r))
  # resize the image
  resized = cv2.resize(img,dim,interpolation=inter)
  # return the resized image
  return resized
 
# 使用 Dlib 的正面人臉檢測器 frontal_face_detector
detector = dlib.get_frontal_face_detector()
 
# 圖片所在路徑
imgs_path = 'test/'
filelist = os.listdir(imgs_path)
# 使用 detector 檢測器來檢測影象中的人臉
for img_path in filelist:
  img = cv2.imread(imgs_path + img_path)
  img = resize(img,width=512)
  faces = detector(img,1)
  print("人臉數 / Faces in all: ",len(faces))
  for i,d in enumerate(faces):
    w = d.right() - d.left()
    h = d.bottom() - d.top()
    d_left = int(d.left() - w * 0.25)
    d_right = int(d.right() + w * 0.25)
    d_top = int(d.top() - w * 0.70)
    d_bottom = int(d.bottom() + w * 0.2)
    print("第",i + 1,"個人臉的矩形框座標:","left:",d_left,"right:",d_right,"top:",d_top,"bottom:",d_bottom)
    cv2.rectangle(img,tuple([d_left,d_top]),tuple([d_right,d_bottom]),(0,255,255),2)
  cv2.imshow("img",img)
  cv2.waitKey(0)
  cv2.imwrite('./result.jpg',img)

隨便網上找了張圖測試,效果如下

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。