Skip to content

Asadullah-Dal17/Yolov4-Detector-and-Distance-Estimator

Repository files navigation

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 📷, detailed explanation of distance estimation is available in another repository Face detection and Distance Estimation using single camera

YoloV4.Distance.Estimation.mp4

Video Tutorial Explains the concept and implementation YouTube Video Views

  • 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

opencv contrib

windows

pip install opencv-contrib-python==4.5.3.56

Linux or Mac

pip3 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

if 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 it has to two object, person and cell phone

# 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 👍

# 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

If you have any doubt DM me on insta Instagram


if You found this Helpful, please star ⭐ it.

You can Watch my Video Tutorial on Computer Vision Topics, just check out my YouTube Channel AiPhile Youtube

I am avalaible for paid work here Fiverr fiverr

💚🖤 Join me on Social Media 🖤💚