树莓派上如何利用python+opencv+dlib实现嘴唇检测

发布时间:2021-11-01 09:11:42 作者:小新
来源:亿速云 阅读:195

小编给大家分享一下树莓派上如何利用python+opencv+dlib实现嘴唇检测,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

树莓派上利用python+opencv+dlib实现嘴唇检测

项目的目标是在树莓派上运行python代码以实现嘴唇检测,本来以为树莓派的硬件是可以流畅运行实时检测的,但是实验的效果表明树莓派实时检测是不可行,后面还需要改进。

实验的效果如下:

树莓派上如何利用python+opencv+dlib实现嘴唇检测

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个点

树莓派上如何利用python+opencv+dlib实现嘴唇检测

颚点= 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、实验效果

树莓派上如何利用python+opencv+dlib实现嘴唇检测

效果总体而言比较卡顿,感觉分析一张图片花费时间在秒量级上。
要是仅仅是显示摄像头的图片还是很快的,没有任何卡顿,也就是说如果代码中不存在rects = detector(gray, 1)这种获取人脸区域的检测命令,那么运行速度大大提高,后面需要思考怎么在人脸检测下提高代码运行速度。

看完了这篇文章,相信你对“树莓派上如何利用python+opencv+dlib实现嘴唇检测”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. 怎么在树莓派上安装Ubuntu服务器
  2. 如何在树莓派上安装TT-RSS

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python opencv dlib

上一篇:如何解决安装Python后IDA中找不到Python模块的问题

下一篇:Go怎么使用sync.Map来解决map的并发操作问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》