From f418af67392dde8f3703143848a4fdc30ca5e118 Mon Sep 17 00:00:00 2001 From: hand_gesturer_ecognition <3023667994@qq.com> Date: Sat, 1 Jun 2024 22:52:01 +0800 Subject: [PATCH] 0601 --- gesture_recognition.py | 8 ++------ gui.py | 33 ++++++++++++++++++++------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/gesture_recognition.py b/gesture_recognition.py index 335917d9..b2223414 100644 --- a/gesture_recognition.py +++ b/gesture_recognition.py @@ -43,7 +43,7 @@ def start_recognition(callback=None): def run_recognition(callback=None): """运行手势识别""" - global keep_running, paused + global keep_running, paused, total_raised_fingers while keep_running and cap.isOpened(): ret, img = cap.read() @@ -66,12 +66,8 @@ def run_recognition(callback=None): cv2.putText(img_rgb, f'Total Raised Fingers: {total_raised_fingers}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0), 2, cv2.LINE_AA) - if total_raised_fingers == 5: # 如果检测到五根手指,调用回调函数传递手指数 - if callback: - callback(total_raised_fingers) - if callback: - callback(img_rgb) # 调用回调函数传递图像数据 + callback(total_raised_fingers, img_rgb) # 调用回调函数传递手指数和图像数据 def stop_recognition(): """停止手势识别""" diff --git a/gui.py b/gui.py index d5988164..0702ae53 100644 --- a/gui.py +++ b/gui.py @@ -3,11 +3,14 @@ from tkinter import * from tkinter import ttk from PIL import Image, ImageTk import numpy as np # 导入 numpy +import subprocess # 导入 subprocess 模块 from gesture_recognition import start_recognition, stop_recognition, release_camera, keep_running WINDOW_WIDTH = 800 WINDOW_HEIGHT = 705 +main_launched = False # 标志位,记录 main.py 是否已经启动 + def main(): """显示欢迎屏幕""" @@ -91,8 +94,8 @@ def start_thread(root, canvas, status_label): status_label.config(text="正在识别...") paused = False popup_open = False - threading.Thread( - target=lambda: start_recognition(callback=lambda data: root.after(0, update_canvas, canvas, data))).start() + threading.Thread(target=lambda: start_recognition( + callback=lambda fingers, img: root.after(0, update_canvas, canvas, fingers, img))).start() def stop_recognition_with_label(status_label): @@ -109,30 +112,34 @@ def exit_program(): window.destroy() -def update_canvas(canvas, data): +def update_canvas(canvas, fingers, img): """更新画布显示图像或处理手指数""" - if isinstance(data, np.ndarray): # 确保传入的data是图像数据 - img = Image.fromarray(data) + if isinstance(img, np.ndarray): # 确保传入的img是图像数据 + img = Image.fromarray(img) imgtk = ImageTk.PhotoImage(image=img) canvas.create_image(0, 0, anchor=NW, image=imgtk) canvas.image = imgtk canvas.update() - else: - handle_finger_detection(data) + handle_finger_detection(fingers) def handle_finger_detection(finger_count): """处理检测到的手指数""" - global paused, popup_open - if not popup_open: + global paused, popup_open, main_launched + if finger_count == 10 and not main_launched: + main_launched = True + launch_main_script() + elif not popup_open: if finger_count == 5: paused = True popup_open = True show_stop_recognition_window() - elif finger_count == 0: - paused = True - popup_open = True - + + +def launch_main_script(): + """启动 main.py 脚本""" + subprocess.Popen(['python', 'main.py']) + def show_stop_recognition_window(): """显示停止识别确认窗口"""