Tutorial: Counting Road Traffic Capacity with OpenCV
Today I will show you very simple but powerful example of how to count traffic capacity with the algorithm that you can run on devices.
Also, I recommend you to read my first article about road traffic classification, cause it cool and also maintains part of base pipeline architecture that we will you in this project.
Today we will learn how to count road traffic based on computer vision and without heavy deep learning algorithms.
So this algorithm works in 4 steps:
1. Get frame edges.
2. Blur them to get the more filled area.
3. Binary threshold blurred the image.
4. Overlap threshold image with ROI(you mask where you count) and count black pixels/white pixels which gives you traffic capacity.
You can see each step on image below:
Here we use CLAHE equalization to remove noise from the image that can occur on cheap/old cameras at night. It not the best thing, but gives a better result.
Then we use Canny Edge Detector to get edges from the image. We invert it to get white background(just for visual convenient)
We use basic blur with bilateral filtering which removes some color noise and gives better segmentation.
The last filter is a binary threshold which we use to get only white and black pixels which give as our segmentation on car/not car.
And the last simple step just divides the number of black pixels with the number of white pixels to get traffic capacity.
Because of some camera noise and different outdoor conditions, accuracy may not so big ~ 70–85%.
But that is not a big problem because we can set min/max limits, or use additional filtering based on light conditions and for example amount of edges on some test ROI(for example some white rectangle).
And also this data mainly used as additional data, so only relative values are needed.
Why is this data needed?
All data is needed, even if you don’t know how to use it right now :)
In our case with this data, we can say why traffic was limited at some point in time.
Why not use one big algorithm that will do all the work?
The main thing that you must remember working on Data Science projects that they should not only be effective in the domain but also cost-effective for business which includes speed, memory usage, scalability, one hour runtime costs for one task and in scale.
There are no algorithms that run efficiently in any conditions, for example, sort algorithms that used for local projects will never be used in big data projects because will be slow, and big data algorithms will not be used for local projects cause also will be slow(cause they faster only on big amount of data).
So you should build your pipeline with understanding your projects and business limitation.
If you have questions/ideas don’t hesitate to post them in comments.
PS: Also I got few emails where people asked me if it’s ok to critic my code/ideas. So yes, it’s ok, and moreover, I ask you to do so, so we all can get benefit from this.
If you like my articles, you can always support me with some beer-money https://paypal.me/creotiv