Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement