1. 程式人生 > 其它 >opencv + dlib 人臉檢測實現作為一個測試用例 dlib 安裝出錯

opencv + dlib 人臉檢測實現作為一個測試用例 dlib 安裝出錯

技術標籤:Python影象識別

首先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