auroraAA 发表于 2024-8-15 14:07:01

基于行空板的图像分类在线模型应用

# 一、实践目标
本项目借助浦育在线平台训练石头剪刀布的手势模型,之后使用行空板和外接摄像头,进行实时的手势识别,并将识别结果显示在屏幕上。

# 二、知识目标
了解在线上平台训练模型的方式

# 三、实践准备
硬件清单:


软件使用:Mind+编程软件x1

# 四、实践过程
## 1、在线图像采集与模型训练
1、打开浦育网站,点击”AI体验“,打开”图像分类“:https://www.openinnolab.org.cn/pjlab/aifrontlab


2、打开摄像头采集图像,或上传提前准备好的图片到不同分类下


3、数据采集完成后,点击训练,训练完毕后测试效果,并下载onnx模型


## 2、硬件搭建
1、将摄像头接入行空板的USB接口。


2、通过USB连接线将行空板连接到计算机。


## 3、软件编写

第一步:打开Mind+,远程连接行空板


第二步:在“行空板的文件”中新建一个名为AI的文件夹,在其中再新建一个名为“基于行空板的图像分类在线模型应用”的文件夹,导入下载的onnx模型文件。


第三步:编写程序
在上述文件的同级目录下新建一个项目文件,并命名为“main.py”。
示例程序:

```
# -*- coding: UTF-8 -*-   # 指定源代码文件使用的字符编码为UTF-8

# MindPlus               # MindPlus环境相关的配置
# Python                   # 该脚本使用Python语言

import sys               # 导入sys模块,用于与Python解释器交互
sys.path.append("/root/mindplus/.lib/thirdExtension/nick-xeduhub_main-thirdex")# 添加自定义路径到sys.path,便于导入特定模块
sys.path.append("/root/mindplus/.lib/thirdExtension/winster-cvshow-thirdex")   # 添加另一个自定义路径到sys.path
import re                  # 导入正则表达式模块,用于字符串匹配
import cv2               # 导入OpenCV库,用于图像和视频处理
import sys               # 冗余导入,可以删除
from unihiker import GUI   # 从unihiker模块中导入GUI类
from XEdu.hub import Workflow as wf# 从XEdu.hub模块中导入Workflow类并重命名为wf
import os                  # 导入os模块,用于操作系统相关的功能

# 定义一个格式化任务输出的函数
def format_valve_output(task):
    try:
      output_result = ""
      output_result = task.format_output(lang="zh")# 调用任务对象的format_output方法并指定语言为中文
      return output_result# 返回格式化后的输出结果
    except AttributeError:
      return "AttributeError: 请检查输入数据是否正确"# 如果发生AttributeError异常,返回错误提示

para_task1 = {}# 初始化一个空的字典,用于存储任务参数
u_gui = GUI()# 创建一个GUI对象
TuXiangLuJing = (str("Mind+.png"))# 定义保存图像的文件路径
BiaoQianMing = ["stone","jiandao","bu"]# 定义标签名称列表
init_para_task1 = {"task":"mmedu"}# 初始化任务参数
init_para_task1["checkpoint"] = "model.onnx"# 设置模型检查点参数
task1 = wf(**init_para_task1)# 使用参数初始化Workflow对象
vd = cv2.VideoCapture()# 创建一个VideoCapture对象,用于捕获视频
vd.open(0)# 打开默认摄像头
vd.set(cv2.CAP_PROP_BUFFERSIZE, 1)# 设置视频缓冲区大小
print("打开摄像头中...")# 输出提示信息
while not (vd.isOpened()):
    pass# 等待摄像头打开
print("摄像头已打开")# 输出提示信息

while True:
    ret, grab = vd.read()# 读取摄像头图像
    if vd.grab():# 如果成功抓取到图像
      grab = cv2.resize(grab, (240, 320))# 调整图像大小
      cv2.imwrite(TuXiangLuJing, grab)# 将图像保存到指定路径
      u_gui.clear()# 清除GUI内容
      u_gui.draw_image(image=TuXiangLuJing, x=0, y=50)# 在GUI中绘制保存的图像
      txt = u_gui.draw_text(text="识别中...", x=0, y=0, font_size=20, color="#0000FF")# 在GUI中绘制文本

      para_task1["data"] = TuXiangLuJing# 更新任务参数中的数据路径

      if 'task1' in globals() or 'task1' in locals():# 检查task1是否已初始化
            rea_result_task1 = task1.inference(**para_task1)# 进行推理操作
      else:
            print("init", 'task1')# 输出初始化信息
            task1 = wf(**init_para_task1)# 重新初始化Workflow对象
            rea_result_task1 = task1.inference(**para_task1)# 进行推理操作

      output_result_task1 = format_valve_output(task1)# 格式化推理结果
      JieGuoXuHao = output_result_task1["标签"]# 获取标签结果
      result = (BiaoQianMing)# 根据标签索引获取对应的标签名称
      print(result)# 输出标签名称
      txt.config(text=(str("识别结果:") + str(result)))# 更新GUI文本内容
```

## 4、运行调试
第一步:运行主程序

运行“main.py”程序,可以看到初始时屏幕上显示着摄像头拍摄到的实时画面,将摄像头画面对准石头剪刀布,可以看到识别结果显示在了屏幕上。


## 5、程序解析
在上述的“main.py”文件中,我们主要通过opencv库来调用摄像头,从摄像头中读取图像,然后使用在线平台训练得到的模型对图像进行识别分类,并在图像上显示推理结果。整体流程如下,

① 初始化:
- 设置必要的系统路径以确保能够导入自定义库和模块。
- 导入需要的库,包括 cv2(用于图像处理)、unihiker.GUI(用于图形用户界面)、以及 XEdu.hub.Workflow(用于工作流和推理任务)。
- 定义辅助函数 format_valve_output,用于格式化任务的输出。
- 设置任务参数和路径,包括图像路径 TuXiangLuJing 和任务标签 BiaoQianMing。
- 初始化一个 Workflow 对象 task1,并设置模型检查点路径。

② 摄像头准备:
- 初始化并打开默认的摄像头设备,设置摄像头的缓冲区大小以优化读取速度。
- 等待摄像头完全打开后,输出提示信息确认摄像头已准备就绪。

③ 主循环:
- 程序进入一个无限循环,每次循环中执行以下操作:
- 从摄像头捕获一帧图像并调整图像大小。
- 保存调整后的图像到指定路径 TuXiangLuJing。
- 在 GUI 界面上绘制图像并显示“识别中...”的文本提示。
- 更新推理任务的参数以包含当前捕获的图像路径。
- 执行推理任务,调用 task1.inference 获取结果。
- 使用 format_valve_output 函数格式化推理任务的输出结果。
- 从格式化的结果中获取预测标签的序号并从标签列表 BiaoQianMing 中获取对应的标签名称。
- 在控制台上打印识别结果,并在 GUI 上更新文本显示,显示识别结果。

④ 结束:
- 如果在任何时候检测到用户输入退出信号(例如按下特定键),程序将跳出循环。
- 在程序退出前,释放摄像头设备以释放资源。

# 五、拓展
1、关于本项目更多操作细节,可参考此链接:
https://gitee.com/liliang9693/ext-xedu-hub/blob/master/%E7%A4%BA%E4%BE%8B/%E6%89%8B%E5%8A%BF%E8%AF%86%E5%88%AB.md#443%E7%BC%96%E5%86%99%E7%A8%8B%E5%BA%8F-%E6%91%84%E5%83%8F%E5%A4%B4%E5%AE%9E%E6%97%B6%E8%AF%86%E5%88%AB

发表于 2024-8-30 10:13:55

能出图型化的教學嗎?
页: [1]
查看完整版本: 基于行空板的图像分类在线模型应用