Счетчик занятости с использованием OpenCVPython

Программы на Python
Ответить
Anonymous
 Счетчик занятости с использованием OpenCV

Сообщение Anonymous »

Я создал счетчик занятости с помощью OpenCV. Когда я импортирую видео, код работает нормально и подсчитывает людей, когда они проходят. Но когда я меняю ввод данных на веб-камеру, счетчик работает неправильно. Иногда он считает человека, иногда нет (хотя он отслеживает их правильно), а иногда он считает одного человека как нескольких. Я предполагаю, что алгоритм недостаточно быстр для работы с вводом данных в реальном времени, а кадры входного видео несколько меньше, чем входной видеосигнал в реальном времени. Есть идеи, как решить эту проблему?
Ниже найдите минимальный воспроизводимый код.

Код: Выделить всё

cap = cv.VideoCapture("C:\\Users\\USER_NAME\\Downloads\\example_01.mp4")

# Print the capture properties to console

for i in range(19):
print( i, cap.get(i))

h = 480
w = 640

frameArea = h*w
areaTH = frameArea/250
print( 'Area Threshold', areaTH)

# Entry / exit lines
line_up = int(1*(h/5))
line_down   = int(2*(h/5))

up_limit =   int(0.5*(h/5))
down_limit = int(2.5*(h/5))

#Background Subtractor

fgbg = cv.createBackgroundSubtractorMOG2(detectShadows = True)
while(cap.isOpened()):
ret, frame = cap.read()

try:
ret,imBin= cv.threshold(fgmask,200,255,cv.THRESH_BINARY)
ret,imBin2 = cv.threshold(fgmask2,200,255,cv.THRESH_BINARY)
#Opening (erode-> dilate) to remove noise.
mask = cv.morphologyEx(imBin, cv.MORPH_OPEN, kernelOp)
mask2 = cv.morphologyEx(imBin2, cv.MORPH_OPEN, kernelOp)
#Closing (dilate -> erode) to join white regions.
mask =  cv.morphologyEx(mask , cv.MORPH_CLOSE, kernelCl)
mask2 = cv.morphologyEx(mask2, cv.MORPH_CLOSE, kernelCl)
except:
print('EOF')enter code here
print( 'UP:',cnt_up)
print ('DOWN:',cnt_down)
break

contours0, hierarchy =
cv.findContours(mask2,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)
for cnt in contours0:
area = cv.contourArea(cnt)
if area > areaTH:
#################
#   TRACKING    #
#################

M = cv.moments(cnt)
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
x,y,w,h = cv.boundingRect(cnt)

new = True
if cy in range(up_limit,down_limit):
for i in persons:
if abs(x-i.getX()) 

Подробнее здесь: [url]https://stackoverflow.com/questions/67279629/occupancy-counter-using-opencv[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»