During the development process, we tried and changed several approaches
First iteration
We installed a camera in front of the door and trained the system to recognize the contours of people.
The system determined the number of passengers with an accuracy of 80%.
Poor quality of detection of objects in buses. Dense crowds of people do not allow you to correctly distinguish people separately. Solutions work well for low crowding. In the case of high crowding, the figures merge into one or simply get lost.
Low quality of feature extraction for assigning object uniqueness. The system does not take into account the uniqueness of people.
Second iteration
Then we changed our approach and installed cameras over the passengers' heads. As a result, the accuracy increased to 90%.
We were also able to assign unique IDs to passengers and count not only people who entered and exited, but also determined their route of travel for passengers.
Mistakes and Solutions
10% of errors arose due to the growth of passengers. For the calculation, we used a virtual threshold. When the passenger's head crossed it, we recorded the entrance or exit, but due to different heights, it was not possible to find a perfectly adjusted threshold. To solve this problem, we moved the cameras above the threshold of the bus. This helped increase the counting accuracy to 99%.
Third iteration
We have prepared a solution for deployment in buses. The main task is to form a software and hardware complex so that it can be placed directly on the bus and so that the processing speed is in real time.
For this, they rewrote from Python to C ++. Conducted tests of the software and hardware architecture of CUDA and NPU.
We checked the work on various single-board computers.
As a result, the system placed in the bus filmed video, counted passengers and threw off reports when a WiFi connection appeared.
Bus passenger counting demonstration