Realtime Distance Estimation Using OpenCV Python (original) (raw)

import cv2

Known_distance = 76.2

Known_width = 14.3

GREEN = ( 0 , 255 , 0 )

RED = ( 0 , 0 , 255 )

WHITE = ( 255 , 255 , 255 )

BLACK = ( 0 , 0 , 0 )

fonts = cv2.FONT_HERSHEY_COMPLEX

face_detector = cv2.CascadeClassifier( "haarcascade_frontalface_default.xml" )

def Focal_Length_Finder(measured_distance, real_width, width_in_rf_image):

`` focal_length = (width_in_rf_image * measured_distance) / real_width

`` return focal_length

def Distance_finder(Focal_Length, real_face_width, face_width_in_frame):

`` distance = (real_face_width * Focal_Length) / face_width_in_frame

`` return distance

def face_data(image):

`` face_width = 0

`` gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

`` faces = face_detector.detectMultiScale(gray_image, 1.3 , 5 )

`` for (x, y, h, w) in faces:

`` cv2.rectangle(image, (x, y), (x + w, y + h), GREEN, 2 )

`` face_width = w

`` return face_width

ref_image = cv2.imread( "Ref_image.png" )

ref_image_face_width = face_data(ref_image)

Focal_length_found = Focal_Length_Finder(

`` Known_distance, Known_width, ref_image_face_width)

print (Focal_length_found)

cv2.imshow( "ref_image" , ref_image)

cap = cv2.VideoCapture( 0 )

while True :

`` _, frame = cap.read()

`` face_width_in_frame = face_data(frame)

`` if face_width_in_frame ! = 0 :

`` Distance = Distance_finder(

`` Focal_length_found, Known_width, face_width_in_frame)

`` cv2.line(frame, ( 30 , 30 ), ( 230 , 30 ), RED, 32 )

`` cv2.line(frame, ( 30 , 30 ), ( 230 , 30 ), BLACK, 28 )

`` cv2.putText(

`` frame, f "Distance: {round(Distance,2)} CM" , ( 30 , 35 ),

`` fonts, 0.6 , GREEN, 2 )

`` cv2.imshow( "frame" , frame)

`` if cv2.waitKey( 1 ) = = ord ( "q" ):

`` break

cap.release()

cv2.destroyAllWindows()