Brightness Control With Hand Detection using OpenCV in Python (original) (raw)

`# Importing Libraries import cv2 import mediapipe as mp from math import hypot import screen_brightness_control as sbc import numpy as np

Initializing the Model

mpHands = mp.solutions.hands hands = mpHands.Hands( static_image_mode=False, model_complexity=1, min_detection_confidence=0.75, min_tracking_confidence=0.75, max_num_hands=2)

Draw = mp.solutions.drawing_utils

Start capturing video from webcam

cap = cv2.VideoCapture(0)

while True: # Read video frame by frame _, frame = cap.read()

# Flip image
frame = cv2.flip(frame, 1)

# Convert BGR image to RGB image
frameRGB = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

# Process the RGB image
Process = hands.process(frameRGB)

landmarkList = []
# if hands are present in image(frame)
if Process.multi_hand_landmarks:
    # detect handmarks
    for handlm in Process.multi_hand_landmarks:
        for _id, landmarks in enumerate(handlm.landmark):
            # store height and width of image
            height, width, color_channels = frame.shape

            # calculate and append x, y coordinates
            # of handmarks from image(frame) to lmList
            x, y = int(landmarks.x*width), int(landmarks.y*height)
            landmarkList.append([_id, x, y])

        # draw Landmarks
        Draw.draw_landmarks(frame, handlm,
                            mpHands.HAND_CONNECTIONS)

# If landmarks list is not empty
if landmarkList != []:
    # store x,y coordinates of (tip of) thumb
    x_1, y_1 = landmarkList[4][1], landmarkList[4][2]

    # store x,y coordinates of (tip of) index finger
    x_2, y_2 = landmarkList[8][1], landmarkList[8][2]

    # draw circle on thumb and index finger tip
    cv2.circle(frame, (x_1, y_1), 7, (0, 255, 0), cv2.FILLED)
    cv2.circle(frame, (x_2, y_2), 7, (0, 255, 0), cv2.FILLED)

    # draw line from tip of thumb to tip of index finger
    cv2.line(frame, (x_1, y_1), (x_2, y_2), (0, 255, 0), 3)

    # calculate square root of the sum of
    # squares of the specified arguments.
    L = hypot(x_2-x_1, y_2-y_1)

    # 1-D linear interpolant to a function
    # with given discrete data points
    # (Hand range 15 - 220, Brightness
    # range 0 - 100), evaluated at length.
    b_level = np.interp(L, [15, 220], [0, 100])

    # set brightness
    sbc.set_brightness(int(b_level))

# Display Video and when 'q' is entered, destroy 
# the window
cv2.imshow('Image', frame)
if cv2.waitKey(1) & 0xff == ord('q'):
    break

`