diff options
| author | Pinapelz <yukais@pinapelz.com> | 2025-05-22 17:58:07 -0700 |
|---|---|---|
| committer | Pinapelz <yukais@pinapelz.com> | 2025-05-22 17:58:07 -0700 |
| commit | a6c74c1c04eaf6565f1ec4ffd3aac9e5187a27d2 (patch) | |
| tree | 3797ade6b8032c59b39b3f894d36b6ba589d74f3 /chuni-hands-evolved.py | |
| parent | c4bb2dc96ce19707740d5074ee2745ccb9c32cba (diff) | |
add configurable sensor sensitivity
Diffstat (limited to 'chuni-hands-evolved.py')
| -rw-r--r-- | chuni-hands-evolved.py | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/chuni-hands-evolved.py b/chuni-hands-evolved.py index 3bce15c..9a6fee3 100644 --- a/chuni-hands-evolved.py +++ b/chuni-hands-evolved.py @@ -65,7 +65,7 @@ def calculate_preview_size(width, height, max_height=720): return new_width, new_height def setup_gui(camera_width: int, camera_height: int, preview_width: int, preview_height: int) -> tk.Tk: - global current_camera_index, x_slider, y_slider, spacing_slider, keystrokes_enabled, chuniio_enabled, update_rate, video_canvas + global current_camera_index, x_slider, y_slider, spacing_slider, sensitivity_var, keystrokes_enabled, chuniio_enabled, update_rate, video_canvas root = tk.Tk() root.title("chuni-hands-evolved") @@ -175,6 +175,14 @@ def setup_gui(camera_width: int, camera_height: int, preview_width: int, preview pass width_spinbox.config(command=update_width) + # Sensitivity control + sensitivity_frame = tk.Frame(inputs_frame, bg=style["frame_bg"]) + sensitivity_frame.pack(fill="x", pady=(0, 5)) + tk.Label(sensitivity_frame, text="Sensitivity:", font=style["label_font"], bg=style["frame_bg"], width=15).pack(side="left") + sensitivity_var = StringVar(value="20") # Default sensitivity value + sensitivity_spinbox = tk.Spinbox(sensitivity_frame, from_=1, to=100, textvariable=sensitivity_var, width=5) + sensitivity_spinbox.pack(side="left", padx=5) + # Buttons buttons_frame = tk.Frame(main_container, bg=style["frame_bg"], relief="ridge", bd=2, padx=10, pady=10) buttons_frame.pack(fill="x") @@ -242,7 +250,7 @@ def setup_gui(camera_width: int, camera_height: int, preview_width: int, preview video_canvas.configure(width=canvas_width, height=canvas_height) root.bind("<Configure>", on_window_resize) - return (root, video_canvas, x_slider, y_slider, width_var, spacing_slider, + return (root, video_canvas, x_slider, y_slider, width_var, spacing_slider, sensitivity_var, keystrokes_enabled, chuniio_enabled, update_rate) def calibrate(frame): @@ -261,14 +269,15 @@ def camera_loop(preview_width, preview_height, chuniio_shared_memory): print("Error: Could not capture frame.") continue frame = cv2.flip(frame, 1) - # Get offsets and spacing from the UI controls (assumed to be safe for reading) + # Get offsets, spacing, and sensitivity from the UI controls try: x_offset = int(x_slider.get()) y_offset = int(y_slider.get()) spacing = int(spacing_slider.get()) + sensitivity = int(sensitivity_var.get()) except Exception: - x_offset, y_offset, spacing = 0, 0, 100 - + x_offset, y_offset, spacing, sensitivity = 0, 0, 100, 20 + # Update zone positions for i, zone in enumerate(zones): zone["x"] = base_positions[i]["x"] + x_offset @@ -277,7 +286,7 @@ def camera_loop(preview_width, preview_height, chuniio_shared_memory): # Process zones for i, zone in enumerate(zones): current_brightness = get_avg_brightness(frame, zone) - if abs(current_brightness - zone_color_state[i]) > 20: + if abs(current_brightness - zone_color_state[i]) > sensitivity: # Use sensitivity value if not ZONE_TRIGGERED_STATE[i]: if keystrokes_enabled.get(): print(f"Key '{_UMIGIRI_32_AIRZONE_LAYOUT[i]}' pressed.") @@ -345,7 +354,7 @@ def load_config() -> dict: return {} def main(): - global root, current_camera_index, cap, video_canvas, x_slider, y_slider, width_var, spacing_slider, keystrokes_enabled, chuniio_enabled, update_rate, CAMERA_WIDTH, CAMERA_HEIGHT, latest_frame, running + global root, current_camera_index, cap, video_canvas, x_slider, y_slider, width_var, spacing_slider, sensitivity_var, keystrokes_enabled, chuniio_enabled, update_rate, CAMERA_WIDTH, CAMERA_HEIGHT, latest_frame, running print("Now starting up... please wait a bit...") config = load_config() current_camera_index = config.get("camera_index", 0) @@ -370,7 +379,7 @@ def main(): else: print("Error: Could not capture initial frame. Check your camera.") - (root, video_canvas, x_slider, y_slider, width_var, spacing_slider, + (root, video_canvas, x_slider, y_slider, width_var, spacing_slider, sensitivity_var, keystrokes_enabled, chuniio_enabled, update_rate) = setup_gui(CAMERA_WIDTH, CAMERA_HEIGHT, preview_width, preview_height) x_slider.set(config.get("x_offset", 0)) |
