• 基于openpose的动作识别(三)特征点电子围栏


    一、实现效果

    给视频设定一个电子围栏,当人体的某个特征点出现在该区域时进行相应记录提示。

     紫色区域为电子围栏,当人脸进入电子围栏之后开始报警,并可以做相关日志记录和视频帧截取

    二、实现方法

    (使用人脸识别调试,使用openpose部署)

    1.添加一个电子围栏区域

    #添加电子围栏
    cv2.rectangle(frame, (0,0), (20,20), color, 2)
    #提示文本

     font=cv2.FONT_HERSHEY_SIMPLEX
     cv2.putText(img,'OpenCV',(10,500),font,4,(255,255,255),2)

     #参数:文字,位置,字体cv2.putText()可以查看,字号,文字属性

    2.输出手的特征点坐标

    3.实现判断手是否处于电子围栏区域的判断语句

    4.添加提示框和提示文字

    三、具体实现步骤

    1.添加一个电子围栏区域

    2.输出手的特征点坐标

    3.实现判断手是否处于电子围栏区域的判断语句

    4.添加提示框和提示文字

    参考代码(路径自己设置)

    import cv2
     
    def CatchUsbVideo(window_name, camera_idx):
        cv2.namedWindow(window_name)
     
        #视频来源,可以来自一段已存好的视频,也可以直接来自USB摄像头
        cap = cv2.VideoCapture(camera_idx)
        #告诉OpenCV使用人脸识别分类器
            #classfier = cv2.CascadeClassifier("D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml")
        classfier = cv2.CascadeClassifier("F:/software/anaconda/installdocument/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml")
     
        #识别出人脸后要画的边框的颜色,RGB格式
        color = (0, 255, 0)
     
        while cap.isOpened():
            ok, frame = cap.read() #读取一帧数据
            if not ok:
                break
     
                #将当前帧转换成灰度图像
            grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            #添加电子围栏
            #定义电子围栏位置
            lx=200
            ly=150
            rx=250
            ry=200
            cv2.rectangle(frame, (lx,ly), (rx,ry), (225,0,225), 2)  
            #添加提示性文字
            font=cv2.FONT_HERSHEY_SIMPLEX
            #cv2.putText(frame,'Replace fire extinguisher',(0,101),font,1,(25,25,250),2)
            #人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
            faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
            #gray是待检测图像,scaleFactor表示每次图像尺寸减小的比例, minNeighbors目标至少要被检测到3次才算是真的目标
            #minSize为目标的最小尺寸
            if len(faceRects) > 0:            #大于0则检测到人脸
                for faceRect in faceRects:  #单独框出每一张人脸
                    x, y, w, h = faceRect
                    #x、y分别表示面部左上角坐标,w h是脸的宽和高
                    #cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)
                    cv2.rectangle(frame, (x,y), (x + w, y + h ), color, 2)
                    #显示人脸坐标
                    cv2.putText(frame,str(faceRect),(x,y),font,1,(25,25,250),2) #显示人脸坐标
                    #添加电子区域判断语句
                    if (x<rx and x>lx and y>ly and y<ry) :
                          cv2.putText(frame,'Replace fire extinguisher',(0,101),font,1,(25,25,250),2)
    
            #显示图像
            cv2.imshow(window_name, frame)
            c = cv2.waitKey(10)
            if c & 0xFF == ord('q'):
                break
                #释放摄像头并销毁所有窗口
        cap.release()
        cv2.destroyAllWindows()
     
    if __name__ == '__main__':
        CatchUsbVideo("find face", 0)
    
        
  • 相关阅读:
    采购申请 POCIRM-001:ORA-01403: 未找到任何数据
    前后端交互技术有哪些
    React实现类似淘宝tab居中切换效果
    CSS通过text-transform实现大写、小写和首字母大写转换
    从浏览器内部运行机制看性能优化
    设置网页浏览器标签小图标
    前后端分离的优缺点
    修改input搜索框默认叉号的样式为自定义图片
    编写优秀CSS代码的8个策略
    css如何设置不可复制?
  • 原文地址:https://www.cnblogs.com/StarZhai/p/12049217.html
Copyright © 2020-2023  润新知