91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么實現人臉檢測

發布時間:2021-07-05 17:23:37 來源:億速云 閱讀:182 作者:Leah 欄目:編程語言

Python中怎么實現人臉檢測,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

首先需要安裝這些包,以Ubuntu為例:

$ sudo apt-get install build-essential cmake  $ sudo apt-get install libgtk-3-dev  $ sudo apt-get install libboost-all-dev

我們的程序中還用到numpy,opencv,所以也需要安裝這些庫:

$ pip install numpy  $ pip install scipy  $ pip install opencv-python  $ pip install dlib

人臉檢測基于事先訓練好的模型數據,從這里可以下到模型數據

http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

下載到本地路徑后解壓,記下解壓后的文件路徑,程序中會用到。

dlib的人臉特征點

上面下載的模型數據是用來估計人臉上68個特征點(x, y)的坐標位置,這68個坐標點的位置如下圖所示:

Python中怎么實現人臉檢測

我們的程序將包含兩個步驟:

***步,在照片中檢測人臉的區域

第二部,在檢測到的人臉區域中,進一步檢測器官(眼睛、鼻子、嘴巴、下巴、眉毛)

人臉檢測代碼

我們先來定義幾個工具函數:

def rect_to_bb(rect):      x = rect.left()      y = rect.top()      w = rect.right() - x       h = rect.bottom() - y          return (x, y, w, h)

這個函數里的rect是dlib臉部區域檢測的輸出。這里將rect轉換成一個序列,序列的內容是矩形區域的邊界信息。

def shape_to_np(shape, dtype="int"):      coords = np.zeros((68, 2), dtype=dtype)          for i in range(0, 68):              coords[i] = (shape.part(i).x, shape.part(i).y)         return coords

這個函數里的shape是dlib臉部特征檢測的輸出,一個shape里包含了前面說到的臉部特征的68個點。這個函數將shape轉換成Numpy array,為方便后續處理。

def  resize(image, width=1200):      r = width * 1.0 / image.shape[1]      dim = (width, int(image.shape[0] * r))       resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)          return resized

這個函數里的image就是我們要檢測的圖片。在人臉檢測程序的***,我們會顯示檢測的結果圖片來驗證,這里做resize是為了避免圖片過大,超出屏幕范圍。

接下來,開始我們的主程序部分

import sys import numpy as np  import dlib import cv2   if len(sys.argv) < 2:          print "Usage: %s <image file>" % sys.argv[0]      sys.exit(1)  image_file = sys.argv[1]  detector = dlib.get_frontal_face_detector()  predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

我們從sys.argv[1]參數中讀取要檢測人臉的圖片,接下來初始化人臉區域檢測的detector和人臉特征檢測的predictor。shape_predictor中的參數就是我們之前解壓后的文件的路徑。

image = cv2.imread(image_file)  image = resize(image, width=1200)  gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  rects = detector(gray, 1)

在檢測特征區域前,我們先要檢測人臉區域。這段代碼調用opencv加載圖片,resize到合適的大小,轉成灰度圖,***用detector檢測臉部區域。因為一張照片可能包含多張臉,所以這里得到的是一個包含多張臉的信息的數組rects。

for (i, rect) in enumerate(rects):      shape = predictor(gray, rect)      shape = shape_to_np(shape)      (x, y, w, h) = rect_to_bb(rect)      cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)      cv2.putText(image, "Face #{}".format(i + 1), (x - 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)      for (x, y) in shape:              cv2.circle(image, (x, y), 2, (0, 0, 255), -1)   cv2.imshow("Output", image)  cv2.waitKey(0)

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

滨海县| 高陵县| 望江县| 华池县| 密云县| 顺昌县| 富川| 都匀市| 崇仁县| 太湖县| 岳普湖县| 垦利县| 陆良县| 车致| 大冶市| 景洪市| 彰化市| 鄯善县| 武清区| 武邑县| 龙胜| 西宁市| 皮山县| 平果县| 垦利县| 葫芦岛市| 扎兰屯市| 霍林郭勒市| 赫章县| 巴中市| 宁乡县| 阿拉善右旗| 龙井市| 永嘉县| 松桃| 扶绥县| 安远县| 张掖市| 金门县| 西畴县| 瓦房店市|