• 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

  • 相关阅读:
    JAVA之单元测试:Junit框架
    基于微信小程序的校园跑腿小程序,附源码
    Linux常用命令:find、grep、vim、cat、less、more
    能力提高篇--协调能力【对接】
    CentOS命令大全
    IP模块组装网络包及转发网络包链路
    QP状态机学习③——STM32F4移植QP状态机Keil环境
    openEuler 22.03 LTS SP3(华为欧拉)一键安装 Oracle 11GR2 RAC(231017)
    LyScript 批量搜索反汇编特征
    【LeetCode】【剑指offer】【二叉搜索树的后序遍历序列】
  • 原文地址:https://blog.csdn.net/alicema1111/article/details/134055482