import cv2
import numpy as np
import time
import handtrackingmodule as htm
import math
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume






wCam, hCam = 640,480


cap = cv2.VideoCapture(0)
cap.set(3, wCam)
cap.set(4, hCam)
pTime = 0

detector = htm.handDetector(detectionCon=0.9)
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]





while True:
	success,img = cap.read()
	img = detector.findHands(img)
	lmList = detector.findPosition(img,draw = False)
	if len(lmList) != 0:
		# print(lmList[4],lmList[0])


		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), 8, (255,0,255), cv2.FILLED)
		cv2.circle(img, (x2,y2), 8, (255,0,255), cv2.FILLED)
		cv2.line(img, (x1,y1),(x2,y2),(255,0,255),3)
		cv2.circle(img, (cx,cy), 4, (255,255,0), cv2.FILLED)


		length = math.hypot(x2 - x1, y2 - y1)
		# print(length)


		vol = np.interp(length,[40,300], [minVol,maxVol])
		print(int(length), vol)
		volume.SetMasterVolumeLevel(vol, None)




		if length < 40:
			cv2.circle(img, (cx,cy), 10, (0,0,255), cv2.FILLED)






	












	cTime = time.time()
	fps = 1/(cTime-pTime)
	pTime = cTime
	cv2.putText(img,str(int(fps)),(40,70),cv2.FONT_HERSHEY_PLAIN,3,(0,0,255),3)






	
	cv2.imshow("image", img)
	if cv2.waitKey(1) & 0xFF==ord('q'):
		break
