• Python入口顶部人体检测统计进出人数


    程序示例精选
    Python入口顶部人体检测统计进出人数
    如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

    前言

    这篇博客针对《Python入口顶部人体检测统计进出人数》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


    运行结果

    运行结果


    文章目录

    一、所需工具软件
    二、使用步骤
           1. 主要代码
           2. 运行结果
    三、在线协助

    一、所需工具软件

           1. Python
           2. Opencv

    二、使用步骤

    代码如下(示例):
    
    # -*- coding: utf-8 -*-
    """
    Created on Wed Jul  4 16:19:10 2018
    
    @author: Akshay Narla
    Working well with little error. Can't be tweaked by the user himself. 
    The Person program can be copied here or be imported according to the requirement.
    """
    
    import datetime
    import numpy as np
    import cv2 as cv
    
    def nothing(x):
        pass
    #video capture
    var=cv.VideoCapture('sample-02.mp4')
    fgbg = cv.bgsegm.createBackgroundSubtractorMOG()
    EntranceCounter= 0
    ExitCounter= 0
    frame_width= var.get(3)
    frame_height= var.get(4)
    res = (frame_height * frame_width)
    # Calculate the min and max size of the object
    min_areaTH = res / 40
    max_areaTH = res / 3
    # Bottom line
    bottom = int(3 * (frame_height / 5))
    pt1 =  [0, bottom]
    pt2 =  [frame_width, bottom]
    pts_L1 = np.array([pt1, pt2], np.int32)
    pts_L1 = pts_L1.reshape((-1, 1, 2))
    bottom_color = (255, 0, 0)
    # Top line
    top = int(2*(frame_height / 5))
    pt3 =  [0,top]
    pt4 =  [frame_width, top]
    ret, mask = var.read()
    while (var.isOpened()):
    #if grabbed enter loop else break    
        ret, frame = var.read()
        if not ret:
            text = "No Video"
            break
    #adjusting frame size and blurring  
        absd =  cv.absdiff(frame, mask)
        gray= cv.cvtColor(absd,cv.COLOR_BGR2GRAY, cv.CV_8UC1)
        resize = cv.GaussianBlur( gray,(21,21),0)
    #background subtraction
        fgmask= fgbg.apply(resize)
        ret, th3 = cv.threshold(fgmask ,25,200,cv.THRESH_BINARY+cv.THRESH_OTSU)
        ret, th3 = cv.threshold(dil,0,50,cv.THRESH_BINARY+cv.THRESH_OTSU)
    #contours and tracking    
        im2, contours, hierarchy = cv.findContours(th3.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
        cv.drawContours(im2, contours, -1, (200,50,50), 2)
    #grab all contours and draw rectangles and their centroids in original frame    
        for c in contours:
            area= cv.contourArea(c)
            if area> min_areaTH and area<max_areaTH:
                 M = cv.moments(c)
                 cx = int(M['m10']/M['m00'])
                 cy = int(M['m01']/M['m00'])
                 (x,y,w,h)= cv.boundingRect(c)
                 new = True
                 #tracking function
                 for i in persons:        
                     # If the object is close to already detected
                     if abs(cx-i.getX()) <= w and abs(cy-i.getY()) <= h:
                         new = False
                        # Update coordinates for better tracking
                         i.updateCoords(cx,cy)
                        # Check crossing and update Counter
                         if i.UP(bottom,top) == True:
                             EntranceCounter += 1
                         elif i.DOWN(bottom, top) == True:
                             ExitCounter += 1
                     if i.timedOut():
                         index = persons.index(i)
                         persons.pop(index)
                         del i
                 if new == True:
                     p = Person.MyPerson(cx, cy)
                     persons.append(p)
    #display the output
        frame = cv.polylines(frame,[pts_L1], False, bottom_color, thickness = 1)
        frame = cv.polylines(frame,[pts_L2], False, top_color,thickness = 1)
        cv.putText(frame, "In:"+format(str(EntranceCounter)),(10,20),cv.FONT_HERSHEY_SIMPLEX,.5,(0,0,0))
        cv.putText(frame, "Out:"+format(str(ExitCounter)),(10,35),cv.FONT_HERSHEY_SIMPLEX,.5,(0,0,0))
        cv.putText(frame, datetime.datetime.now().strftime("%A %d %B %Y %I:%M:%S%p"),
                   (10, frame.shape[0] - 10), cv.FONT_HERSHEY_SIMPLEX, 0.35, (255, 0, 0), 1)
        cv.putText(frame, "Inside:"+format(str(EntranceCounter-ExitCounter)),(10,50),cv.FONT_HERSHEY_SIMPLEX,.5,(255,255,255))
        cv.imshow('Panel', frame)
        if cv.waitKey(10) & 0xFF==ord('q'):
             break
    var.release()
    cv.destroyAllWindows()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    运行结果

    运行结果
    运行结果

    三、在线协助:

    如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

    1)远程安装运行环境,代码调试
    2)Visual Studio, Qt, C++, Python编程语言入门指导
    3)界面美化
    4)软件制作
    5)云服务器申请
    6)网站制作

    当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
    个人博客主页https://blog.csdn.net/alicema1111?type=blog
    博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

    博主推荐:
    Python人脸识别考勤打卡系统:
    https://blog.csdn.net/alicema1111/article/details/133434445
    Python果树水果识别https://blog.csdn.net/alicema1111/article/details/130862842
    Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
    Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
    Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
    Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
    Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445

  • 相关阅读:
    Python面向对象初始化函数是什么?初始化方法
    第一章 数据分析与可视化概述
    devServer.proxy 实现分环境部署???
    华为云云耀云服务器L实例评测|华为云云耀云服务器docker部署srs并调优,可使用webrtc与rtmp
    Spring Boot整合canal实现数据一致性解决方案解析-部署+实战
    体验 win10 下 oceanbase 数据库
    大模型:机器学习的崭新时代
    无代码平台会导致程序员失业,是真的吗?
    开发知识点-python-Tornado框架
    Spring Cloud 整合 nacos 实现动态配置中心
  • 原文地址:https://blog.csdn.net/alicema1111/article/details/134055482