sairate c5265add08 feat(第7讲 字母卡牌): 实现记忆游戏并添加开始界面
- 新增 jiyi.py 文件,实现字母翻牌记忆游戏功能
- 添加 youxijiemian.py 文件,创建游戏开始界面
- 使用 turtle 和 tkinter 模块分别实现游戏和界面
- 支持选择不同难度的游戏模式
2025-07-04 15:36:24 +08:00

77 lines
2.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import cv2 # 导入 OpenCV用于视频捕获和图像处理
import mediapipe as mp # 导入 MediaPipe用于手部关键点检测
# =================== 初始化 MediaPipe 模块 ===================
# 获取 MediaPipe 手部识别模块
mp_hands = mp.solutions.hands
# 创建 Hands 对象,用于处理图像中的手部关键点
# 默认参数含义:
# - static_image_mode=False处理连续视频流非静态图片
# - max_num_hands=2最多检测2只手
# - min_detection_confidence=0.5置信度低于0.5的检测结果将被忽略
hands = mp_hands.Hands()
# 获取用于绘制关键点和连接线的工具
mp_draw = mp.solutions.drawing_utils
# =================== 初始化摄像头 ===================
# 打开默认摄像头设备编号为0
cap = cv2.VideoCapture(0)
# =================== 主循环,逐帧处理 ===================
while True:
# 捕获一帧图像
ret, frame = cap.read()
# 如果捕获失败,退出循环
if not ret:
break
# 水平翻转图像(摄像头默认是镜像视角,翻转后更自然)
frame = cv2.flip(frame, 1)
# OpenCV 默认使用 BGR 格式,而 MediaPipe 要求输入 RGB 格式图像
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 使用 MediaPipe 的 hand 模块处理当前帧,检测手部关键点
results = hands.process(rgb_frame)
# =================== 处理检测结果 ===================
# 如果检测到了手部
if results.multi_hand_landmarks:
# 遍历每只手
for landmarks in results.multi_hand_landmarks:
# 在原图上绘制21个关键点及其连接骨骼HAND_CONNECTIONS
mp_draw.draw_landmarks(frame, landmarks, mp_hands.HAND_CONNECTIONS)
# 提取21个关键点的 Landmark 对象(含 x, y, z 三维坐标)
landmark_points = [landmarks.landmark[i] for i in range(21)]
# =================== 手势识别部分(可拓展) ===================
# 例如:判断是否为“比赞”手势(此处未实现具体函数)
# if detect_thumb_up(landmark_points):
# cv2.putText(frame, "Thumb Up!", (50, 100),
# cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# =================== 显示图像 ===================
# 显示处理后的视频帧(窗口标题为 Hand Gesture Detection
cv2.imshow('Hand Gesture Detection', frame)
# 等待键盘事件,如果按下 'q' 键则退出程序
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# =================== 清理资源 ===================
# 释放摄像头
cap.release()
# 销毁所有 OpenCV 窗口
cv2.destroyAllWindows()