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

目录
  • 1、安装相关库文件
  • 2、代码部分
  • 3、实验效果

树莓派上利用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嘴唇检测内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python+Dlib+Opencv实现人脸采集并表情判别功能的代码

    一.dlib以及opencv-python库安装 介于我使用的是jupyter notebook,所以在安装dlib和opencv-python时是在 这个命令行安装的 dlib安装方法: 1.若可以,直接使用上图所示命令行输入以下命令: pip install cmake pip install boost pip install dlib 若安装了visual studio2019应该就可以直接pip install dlib,至少我是这样 由于很多在执行第三句时都会报错,所以这里提供第二种

  • python3.7+anaconda 安装opencv和dlib的问题及解决方法

    找了很久看了很久,然后发现其实很简单- 问题 发现anaconda环境里有opencv可以直接下载,但是等了很久都下载不下来. 然后按照网上别的方法直接在anaconda prompt里面pip也不行.opencv和dlib都不行. 解决方法 其实在网上下载一个版本合适的whl文件,然后直接pip install就可以了!很快很方便. 要找自己的python是什么版本的话,在anaconda prompt里输命令conda list就可以查看. 1.步骤: 下载whl文件 opencv可以在这里

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

    目录 1.安装相关库文件 2.代码部分 3.实验效果 树莓派上利用python+opencv+dlib实现嘴唇检测 项目的目标是在树莓派上运行python代码以实现嘴唇检测,本来以为树莓派的硬件是可以流畅运行实时检测的,但是实验的效果表明树莓派实时检测是不可行,后面还需要改进. 实验的效果如下: 1.安装相关库文件 这里需要用的库有opencv,numpy,dlib. 1.1 安装opencv pip3 install opencv-python 1.2 安装numpy 树莓派中自带了numpy

  • 利用python OpenCV去除视频水印

    上面的图片展示的是视频中的某一帧,需要将图片中的,实体拓展和退出全屏以及右上角的两个圆圈按钮给删除掉. 解决思路一个很简单的想法就是,从图片上其它两块背景相同的地方,拷贝两个块替换掉按钮位置的块 用下面的代码先从视频中导出一帧图片,然后统计需要删除按钮的坐标位置 实现代码如下: import cv2 # 创建读取视频的类 capture = cv2.VideoCapture("watermark.mp4") # 得到视频的高度 height = capture.get(cv2.CAP_

  • 利用Python+OpenCV三步去除水印

    一.推理原理 1.标定噪声的特征,使用cv2.inRange二值化标识噪声对图片进行二值化处理,具体代码:cv2.inRange(img, np.array([200, 200, 240]), np.array([255, 255, 255])),把[200, 200, 200]~[255, 255, 255]以外的颜色处理为0 2.使用OpenCV的dilate方法,扩展特征的区域,优化图片处理效果 3.使用inpaint方法,把噪声的mask作为参数,推理并修复图片 二.推理步骤 1.从源图

  • 利用python打开摄像头及颜色检测方法

    最近两周由于忙于个人项目,一直未发言了,实在是太荒凉了....,上周由于项目,见到Python的应用极为广泛,用起来也特别顺手,于是小编也开始着手学习Python,-下面我就汇报下今天的学习成果吧 小编运行环境unbuntu 14.0.4 首先我们先安装一下Python呗,我用的2.7,其实特别简单,一行指令就OK sudo apt-get install python-dev 一般安装系统的时候其实python已经自带了,这步基本可以不用做,OK,我们继续往下走吧,安装python-openc

  • python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)

    一.利用直方图的方式进行批量的图片缺陷检测(方法简单) 二.步骤(完整代码见最后) 2.1灰度转换(将原图和要检测对比的图分开灰度化) 灰度化的作用是因为后面的直方图比较需要以像素256为基准进行相关性比较 img = cv2.imread("0.bmp") #原图灰度转换 gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) #循环要检测的图,均灰度化 for i in range(1, 6): t1=cv2.cvtColor(cv2.imread

  • Python Opencv实现单目标检测的示例代码

    一 简介 目标检测即为在图像中找到自己感兴趣的部分,将其分割出来进行下一步操作,可避免背景的干扰.以下介绍几种基于opencv的单目标检测算法,算法总体思想先尽量将目标区域的像素值全置为1,背景区域全置为0,然后通过其它方法找到目标的外接矩形并分割,在此选择一张前景和背景相差较大的图片作为示例. 环境:python3.7 opencv4.4.0 二 背景前景分离 1 灰度+二值+形态学 轮廓特征和联通组件 根据图像前景和背景的差异进行二值化,例如有明显颜色差异的转换到HSV色彩空间进行分割. 1

  • python使用dlib进行人脸检测和关键点的示例

    #!/usr/bin/env python # -*- coding:utf-8-*- # file: {NAME}.py # @author: jory.d # @contact: dangxusheng163@163.com # @time: 2020/04/10 19:42 # @desc: 使用dlib进行人脸检测和人脸关键点 import cv2 import numpy as np import glob import dlib FACE_DETECT_PATH = '/home/b

  • Python Opencv实战之文字检测OCR

    目录 1.相关函数的讲解 2.代码展示 Detecting Words Detecting ONLY Digits 3.问题叙述 4.image_to_data()配置讲解 5.项目拓展 6.总结与评价 1.相关函数的讲解 image_to_data()的输出结果是表格形式,输出变量的类型依旧是字符串. 你会得到一个这样的列表['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', '

  • 利用Python制作简易的核酸检测日历

    目录 录入数据 制作日历 1.使用openpyxl创建表格 2.定义表格初始化和单元格设置的函数 3.实现日历 制作一年的日历 我的坐标是深圳,2022年以来,大部分时候要求24小时,少部分时候要求48小时,更少的时候要求72小时,没有更长的情况. 本文根据我的核酸检测记录,制作成日历,将核酸检测记录可视化到日历中. 录入数据 核酸检测记录能查到的最早时间范围是一个月,以前的检测记录没有提前保存,所以先用8月份的数据制作日历. 查询8月份的检测记录,录入到代码中. # coding=utf-8

  • python+opencv实现车道线检测

    python+opencv车道线检测(简易实现),供大家参考,具体内容如下 技术栈:python+opencv 实现思路: 1.canny边缘检测获取图中的边缘信息: 2.霍夫变换寻找图中直线: 3.绘制梯形感兴趣区域获得车前范围: 4.得到并绘制车道线: 效果展示: 代码实现: import cv2 import numpy as np def canny(): gray = cv2.cvtColor(lane_image, cv2.COLOR_RGB2GRAY) #高斯滤波 blur = c

随机推荐