Yolov4 Detector and Distance Estimator
*Find the distance from the object to the camera using the YoloV4 object detector, here we will be using a single camera :camera:, detailed explanation of distance estimation is available in another repository* [**Face detection and Distance Estimation using single camera**](https://github.com/Asadullah-Dal17/Distance_measurement_using_single_camera) The project is written primarily in Python, first published in 2021. Key topics include: distacne, distance-calculation, distance-estimation-opencv, distance-estimation-python, distance-measure-opencv.
Yolov4-Detector-and-Distance-Estimator
Find the distance from the object to the camera using the YoloV4 object detector, here we will be using a single camera :camera:, detailed explanation of distance estimation is available in another repository Face detection and Distance Estimation using single camera
Video Tutorial Explains the concept and implementation
-
Here we are targeting the person and cell phone classes only, for demo purposes.
-
you can follow all the steps mentioned in the video to create other objects as well.
implementation detail available on Darknet
TO DO
- Finding the distance of multiple objects at the same time.
Installation you need opencv-contrib-python
windows
pippip install opencv-contrib-python==4.5.3.56
Linux or Mac
pippip3 install opencv-contrib-python==4.5.3.56
then just clone this repository and you are good to go.
I have used tiny weights, check out more on darknet GitHub for more
Add more Classes(Objects) for Distance Estimation
You will make changes on these particular lines DistanceEstimation.py
pythonif classid ==0: # person class id data_list.append([class_names[classid[0]], box[2], (box[0], box[1]-2)]) elif classid ==67: # cell phone data_list.append([class_names[classid[0]], box[2], (box[0], box[1]-2)]) # Adding more classes for distance estimation elif classid ==2: # car data_list.append([class_names[classid[0]], box[2], (box[0], box[1]-2)]) elif classid ==15: # cat data_list.append([class_names[classid[0]], box[2], (box[0], box[1]-2)]) # In that way you can include as many classes as you want # returning list containing the object data. return data_list
Reading images and getting focal length
You have to make changes on these lines ๐ DistanceEstimation.py
there are two situations, if the object(classes) in the single image then, here you can see my reference image <img src='ReferenceImages/image4.png' width=200>
it has to two object, person and cell phone
python# reading reference images ref_person = cv.imread('ReferenceImages/image14.png') ref_mobile = cv.imread('ReferenceImages/image4.png') # calling the object detector function to get the width or height of the object # getting pixel width for person person_data = object_detector(ref_person) person_width_in_rf = person_data[0][1] # Getting pixel width for cell phone mobile_data = object_detector(ref_mobile) mobile_width_in_rf = mobile_data[1][1] # getting pixel width for cat cat_data = object_detector(ref_person) cat_width_in_rf = person_data[2][1] # Getting pixel width for car car_data = object_detector(ref_person) car_width_in_rf = person_data[3][1]
if there is single class(object) in reference image then you approach it that way ๐
python# reading the reference image from dir ref_person = cv.imread('ReferenceImages/person_ref_img.png') ref_car = cv.imread('ReferenceImages/car_ref_img.png.png') ref_cat = cv.imread('ReferenceImages/cat_ref_img.png') ref_mobile = cv.imread('ReferenceImages/ref_cell_phone.png') # Checking object detection on the reference image # getting pixel width for person person_data = object_detector(ref_person) person_width_in_rf = person_data[0][1] # Getting pixel width for cell phone mobile_data = object_detector(ref_mobile) mobile_width_in_rf = mobile_data[0][1] # getting pixel width for cat cat_data = object_detector(ref_cat) cat_width_in_rf = person_data[0][1] # Getting pixel width for car car_data = object_detector(ref_car) car_width_in_rf = person_data[0][1] # Then you find the Focal length for each
๐ซ Let's Connect
<div align=\"center\">๐ผ Freelance Platforms
</div>๐ฌ Questions or Need Help?
If you have any questions or need help with the project, feel free to DM me on Instagram!
<a href="https://www.instagram.com/aiphile17"> <img src="https://img.shields.io/badge/Instagram-purple?style=for-the-badge&logo=Instagram&logoColor=white" height=20 alt="Insta Badge"/> </a>Contributors
Showing top 2 contributors by commit count.
