程序示例精选
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)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