gada888 发表于 2024-9-26 19:25:12

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

本帖最后由 gada888 于 2024-9-27 13:04 编辑

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


前言:完成这样一个项目有一定的挑战性,正是这一点才更吸引人。为了达成目的,需要更多更聪明的方式去吸收知识。


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

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

该呈现的内容都在视频里讲了。编程环境是用的pytharm

import cv2
import mediapipe as mp

#########################Arduino Declaration##############
import time
from pinpong.board import Board,Pin
Board("uno","COM6").begin()
led = Pin(Pin.D7, Pin.OUT)
#####################################

# 初始化MediaPipe手部解决方案
mp_hands = mp.solutions.hands
hands = mp_hands.Hands()
mp_drawing = mp.solutions.drawing_utils

# 定义A矩形和B矩形的位置和大小
rect_A = (100, 80, 100, 80)
rect_B = (400, 80, 100, 80)

# 打开摄像头
cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
      break

    # 将图像转换为RGB格式
    image_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = hands.process(image_rgb)

    # 绘制矩形框
    cv2.rectangle(frame, rect_A, (255, 255, 0), -1)
    cv2.rectangle(frame, rect_B, (0, 255, 255), -1)

    # 如果检测到手部关键点
    if results.multi_hand_landmarks:
      for hand_landmarks in results.multi_hand_landmarks:
            for id, landmark in enumerate(hand_landmarks.landmark):
                x, y = int(landmark.x * frame.shape), int(landmark.y * frame.shape)

                # 检查手部关键点是否与A矩形相交
                if rect_A <= x <= rect_A + rect_A and rect_A <= y <= rect_A + rect_A:
                  cv2.rectangle(frame, rect_A, (0, 0, 255), 6)# 改变A矩形颜色为红色
                  led.write_digital(1)

                # 检查手部关键点是否与B矩形相交
                if rect_B <= x <= rect_B + rect_B and rect_B <= y <= rect_B + rect_B:
                  cv2.rectangle(frame, rect_B, (0, 0, 255), 6)# 改变B矩形颜色为红色
                  led.write_digital(0)

            mp_drawing.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)

    cv2.imshow('Frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
      break

cap.release()
cv2.destroyAllWindows()
下面是硬件连线图

下面是MOSFET管模块接线图

奇怪,这个教学视频在B站有很多的 播放。这本坛子播放量很低。看来它们分别吸引不同的人群。


页: [1]
查看完整版本: 手势识别开关灯(带解释)