Подсчет транспортных средств на основе классификации транспортных средств
В настоящее время я занимаюсь обнаружением транспортных средств, классификацией и подсчетом количества экземпляров каждого класса для моей дипломной работы. Но у меня проблема со счетом. Я хочу подсчитать количество транспортных средств на основе результатов классификации (например, "Общее количество автомобилей" и "Общее количество грузовиков").
В настоящее время я использую пример кода отсюда https://github.com/AlfaCodeFlow/Vehicle_Detection-And-Classification.
В этом примере автор подсчитывает общее количество автомобилей в зависимости от направления их движения ("ВВЕРХ" или "ВНИЗ"), как на этом примере изображения.
Что мне нужно, так это изменить этот код таким образом, чтобы он подсчитывал и отображал общее количество грузовиков и общее количество автомобилей вместо общего количества транспортных средств, движущихся вверх или вниз. Не могли бы вы мне помочь?
Вот код для этой задачи, где мне нужно внести изменения:
cnt_up=0
cnt_down=0
line_up=400
line_down=250
up_limit=230
down_limit=int(4.5*(500/5))
new=True
if cy in range(up_limit,down_limit):
for i in cars:
if abs(x - i.getX()) <= w and abs(y - i.getY()) <= h:
new = False
i.updateCoords(cx, cy)
#Counter that i need to change from upward and downward to classification (Truck & Car)
if i.going_UP(line_down,line_up)==True:
cnt_up+=1
elif i.going_DOWN(line_down,line_up)==True:
cnt_down+=1
break
if i.getState()=='1':
if i.getDir()=='down'and i.getY()>down_limit:
i.setDone()
elif i.getDir()=='up'and i.getY()<up_limit:
i.setDone()
#This is for Classification
for i in cars:
cv2.putText(frame, str(i.getId()), (i.getX(), i.getY()), font, 0.3, (255,255,0), 1, cv2.LINE_AA)
if line_down+20<= i.getY() <= line_up-20:
a = (h + (.74*w)- 100)
if a >= 0:
cv2.putText(frame, "Truck", (i.getX(), i.getY()), font, 1, (0,0,255), 2, cv2.LINE_AA)
else:
cv2.putText(frame, "Car", (i.getX(), i.getY()), font, 1, (0,0,255), 2, cv2.LINE_AA)
#To render in frame
str_up='UP: '+str(cnt_up)
str_down='DOWN: '+str(cnt_down)
frame=cv2.line(frame,(0,line_up),(900,line_up),(0,0,255),3,8)
frame=cv2.line(frame,(0,up_limit),(900,up_limit),(0,0,0),1,8)
frame=cv2.line(frame,(0,down_limit),(900,down_limit),(255,255,0),1,8)
frame=cv2.line(frame, (0, line_down), (900, line_down), (255, 0,0), 3, 8)
cv2.putText(frame, str_up, (10, 40), font, 0.5, (0, 0, 255), 1, cv2.LINE_AA)
cv2.putText(frame, str_down, (10, 90), font, 0.5, (255, 0, 0), 1, cv2.LINE_AA)
cv2.imshow('Frame',frame)