基于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)

    
原文地址:https://www.cnblogs.com/StarZhai/p/12049217.html