import cv2 import time import numpy as np import handtracingModule as htm import math from ctypes import cast, POINTER from comtypes import CLSCTX_ALL from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume ################################ wCam, hCam = 640, 480 ################################ #configure camera cap=cv2.VideoCapture(0,cv2.CAP_DSHOW) cap.set(cv2.CAP_PROP_FRAME_WIDTH,wCam) cap.set(cv2.CAP_PROP_FRAME_HEIGHT,hCam) cap.set(cv2.CAP_PROP_FPS,30) cap.set(cv2.CAP_PROP_FOURCC,cv2.VideoWriter_fourcc(*'MJPG'))#setting codec pTime = 0 detector = htm.handDetector(detectionCon=0.7) devices = AudioUtilities.GetSpeakers() interface = devices.Activate( IAudioEndpointVolume._iid_, CLSCTX_ALL, None) volume = cast(interface, POINTER(IAudioEndpointVolume)) # volume.GetMute() # volume.GetMasterVolumeLevel() volRange = volume.GetVolumeRange() minVol = volRange[0] maxVol = volRange[1] vol = 0 volBar = 400 volPer = 0 while True: success, img = cap.read() img = detector.findHands(img) lmList = detector.findPosition(img, draw=False) if len(lmList) != 0: # print(lmList[4], lmList[8]) x1, y1 = lmList[4][1], lmList[4][2] x2, y2 = lmList[8][1], lmList[8][2] cx, cy = (x1 + x2) // 2, (y1 + y2) // 2 cv2.circle(img, (x1, y1), 10, (255, 0, 255), cv2.FILLED) cv2.circle(img, (x2, y2), 10, (255, 0, 255), cv2.FILLED) cv2.line(img, (x1, y1), (x2, y2), (255, 0, 255), 3) cv2.circle(img, (cx, cy), 10, (255, 0, 255), cv2.FILLED) length = math.hypot(x2 - x1, y2 - y1) print(length) # Hand range 50 - 300 //17 - 194 # Volume Range -65 - 0 // 63.5 #VOLUME BAR vol = np.interp(length, [17, 194], [minVol, maxVol]) volBar = np.interp(length, [17, 194], [400, 150]) volPer = np.interp(length, [17, 194], [0, 100]) print(int(length), vol) volume.SetMasterVolumeLevel(vol, None) #if circle meets if length < 50: cv2.circle(img, (cx, cy), 10, (0, 0, 255), cv2.FILLED) cv2.rectangle(img, (50, 150), (85, 400), (0, 0, 255), 3) cv2.rectangle(img, (50, int(volBar)), (85, 400), (0, 0, 255), cv2.FILLED) cv2.putText(img, f'{int(volPer)} %', (40, 450), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0), 3) #fps cTime = time.time() fps = 1 / (cTime - pTime) pTime = cTime cv2.putText(img, f'FPS: {int(fps)}', (40, 50), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 3) cv2.imshow("Img", img) if cv2.waitKey(1) & 0xff ==ord('q'): break cap.release() cv2.destroyAllWindows() # from https://github.com/AndreMiras/pycaw # from comtypes import CLSCTX_ALL # from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume # devices = AudioUtilities.GetSpeakers() # interface = devices.Activate( # IAudioEndpointVolume._iid_, CLSCTX_ALL, None) # volume = interface.QueryInterface(IAudioEndpointVolume) # volume.GetMute() # volume.GetMasterVolumeLevel() # volume.GetVolumeRange() # volume.SetMasterVolumeLevel(-20.0, None)