parent 244d4a197e
commit f418af6739

@ -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():
"""停止手势识别"""

@ -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():
"""显示停止识别确认窗口"""

Loading…
Cancel
Save