7Newswire
26 Jan 2023, 16:52 GMT+10
Introduction
Systems for detecting and counting vehicles are crucial components of a smart transportation system, especially when it comes to traffic control. Roads will be monitored by this vision-based technology, which will then identify and count different types of vehicles.
A Vehicle Detection software seeks to provide details about;
In this article, we'll code a system for counting and detecting vehicles. It will be sufficient to function for both still images and moving pictures. For the same, we'll be using OpenCV for carrying out all image processing operations and for detecting and counting cars and buses using a haar cascade classifier. However, you can also create your own haar cascade classifier.
Prerequisites For Vehicle Detection Software
An image-processing library is OpenCV. It is intended to address issues with computer vision. A C/C++ library called OpenCV has been enhanced by Python.
The Python programming language uses the NumPy library to provide multi-dimensional arrays, matrices, etc. It is a free and open-source Python library for numbers.
NumPy offers the following;
Coding Vehicle Detection Software By Using Open CV - Image
You require to extract an Image to work on then using the NumPy array start converting and resizing it.
image = Image.open(requests.get('https://a57.foxnews.com/media.foxbusiness.com/BrightCove/854081161001/201805/2879/931/524/854081161001_5782482890001_5782477388001-vs.jpg', stream=True).raw)
image = image.resize((450,250))
image_arr = np.array(image)
image
Now, you need a greyscale converted Image for getting better output.
grey = cv2.cvtColor(image_arr,cv2.COLOR_BGR2GRAY)
Image.fromarray(grey)
After this, we'll use GaussianBlur to clean out the image's noise. One image processing approach is a gaussian blur. It is frequently used in visual design as well to lessen noise and smooth the image so that further preprocessing would produce better results. Gaussian blur approach also lessens the image's details while minimizing image noise. Here, we'll use the GaussianBlur function to implement this preprocessing method ().
blur = cv2.GaussianBlur(grey,(5,5),0)
Image.fromarray(blur)
Here, we'll enlarge the picture. Dilation is one of the morphological strategies in which we attempt to fill the pixels with the element, often referred to as kernels or the structured pieces, to fill the remaining spaces in the images as needed.
dilated = cv2.dilate(blur,np.ones((3,3)))
Image.fromarray(dilated)
We will now use the kernel to conduct a morphology transformation. Here, we're employing a morphology-Ex approach, which instructs the function to perform certain image processing tasks. The second argument concerns the necessary procedures, and you might require circular or elliptical-shaped kernels. The get structuring element method will be used to implement the morphology-Ex method in OpenCV.
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2, 2))
closing = cv2.morphologyEx(dilated, cv2.MORPH_CLOSE, kernel)
Image.fromarray(closing)
To detect autos, we now require a car cascade. Therefore, we must first upload these to Collaborate (if you are doing it in Collab, add the cascade files within the same folder if you are doing it locally) and provide the path car cascade src. Here, we'll train the photos from the pre-trained XML file using OpenCV's preset CascadeClassifier function (Cascade file - car). To utilize detectMultiScale, we must detect numerous items, such as vehicles.
car_cascade_src = 'cars.xml'
car_cascade = cv2.CascadeClassifier(car_cascade_src)
cars = car_cascade.detectMultiScale(closing, 1.1, 1)
cars
The results of car cascade;
array([[376, 1, 22, 22],
[307, 4, 27, 27],
[196, 10, 28, 28],
[ 35, 2, 30, 30],
[150, 163, 68, 68],
[318, 121, 82, 82],
[101, 3, 43, 43],
[317, 66, 66, 66],
[274, 20, 38, 38],
[256, 52, 79, 79],
[245, 24, 20, 20],
[250, 35, 25, 25],
[ 63, 40, 22, 22],
[209, 88, 54, 54],
[ 13, 25, 43, 43],
[384, 84, 59, 59],
[145, 91, 53, 53],
[ 52, 44, 39, 39],
[237, 38, 49, 49],
[362, 43, 46, 46],
[268, 106, 60, 60]], dtype=int32)
We'll create a rectangle around any cars we identify using the contours that were previously returned. Here, we will observe that it will draw a red-bound rectangle around each car it finds.
cnt = 0
for (x,y,w,h) in cars:
cv2.rectangle(image_arr,(x,y),(x+w,y+h),(255,0,0),2)
cnt += 1
print(cnt, " cars found")
Image.fromarray(image_arr)
After this, the number of cars will appear on your screen depending on how many cars your Image shows.
Coding Vehicle Detection Software By Using Open CV - Video
The vehicle detection and counting will now be done in a video. We require the cv2.VideoWriter() method to generate the output video from frames or images. The first parameter is the path with the extension; the second is the codec for the output format; and finally, the parameters for frames per second, height, and width are required.
cascade_src = 'cars.xml'
video_src = 'Cars.mp4'
cap = cv2.VideoCapture(video_src)
car_cascade = cv2.CascadeClassifier(cascade_src)
video = cv2.VideoWriter('result.avi',cv2.VideoWriter_fourcc(*'DIVX'), 15, (450,250))
Now, we'll take a frame at a time from the input video, convert it to grayscale, and use a technique called car cascade to identify every vehicle in that frame. In the end, this film was created utilizing video. and the write() method. This video will be saved to the specified path by release().
Wrapping It Up!
We began by extracting the image that we would be working with before carrying out various operations. We learned how to utilize the haar cascade, which is used to detect objects, and how to use several haar cascades to detect cars. For other object detection, there are other pre-trained haar cascades that you can employ.
We have a broad reach because the haar cascade is used for object detection. It can be used to detect items, and we can design a unique haar cascade for particular objects.
Get a daily dose of Russia Herald news through our daily email, its complimentary and keeps you fully up to date with world and business news as well.
Publish news of your business, community or sports group, personnel appointments, major event and more by submitting a news release to Russia Herald.
More InformationNEW YORK, New York - U.S. stocks finished the third quarter with a bang on Friday. Despite a volatile start, ...
CUPERTINO, California: In a move aimed at disrupting the fintech sector dominated by Affirm Holdings and Sweden's Klarna, this week ...
BURBANK, California: Walt Disney has begun its planned lay off of 7,000 staff, which was announced earlier this year.A letter ...
NEW YORK CITY, New York: A study published this week reported that China spent $240 billion between 2008 and 2021 ...
NEW YORK, New York - U.S. stocks posted a decent rally on Thursday with all the major indices making good ...
FREMONT, California: Neuralink, Elon Musk's brain implant company, has approached the Barrow Neurological Institute, one of the largest US neurosurgery ...
DUBLIN, Ireland: The local media is reporting that US President Joe Biden will visit Ireland from April 11 until April ...
NEW YORK CITY, New York: A study published this week reported that China spent $240 billion between 2008 and 2021 ...
FREMONT, California: Neuralink, Elon Musk's brain implant company, has approached the Barrow Neurological Institute, one of the largest US neurosurgery ...
BERLIN, Germany: German news agency dpa has reported that a proposal to ramp up Berlin's climate goals failed to win ...
MOSCOW, Russia: A new campaign has begun across Russia to attract badly needed recruits to replenish its troop numbers for ...
NEW YORK CITY, New York: In a legal filing, Twitter announced that parts of its source code - the fundamental ...