手势识别开关灯(带解释)

2024-09-263939
AI 快速预览详细 收起
手势识别开关灯项目通过Python编程和Arduino硬件实现。使用了OpenCV、Mediapipe和Pinpong库,通过摄像头捕捉手势并控制LED灯的开关。项目包括详细的代码解释和硬件连线图,适合零基础新手快速上手。


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


手势识别开关灯(带解释)图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站有很多的 播放。这本坛子播放量很低。看来它们分别吸引不同的人群。


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -