樹莓派上利用python+opencv+dlib實現嘴唇檢測的實現
樹莓派上利用python+opencv+dlib實現嘴唇檢測
項目的目標是在樹莓派上運行python代碼以實現嘴唇檢測,本來以為樹莓派的硬件是可以流暢運行實時檢測的,但是實驗的效果表明樹莓派實時檢測是不可行,後面還需要改進。
實驗的效果如下:
1、安裝相關庫文件
這裡需要用的庫有opencv,numpy,dlib。
1.1 安裝opencv
pip3 install opencv-python
1.2 安裝numpy
樹莓派中自帶瞭numpy庫
pip3 install numpy
1.3 安裝dlib
在樹莓派的系統裡面安裝dlib比較簡單,隻需要pip install
就可以瞭,但是在window系統中會有報錯,這個時候我們就需要安裝pip install dlib-19.17.99-cp37-cp37m-win_amd64.whl
就可以瞭, 需要註意的是: 不同的python版本要安裝對應版本的dlib,也就是後面的“cp37-cp37m”,查看對應python能安裝的版本號,可以使用命令行:pip debug --verbose
,可以顯示合適的安裝版本號。
在樹莓派上我安裝瞭cmake和dlib
pip3 install cmake pip3 install dlib
2、代碼部分
dlib提取人臉特征中包含68個點
顎點= 0–16
右眉點= 17–21
左眉點= 22–26
鼻點= 27–35
右眼點= 36–41
左眼點= 42–47
口角= 48–60
嘴唇分數= 61–67
from gpiozero import LED from time import sleep from subprocess import check_call import cv2 import numpy as np import dlib print(cv2.__version__) def search_cap_num(): for i in range(2000): cap = cv2.VideoCapture(i) cap_opened = cap.isOpened() if cap_opened == True: return i cap_num = search_cap_num() cap = cv2.VideoCapture(cap_num) detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") # 規定上嘴唇和下嘴唇連線的路徑 lip_order_dlib = np.array([[48, 49, 50, 51, 52, 53, 54, 64, 63, 62, 61, 60, 48], [48, 59, 58, 57, 56, 55, 54, 64, 65, 66, 67, 60, 48]]) - 48 lip_order_num = lip_order_dlib.shape[1] while 1: landmarks_lip = [] ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) rects = detector(gray, 1) print('faces number:' + str(len(rects))) for (i, rect) in enumerate(rects): # 標記人臉中的68個landmark點 landmarks = predictor(gray, rect) for n in range(48, 68): x = landmarks.part(n).x y = landmarks.part(n).y landmarks_lip.append((x, y)) # cv2.circle(img=img, center=(x, y), radius=3, color=(0, 255, 0), thickness=-1) for m in range(lip_order_num-1): cv2.line(frame, landmarks_lip[lip_order_dlib[0][m]], landmarks_lip[lip_order_dlib[0][m+1]], color=(0, 255, 0), thickness=2, lineType=8) for n in range(lip_order_num-1): cv2.line(frame, landmarks_lip[lip_order_dlib[1][n]], landmarks_lip[lip_order_dlib[1][n+1]], color=(0, 255, 0), thickness=2, lineType=8) cv2.imshow("face", frame) if cv2.waitKey(1) & 0xff == ord('q'): break cap.release() cv2.destroyAllWindows() # check_call(['sudo', 'poweroff'])
3、實驗效果
效果總體而言比較卡頓,感覺分析一張圖片花費時間在秒量級上。
要是僅僅是顯示攝像頭的圖片還是很快的,沒有任何卡頓,也就是說如果代碼中不存在rects = detector(gray, 1)
這種獲取人臉區域的檢測命令,那麼運行速度大大提高,後面需要思考怎麼在人臉檢測下提高代碼運行速度。
到此這篇關於樹莓派上利用python+opencv+dlib實現嘴唇檢測的實現的文章就介紹到這瞭,更多相關python+opencv+dlib嘴唇檢測內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 超詳細註釋之OpenCV dlib實現人臉采集
- 基於Python OpenCV和 dlib實現眨眼檢測
- 人臉檢測實戰終極之OpenCV+Python實現人臉對齊
- 基於Python實現人臉識別和焦點人物檢測功能
- 基於Opencv制作的美顏相機帶你領略美顏特效的效果