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()

运行结果

运行结果
运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 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

猜你喜欢

转载自blog.csdn.net/alicema1111/article/details/134055482
今日推荐