2024-9-26 19:25:12 [显示全部楼层]
568浏览
查看: 568|回复: 0

[进阶] 手势识别开关灯(带解释)

[复制链接]
本帖最后由 gada888 于 2024-9-27 13:04 编辑

手势识别开关灯(带代码解读)


手势识别开关灯(带解释)图1
前言:完成这样一个项目有一定的挑战性,正是这一点才更吸引人。为了达成目的,需要更多更聪明的方式去吸收知识。


项目分别使用了python框架下的opencv,Mediapipe和pinpong函数库。

为了让大家对这个项目的核心内容有个快速的了解。这里发布一个教学视频。视频里有对核心代码部分的完整解释。旨在让更多人更快的熟悉python代码编程。因为不懂代码,永远不能对独立做出商业项目。



该呈现的内容都在视频里讲了。编程环境是用的pytharm
手势识别开关灯(带解释)图2
  1. import cv2
  2. import mediapipe as mp
  3. #########################Arduino Declaration##############
  4. import time
  5. from pinpong.board import Board,Pin
  6. Board("uno","COM6").begin()
  7. led = Pin(Pin.D7, Pin.OUT)
  8. #####################################
  9. # 初始化MediaPipe手部解决方案
  10. mp_hands = mp.solutions.hands
  11. hands = mp_hands.Hands()
  12. mp_drawing = mp.solutions.drawing_utils
  13. # 定义A矩形和B矩形的位置和大小
  14. rect_A = (100, 80, 100, 80)
  15. rect_B = (400, 80, 100, 80)
  16. # 打开摄像头
  17. cap = cv2.VideoCapture(0)
  18. while cap.isOpened():
  19.     ret, frame = cap.read()
  20.     if not ret:
  21.         break
  22.     # 将图像转换为RGB格式
  23.     image_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
  24.     results = hands.process(image_rgb)
  25.     # 绘制矩形框
  26.     cv2.rectangle(frame, rect_A, (255, 255, 0), -1)
  27.     cv2.rectangle(frame, rect_B, (0, 255, 255), -1)
  28.     # 如果检测到手部关键点
  29.     if results.multi_hand_landmarks:
  30.         for hand_landmarks in results.multi_hand_landmarks:
  31.             for id, landmark in enumerate(hand_landmarks.landmark):
  32.                 x, y = int(landmark.x * frame.shape[1]), int(landmark.y * frame.shape[0])
  33.                 # 检查手部关键点是否与A矩形相交
  34.                 if rect_A[0] <= x <= rect_A[0] + rect_A[2] and rect_A[1] <= y <= rect_A[1] + rect_A[3]:
  35.                     cv2.rectangle(frame, rect_A, (0, 0, 255), 6)  # 改变A矩形颜色为红色
  36.                     led.write_digital(1)
  37.                 # 检查手部关键点是否与B矩形相交
  38.                 if rect_B[0] <= x <= rect_B[0] + rect_B[2] and rect_B[1] <= y <= rect_B[1] + rect_B[3]:
  39.                     cv2.rectangle(frame, rect_B, (0, 0, 255), 6)  # 改变B矩形颜色为红色
  40.                     led.write_digital(0)
  41.             mp_drawing.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)
  42.     cv2.imshow('Frame', frame)
  43.     if cv2.waitKey(1) & 0xFF == ord('q'):
  44.         break
  45. cap.release()
  46. cv2.destroyAllWindows()
复制代码

下面是硬件连线图
手势识别开关灯(带解释)图3
下面是MOSFET管模块接线图

手势识别开关灯(带解释)图4奇怪,这个教学视频在B站有很多的 播放。这本坛子播放量很低。看来它们分别吸引不同的人群。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail