Subiksha0515 commited on
Commit
408720f
·
verified ·
1 Parent(s): c4d58b7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -21
app.py CHANGED
@@ -25,11 +25,11 @@ CLICK_DELAY = 0.5
25
 
26
  buttons = ["WRITE", "ERASE", "WHITE", "YELLOW", "PINK"]
27
  button_colors = [
28
- (80,200,120),
29
- (0,0,255),
30
- (255,255,255),
31
- (0,255,255),
32
- (255,0,255)
33
  ]
34
 
35
 
@@ -49,6 +49,7 @@ def process_frame(frame):
49
 
50
  finger, gesture = tracker.get_gesture(frame)
51
 
 
52
  board = np.zeros((WINDOW_H, WINDOW_W, 3), dtype=np.uint8)
53
  board[:] = (25, 30, 45)
54
 
@@ -69,17 +70,20 @@ def process_frame(frame):
69
  bx = 50
70
  for i, text in enumerate(buttons):
71
 
72
- if 25 <= y <= 85 and bx <= x <= bx+125:
73
  hover = i
74
 
75
- cv2.rectangle(board, (bx,25), (bx+125,85), button_colors[i], -1)
76
- cv2.putText(board, text, (bx+10,65),
77
- cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,0,0), 2)
78
 
79
  bx += 135
80
 
 
81
  # CLICK ACTION
82
- if gesture == "CLICK_GESTURE" and hover is not None and time.time()-click_time > CLICK_DELAY:
 
 
83
 
84
  click_time = time.time()
85
 
@@ -88,17 +92,17 @@ def process_frame(frame):
88
  elif hover == 1:
89
  state.set_mode(StateController.ERASE_MODE)
90
  elif hover == 2:
91
- canvas.set_color((255,255,255))
92
  state.set_mode(StateController.WRITING_MODE)
93
  elif hover == 3:
94
- canvas.set_color((0,255,255))
95
  state.set_mode(StateController.WRITING_MODE)
96
  elif hover == 4:
97
- canvas.set_color((255,0,255))
98
  state.set_mode(StateController.WRITING_MODE)
99
 
100
  # ======================
101
- # WRITING MODE (STABLE VERSION)
102
  # ======================
103
 
104
  if state.is_writing():
@@ -108,12 +112,12 @@ def process_frame(frame):
108
  if prev_x is None:
109
  prev_x, prev_y = x, y
110
 
111
- # ---- JITTER REMOVAL ----
112
- if abs(x - prev_x) < 4 and abs(y - prev_y) < 4:
113
  x, y = prev_x, prev_y
114
 
115
- # ---- STRONG SMOOTHING ----
116
- alpha = 0.95
117
  smooth_x = int(prev_x * alpha + x * (1 - alpha))
118
  smooth_y = int(prev_y * alpha + y * (1 - alpha))
119
 
@@ -131,14 +135,26 @@ def process_frame(frame):
131
  elif state.is_erasing():
132
 
133
  if gesture == "WRITE_GESTURE":
134
- cv2.circle(canvas.canvas, (x, y), 35, (0,0,0), -1)
135
  else:
136
  canvas.lift()
137
  prev_x, prev_y = None, None
138
 
139
- cv2.circle(board, (x, y), 8, (255,255,255), -1)
 
 
 
 
 
 
 
 
 
 
 
 
140
 
141
- board = cv2.add(board, canvas.canvas)
142
 
143
  return board
144
 
 
25
 
26
  buttons = ["WRITE", "ERASE", "WHITE", "YELLOW", "PINK"]
27
  button_colors = [
28
+ (80, 200, 120),
29
+ (0, 0, 255),
30
+ (255, 255, 255),
31
+ (0, 255, 255),
32
+ (255, 0, 255)
33
  ]
34
 
35
 
 
49
 
50
  finger, gesture = tracker.get_gesture(frame)
51
 
52
+ # ----- SOLID DARK BACKGROUND -----
53
  board = np.zeros((WINDOW_H, WINDOW_W, 3), dtype=np.uint8)
54
  board[:] = (25, 30, 45)
55
 
 
70
  bx = 50
71
  for i, text in enumerate(buttons):
72
 
73
+ if 25 <= y <= 85 and bx <= x <= bx + 125:
74
  hover = i
75
 
76
+ cv2.rectangle(board, (bx, 25), (bx + 125, 85), button_colors[i], -1)
77
+ cv2.putText(board, text, (bx + 10, 65),
78
+ cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 0), 2)
79
 
80
  bx += 135
81
 
82
+ # ======================
83
  # CLICK ACTION
84
+ # ======================
85
+
86
+ if gesture == "CLICK_GESTURE" and hover is not None and time.time() - click_time > CLICK_DELAY:
87
 
88
  click_time = time.time()
89
 
 
92
  elif hover == 1:
93
  state.set_mode(StateController.ERASE_MODE)
94
  elif hover == 2:
95
+ canvas.set_color((255, 255, 255))
96
  state.set_mode(StateController.WRITING_MODE)
97
  elif hover == 3:
98
+ canvas.set_color((0, 255, 255))
99
  state.set_mode(StateController.WRITING_MODE)
100
  elif hover == 4:
101
+ canvas.set_color((255, 0, 255))
102
  state.set_mode(StateController.WRITING_MODE)
103
 
104
  # ======================
105
+ # WRITING MODE
106
  # ======================
107
 
108
  if state.is_writing():
 
112
  if prev_x is None:
113
  prev_x, prev_y = x, y
114
 
115
+ # ---- JITTER FILTER ----
116
+ if abs(x - prev_x) < 5 and abs(y - prev_y) < 5:
117
  x, y = prev_x, prev_y
118
 
119
+ # ---- SMOOTHING ----
120
+ alpha = 0.92
121
  smooth_x = int(prev_x * alpha + x * (1 - alpha))
122
  smooth_y = int(prev_y * alpha + y * (1 - alpha))
123
 
 
135
  elif state.is_erasing():
136
 
137
  if gesture == "WRITE_GESTURE":
138
+ cv2.circle(canvas.canvas, (x, y), 35, (0, 0, 0), -1)
139
  else:
140
  canvas.lift()
141
  prev_x, prev_y = None, None
142
 
143
+ # Cursor
144
+ cv2.circle(board, (x, y), 8, (255, 255, 255), -1)
145
+
146
+ # ======================
147
+ # MERGE DRAWING PROPERLY
148
+ # ======================
149
+
150
+ mask = cv2.cvtColor(canvas.canvas, cv2.COLOR_BGR2GRAY)
151
+ _, mask = cv2.threshold(mask, 1, 255, cv2.THRESH_BINARY)
152
+ mask_inv = cv2.bitwise_not(mask)
153
+
154
+ bg = cv2.bitwise_and(board, board, mask=mask_inv)
155
+ fg = cv2.bitwise_and(canvas.canvas, canvas.canvas, mask=mask)
156
 
157
+ board = cv2.add(bg, fg)
158
 
159
  return board
160