- 新增 jiyi.py 文件,实现字母翻牌记忆游戏功能 - 添加 youxijiemian.py 文件,创建游戏开始界面 - 使用 turtle 和 tkinter 模块分别实现游戏和界面 - 支持选择不同难度的游戏模式
77 lines
2.7 KiB
Python
77 lines
2.7 KiB
Python
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()
|