目录
概要
最近小编在做学校工作室的往年招新题目,也是做到了这道很有意思的题目,所以想把学到的东西分享一下,如果有错的话,还请大佬们指正。
首先基于Python+Opencv+mediapipe可以实现手势的识别,这里就只是识别数字,识别后得出的数据通过串口通信(Python实现)向stm32单片机传输数据,单片机收到数据后点亮相应数量的LED灯。
这里先简单介绍一下什么是Opencv和mediapipe
Opencv:OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
在这里我们只是用来获取电脑的摄像头,以便后续识别的进行。
mediapipe:mediapipe是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。在谷歌,一系列重要产品,如 YouTube、Google Lens、ARCore、Google Home 以及 Nest,都已深度整合了 MediaPipe。MediaPipe大有用武之地,可以做物体检测、自拍分割、头发分割、人脸检测、手部检测、运动追踪,等等。基于此可以实现更高级的功能。
手势识别的功能就靠mediapipe中的手部检测实现的。
还有串口通信的模块pySerial:
pySerial 是 Python 中用于操作串口的第三方模块,它支持 Windows、Linux、OSX、BSD等多个平台。如果要使用 pySerial 模块,首先必须保证 Python 版本高于 Python 2.7 或者 Python 3.4。另外,如果你是用的是 Windows 系统,那必须使用 Win7 及以上的版本。
pySerial 的安装很简单,只需要执行一条命令:pip install pyserial
安装完成后,只需要在 Python 代码中使用 import serial 语句导入该模块即可。
然后通过电脑向stm32单片机通信传输数据,单片机接收到数据后点亮对应数量得LED灯。怎么样是不听起来很轻松?其实也不是很难,一步一来就好。
整体架构流程
1.Python的代码
这里先给出效果图
关于Opencv和mediapipe的下载这里就不说了,网上有很多的教程。具体的代码框架如下,具体的思路写在注释里了。
import cv2
import mediapipe as mp
import warnings
import serial
import math
ser = serial.Serial('COM7', 9600, bytesize=8,parity=serial.PARITY_NONE,stopbits=1,timeout=None) #打开串口
if ser.isOpen(): #判断串口是否打开成功
print("Serial port opened successfully")
print(ser.name)
else:
print("Error in opening serial port")
hand_mod = mp.solutions.hands #导入手部模型
my_hands = hand_