-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmath_sol.py
More file actions
75 lines (63 loc) · 2.4 KB
/
math_sol.py
File metadata and controls
75 lines (63 loc) · 2.4 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import cvzone
import cv2
from cvzone.HandTrackingModule import HandDetector
import numpy as np
import google.generativeai as genai
from PIL import Image
cap = cv2.VideoCapture(0)
cap.set(3,1280)
cap.set(4,720)
detector = HandDetector(staticMode=False, maxHands=2, modelComplexity=1, detectionCon=0.7, minTrackCon=0.5)
genai.configure(api_key="AIzaSyAu7w2tMO4kIAiB-RDMh8vywmF8OqBjpQk")
model = genai.GenerativeModel('gemini-1.5-flash')
# Continuously get frames from the webcam
def getHandInfo(img):
# Find hands in the current frame
# The 'draw' parameter draws landmarks and hand outlines on the image if set to True
# The 'flipType' parameter flips the image, making it easier for some detections
hands, img = detector.findHands(img, draw=True, flipType=True)
# Check if any hands are detected
if hands:
# Information for the first hand detected
hand = hands[0] # Get the first hand detected
lmList = hand["lmList"] # List of 21 landmarks for the first hand
# Count the number of fingers up for the first hand
fingers = detector.fingersUp(hand)
print(fingers)
return fingers, lmList
else:
return None
def draw(info,prev_pos,canvas):
fingers, lmList = info
current_pos= None
if fingers == [0, 1, 0, 0, 0]:
current_pos = lmList[8][0:2] #pos 8 mean drawing finger tip
if prev_pos is None: prev_pos = current_pos
cv2.line(canvas,current_pos,prev_pos,(255,0,255),10)
elif fingers == [1, 0, 0, 0, 0]:
canvas = np.zeros_like(img)
return current_pos, canvas
def sendToAI(model,canvas,fingers):
if fingers == [0,0,1,1,1]:
pil_image = Image.fromarray(canvas)
response = model.generate_content(["Solve this math problem", pil_image])
return response.text
prev_pos= None
canvas=None
image_combined=None
while True:
success, img = cap.read()
img = cv2.flip(img, 1)
if canvas is None:
canvas = np.zeros_like(img)
info = getHandInfo(img)
if info:
fingers, lmList = info
# print(fingers)
prev_pos , canvas =draw(info,prev_pos,canvas)
sendToAI(model,canvas,fingers)
image_combined= cv2.addWeighted(img,0.7,canvas,0.3,0)
cv2.imshow("Image", image_combined)
# cv2.imshow("Image", img)
# cv2.imshow("Canvas", canvas)
cv2.waitKey(1)