opencv + dlib 人臉檢測實現作為一個測試用例 dlib 安裝出錯
阿新 • • 發佈:2020-12-10
首先dlib是一個很有名的庫了,有c++、Python的介面。使用dlib可以大大簡化開發,比如人臉識別,特徵點檢測之類的工作都可以很輕鬆實現。同時也有很多基於dlib開發的應用和開源庫
環境
opencv 儘量選擇3版本的
dlib 選擇 下載出錯的話
cmd
pip install dlib==19.6.1
我用的是 python3.6.5
不多說直接上程式碼
# -*- coding: utf-8 -*- import sys import dlib import cv2 detector = dlib.get_frontal_face_detector() #獲取人臉分類器 # 傳入的命令列引數 # for f in sys.argv[1:]: ...這種方式是通過讀取傳入的引數進新遍歷的以列表的形式 ... # 直接把入參改為一個列表方便除錯 x=['C:\\Users\\admin\\Desktop\\test.png','C:\\Users\\admin\\Desktop\\test.jpg'] for f in x: # opencv 讀取圖片,並顯示 # print("Processing file: {}".format(f)) # f='C:\\Users\\admin\\Desktop\\test.png' # cv2.IMREAD_COLOR:它指定載入彩色影象。影象的任何透明度都將被忽略。這是預設標誌。或者,我們可以為此標誌傳遞整數值1。 # cv2.IMREAD_GRAYSCALE:它指定以灰度模式載入影象。或者,我們可以為此標誌傳遞整數值0。 # cv2.IMREAD_UNCHANGED:它指定載入影象,包括alpha通道。另外,我們可以為此標誌傳遞整數值 - 1。 img = cv2.imread(f, cv2.IMREAD_COLOR)# 這裡有兩個引數第一個是圖片的檔案必選,第二個是標誌:它指定讀取影象的方式 # 摘自官方文件: # image is a numpy ndarray containing either an 8bit grayscale or RGB image. # opencv讀入的圖片預設是bgr格式,我們需要將其轉換為rgb格式;都是numpy的ndarray類。 b, g, r = cv2.split(img) # 分離三個顏色通道 img2 = cv2.merge([r, g, b]) # 融合三個顏色通道生成新圖片 dets = detector(img, 1) #使用detector進行人臉檢測 dets為返回的結果 print("Number of faces detected: {}".format(len(dets))) # 列印識別到的人臉個數 # enumerate是一個Python的內建方法,用於遍歷索引 # index是序號;face是dets中取出的dlib.rectangle類的物件,包含了人臉的區域等資訊 # left()、top()、right()、bottom()都是dlib.rectangle類的方法,對應矩形四條邊的位置 for index, face in enumerate(dets): print('face {}; left {}; top {}; right {}; bottom {}'.format(index, face.left(), face.top(), face.right(), face.bottom())) # 在圖片中標註人臉,並顯示 left = face.left() top = face.top() right = face.right() bottom = face.bottom() cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0), 3) cv2.namedWindow(f, cv2.WINDOW_AUTOSIZE) cv2.imshow(f, img) # 等待按鍵,隨後退出,銷燬視窗 k = cv2.waitKey(0) cv2.destroyAllWindows()
這是一個通過讀取圖片進行檢測的然後對人臉進行標記的demo