树莓派上利用python+opencv+dlib实现嘴唇检测的实现
目录
- 1、安装相关库文件
- 2、代码部分
- 3、实验效果
项目的目标是在树莓派上运行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 cmakepip3 install dlib
2、代码部分 dlib提取人脸特征中包含68个点
文章图片
颚点= 0–16
右眉点= 17–21
左眉点= 22–26
鼻点= 27–35
右眼点= 36–41
左眼点= 42–47
口角= 48–60
嘴唇分数= 61–67
from gpiozero import LEDfrom time import sleepfrom subprocess import check_callimport cv2import numpy as npimport dlibprint(cv2.__version__)def search_cap_num():for i in range(2000):cap = cv2.VideoCapture(i)cap_opened = cap.isOpened()if cap_opened == True:return icap_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]]) - 48lip_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).xy = landmarks.part(n).ylandmarks_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'):breakcap.release()cv2.destroyAllWindows()# check_call(['sudo', 'poweroff'])
3、实验效果
效果总体而言比较卡顿,感觉分析一张图片花费时间在秒量级上。
要是仅仅是显示摄像头的图片还是很快的,没有任何卡顿,也就是说如果代码中不存在
rects = detector(gray, 1)
这种获取人脸区域的检测命令,那么运行速度大大提高,后面需要思考怎么在人脸检测下提高代码运行速度。【树莓派上利用python+opencv+dlib实现嘴唇检测的实现】到此这篇关于树莓派上利用python+opencv+dlib实现嘴唇检测的实现的文章就介绍到这了,更多相关python+opencv+dlib嘴唇检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 【万伽复利】什么是复利(如何利用复利赚钱?)
- 苹果手机如何利用库乐队自制铃声
- Python+树莓派制作IoT(物联网)门控设备
- 单片机|Arduino、arm、树莓派、单片机四者有什么不同()
- “没有利用价值的人是很受冷遇的。”
- 可悲的好人
- 利用好你的暗时间,让成长无处不在
- 如何利用漏斗模型增加转化率减少流失率()
- 2018-12-05|2018-12-05 打卡第二十二天 想要利用业余时间培养爱好就得先做好时间管理