Machine Learning Project – Chrome Dino Game

Free Machine Learning courses with 130+ real-time projects Start Now!!

#Import the necessary modules
import pyautogui
import numpy as np
import cv2
import math


# Initialize the video capture
video_capture = cv2.VideoCapture(0)


while video_capture.isOpened():


# Captures the frames of the camera
   ret, frame = video_capture.read()


# Get hand data from the rectangular window
   cv2.rectangle(frame, (100, 100), (300, 300), (0, 255, 0), 0)
   cv2.crop_image = frame[100:300, 100:300]


# Appling Blur
   blurred_image = cv2.GaussianBlur(cv2.crop_image, (3, 3), 0)


# Converting color-space from BGR to HSV
   hsv_image = cv2.cvtColor(blurred_image, cv2.COLOR_BGR2HSV)


# It creates the binary image, where white will be our skin color and others will be black
   fg_mask = cv2.inRange(hsv_image, np.array([2, 0, 0]), np.array([20, 255, 255]))


# Kernel for morphological transformations
   kernel = np.ones((5, 5))


# Used to filter out the background noise
   dilation = cv2.dilate(fg_mask, kernel, iterations=1)
   erosion = cv2.erode(dilation, kernel, iterations=1)


# Apply thresholding and blur to create a binary mask
   filtered = cv2.GaussianBlur(erosion, (3, 3), 0)
   ret, thresh = cv2.threshold(filtered, 127, 255, 0)


# Find contours in the edge-detected image
   contours, hierachy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)


   try:
       # Find contours with maximum area
       contour = max(contours, key=lambda x: cv2.contourArea(x))


       # Draw bounding boxes around the detected objects
       x, y, w, h = cv2.boundingRect(contour)
       cv2.rectangle(cv2.crop_image, (x, y), (x + w, y + h), (0, 0, 255), 0)




       hull = cv2.convexHull(contour)


       drawing = np.zeros(cv2.crop_image.shape, np.uint8)
       cv2.drawContours(drawing, [contour], -1, (0, 255, 0), 0)
       cv2.drawContours(drawing, [hull], -1, (0, 0, 255), 0)


       hull = cv2.convexHull(contour, returnPoints=False)
       defects = cv2.convexityDefects(contour, hull)


       count_defects = 0


       for i in range(defects.shape[0]):
           s, e, f, d = defects[i, 0]
           start = tuple(contour[s][0])
           end = tuple(contour[e][0])
           far = tuple(contour[f][0])


           a = math.sqrt((end[0] - start[0]) ** 2 + (end[1] - start[1]) ** 2)
           b = math.sqrt((far[0] - start[0]) ** 2 + (far[1] - start[1]) ** 2)
           c = math.sqrt((end[0] - far[0]) ** 2 + (end[1] - far[1]) ** 2)
           angle = (math.acos((b ** 2 + c ** 2 - a ** 2) / (2 * b * c)) * 180) / 3.14


           if angle <= 90:
               count_defects += 1
               cv2.circle(cv2.crop_image, far, 1, [0, 0, 255], -1)


           cv2.line(cv2.crop_image, start, end, [0, 255, 0], 2)


       # If the condition matched press space button
       if count_defects >= 4:
               pyautogui.press('space')
               cv2.putText(frame, "JUMP", (115, 80), cv2.FONT_HERSHEY_SIMPLEX, 2, 2, 2)
   except:
       pass


   # Assign the title on the window
   cv2.imshow("Dataflair Dino Game", frame)


   # If q button is pressed, shut the camera
   if cv2.waitKey(1) == ord('q'):
       break


# Release the camera and close the window
video_capture.release()
cv2.destroyAllWindows()

 

You give me 15 seconds I promise you best tutorials
Please share your happy experience on Google

follow dataflair on YouTube

Leave a Reply

Your email address will not be published. Required fields are marked *