-
Notifications
You must be signed in to change notification settings - Fork 0
/
distance.py
40 lines (31 loc) · 1.02 KB
/
distance.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import cv2
from cvzone.HandTrackingModule import HandDetector
import math
import numpy as np
import cvzone
#webcam
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 360)
#Hand Detector
detector = HandDetector(detectionCon=0.8, maxHands=1)
#Find Funtion
#x is the raw distance y is the value in cm
x = [300, 245, 200, 170, 145, 130, 112, 103, 93, 87, 80, 75, 70, 67, 62, 59, 57]
y = [20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
coff = np.polyfit(x, y, 2) # y = Ax^2 + Bx + C
#Loop
while True:
success, img = cap.read()
hands, img = detector.findHands(img)
if hands:
lmList = hands[0]['lmList']
x, y, w, h = hands[0]['bbox']
x1, y1, z1 = lmList[5]
x2, y2, z2 = lmList[17]
distance = int(math.sqrt((y2 - y1) ** 2 + (x2 - x1) ** 2))
A, B, C = coff
distanceCM = A*distance**2 + B*distance + C
cvzone.putTextRect(img, f'{int(distanceCM)} cm', (x, y))
cv2.imshow("image", img)
cv2.waitKey(1)