• 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

  • 相关阅读:
    Linux下Minio分布式存储安装配置(图文详细)
    【类和对象+this引用】
    【互联网】实习一个月感受
    关于APS生产排产软件选择,有哪几个要素?
    11. 盛最多水的容器
    网络基础入门:数据通信与网络基础
    leetcode每天5题-Day54(贪心3)
    南卡对比评测明基护眼灯,2022双十一哪一款护眼台灯更值得入手
    C# winform实现图片裁剪效果
    DC-5靶场下载及渗透实战详细过程(DC靶场系列)
  • 原文地址:https://blog.csdn.net/alicema1111/article/details/134055482