python 涉及opencv mediapipe知识,眨眼计数 供初学者参考

这篇具有很好参考价值的文章主要介绍了python 涉及opencv mediapipe知识,眨眼计数 供初学者参考。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基本思路  我们知道正面侦测到人脸时,任意一只眼睛水平方向上的两个特征点构成水平距离,上下两个特征点构成垂直距离 当头像靠近或者远离摄像头时,垂直距离与水平距离的比值基本恒定 

根据这一思路 当闭眼时 垂直距离变小 比值固定小于某一个值 当睁眼时 比值大于某个比率,比如35%,我们将比值扩大一百倍 (35% X 100) 这样我们认为大于35时是睁眼 小于为闭眼,根据程序侦测画面帧数 我们认为某一段连续的帧画面就是同一个事件 所以我们只处理其中一帧画面。基本背景知识需要用到mediapipe中人脸模型 下面给出右眼特征点编号

mediapipe ver,python,opencv,计算机视觉

完整代码:

import cv2
import cvzone
from cvzone.FaceMeshModule import FaceMeshDetector
from cvzone.PlotModule import  LivePlot
from PIL import Image, ImageDraw, ImageFont
import numpy as np

def putText2(img,text,pos,size=36,color=(255,0,0)):

    img_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    font = ImageFont.truetype(font=r'simsun.ttc', size=size)
    draw = ImageDraw.Draw(img_pil)
    draw.text(pos, text, font=font, fill=color)  # PIL中RGB=(255,0,0)表示红色
    img_cv = np.array(img_pil)                         # PIL图片转换为numpy
    img = cv2.cvtColor(img_cv, cv2.COLOR_RGB2BGR)      # PIL格式转换为OpenCV的BGR格式
    return img

cap=cv2.VideoCapture("out.mp4")
detector=FaceMeshDetector(maxFaces=1)
#绘制Y坐标为20到50之间的实时波形图,宽度 高度 范围
plotY=LivePlot(480,640,[20,50],invert=True)
idEyeList=[22,23,24,26,110,157,158,159,160,161,162,130]

ratioList=[]
blinkCouter=0
counter=0
color=(255,0,255)
while True:
    if cap.get(cv2.CAP_PROP_POS_FRAMES)==cap.get(cv2.CAP_PROP_FRAME_COUNT):
        cap.set(cv2.CAP_PROP_POS_FRAMES,0)

    success,img=cap.read()
    # print(img.shape)

    img, faces = detector.findFaceMesh(img,draw=False)
    if faces:
        face=faces[0]
        for id in idEyeList:
            cv2.circle(img,face[id],5,(255,0,255),cv2.FILLED)
            cv2.line(img,face[159],face[23],(0,255,0),1)
            cv2.line(img, face[130], face[243], (0, 255, 0), 1)
        leftUp=face[159]
        leftDown=face[23]

        leftLeft=face[130]
        leftRight=face[243]
        #垂直距离与水平距离
        lengthVer,_=detector.findDistance(leftUp,leftDown)
        lengthHor, _ = detector.findDistance(leftLeft,leftRight)
        # print("比率",lengthVer/lengthHor)

        #获取随时变化的值
        ratio=int((lengthVer/lengthHor)*100)

        #让波形看起来平滑
        ratioList.append(ratio)
        if len(ratioList)>10:
            ratioList.pop(0)

        ratioAvg=sum(ratioList)/len(ratioList)
        # imgPlot=plotY.update(ratio)

        if ratioAvg<40 and counter==0:
            blinkCouter += 1
            color=(0,255,0)
            counter=1
        if counter !=0:
            counter +=1
            #保持20毫秒内不重复计数
            if counter>20:
                color=(255,0,255)
                counter=0

        # cvzone.putTextRect(img,f'blink count:{blinkCouter}',(50,50),colorR=(0,255,0))
        cv2.rectangle(img,(50,50),(260,85),color,cv2.FILLED)
        img=putText2(img,f'眨眼计数:{blinkCouter}',(50,50),color=(0,0,255))

        imgPlot = plotY.update(int(ratioAvg),color)
        # cv2.imshow("Imgplot",imgPlot)
        cv2.resize(img, (640, 480))
        imgStack=cvzone.stackImages([img,imgPlot],2,1)

    cv2.imshow("img",imgStack)

    cv2.waitKey(1)

截取任意一帧画面演示效果:

mediapipe ver,python,opencv,计算机视觉文章来源地址https://www.toymoban.com/news/detail-818442.html

到了这里,关于python 涉及opencv mediapipe知识,眨眼计数 供初学者参考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用MediaPipe和OpenCV的Python实现手势识别

    手势识别技术是一种非常有用的技术,它可以将人类的手势转化为计算机可以理解的形式,从而实现更加自然、快速和直观的交互方式。本文将介绍一种基于MediaPipe和OpenCV的手势识别技术,可以实现对手势的实时识别和分析。 MediaPipe是一种开源的机器学习框架,可以用于构建

    2024年02月14日
    浏览(37)
  • MediaPipe+OpenCV 实现实时手势识别(附Python源码)

    MediaPipe官网:https://developers.google.com/mediapipe MediaPipe仓库:https://github.com/google/mediapipe MediaPipe 是一个由 Google 开发的开源跨平台机器学习框架,用于构建视觉和感知应用程序。它提供了一系列预训练的机器学习模型和工具,使开发者能够轻松地构建基于计算机视觉和机器学习的

    2024年02月07日
    浏览(34)
  • opencv-疲劳检测-眨眼检测

    2024年02月12日
    浏览(27)
  • python+opencv+mediapipe实现手势检测上下左右(含完整代码)

    应用场景:ai换脸,根据左右手势选择图片,上下则表示选中。 版本号:python3.7(一开始是3.6,但是mediapipe最低就是3.7 因为网上检测的都不太准,所以我在判断的时候加入了如果70次里55次检测的是左才返回左,测试完之后效果还可以,蛮准的。判断方法想的头都要秃了。 实

    2024年04月11日
    浏览(36)
  • 基于opencv与mediapipe的面部跟踪(人脸检测追踪)python代码实现

            面部跟踪主要是从图像或视频中检测出人脸并输出人脸位置及其大小等有效信息,并在后续帧中继续捕获人脸的位置及其大小等信息,实时跟踪人脸。此技术可用于海关、机场、视频会议、拍照对焦、面部打码等业务场景。(与人脸识别是不同范畴)         本

    2024年01月17日
    浏览(49)
  • 树莓派4B Python3.7.3 Opencv+Mediapipe 手指方向识别

    起因: 2023年4月接触树莓派之后,想实现手指方向的实时识别,现有Google的框架Mediapipe可以实现21个手指关键点位置实时识别,去尝试装Mediapipe以及相关依赖库,发现树莓派的源(官方源),一些库比较旧(15年的都有),所以整体思想要装15年 16年的版本,才能适配 系统环境

    2024年02月03日
    浏览(37)
  • 基于python使用OpenCV和MediaPipe通过人体姿态检测实现对标准的仰卧起坐数量的计量(三)

    先来看一下main.py的代码 import cv2 import numpy as np import PoseModule as pm   cap = cv2.VideoCapture(\\\'10.mp4\\\') detector = pm.poseDetector() count = 0 dir = 0   while True:     success, img = cap.read()     img = cv2.resize(img, (400, 300))     img = detector.findPose(img, False)     lmList = detector.fi

    2024年04月16日
    浏览(46)
  • 使用opencv和dlib库(C++代码)实现人脸活体检测(眨眼、张嘴、摇头检测)

    本文章使用opencv和dlib库,使用C++代码实现了人脸活体检测,包括眨眼检测、张嘴检测以及摇头检测,可以对静态图片和活体进行有效区分。 dlib是一个开源的C++机器学习库,它提供了一系列用于图像处理、人脸检测、人脸识别、物体检测、图像标注等功能的算法和工具。dli

    2024年04月14日
    浏览(44)
  • 153基于python和opencv实现实时统计米粒计数

    本期是一个小的demo,对米粒进行实时统计个数。效果图如下: 代码下载和视频演示地址: 153基于python和opencv实现实时统计米粒计数_哔哩哔哩_bilibili 其他代码可了解: 001手写汉字识别-单个汉字识别-pyqt可视化交互界面-python代码\\\') 002unet墙体瑕疵检测-python-pytorch\\\') 003水果识别

    2024年04月11日
    浏览(32)
  • OpenCV与mediapipe实践

    开发环境:vscode + venv 设置vscode, 建立项目,如: t1/src, 用vscode打开,新建终端Terminal,这时可能会有错误产生,解决办法: 初始化环境  在VSCode中使用CTRL+shift+p命令: 打开命令交互面板;(或点击Setting,点击Command Palette…)输入 Python:Select Interpreter ESC 退出小窗

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包