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

    
复制代码
posted @   StarZhai  阅读(2748)  评论(2编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示