ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

3.0 Maixpy(maixduino)的简单使用、训练的讲解,识别程序和视频播放的讲解(以垃圾分类为例)

2021-10-24 23:04:03  阅读:179  来源: 互联网

标签:fpioa 训练 为例 maixduino lcd 讲解 import sensor fm


注意!!!

这篇文章写于2021年10月,但是我使用这个开发板是在2020年8月到12月的期间用的,并且这块板子还是比较新的,也是最近一段时间资料才开始逐渐完善的。 当时我用的时候也是三天两头烧写固件,各种bug不断。但是现在也完善很多了,所以我下面依据的资料,尤其是我的示例代码,可能由于更新,一些方法有所变化。要根据需要查看官方的代码库,有很多示例代码。 但是有一点,我写之前也有用了一些时间查看了最新的WIKI文档,有了很多更新,但是思路是一样,毕竟不可能完全重构是吧。所以在看的时候要学会举一反三,万变不离其宗。有问题也还希望大家指正!

模型的训练

我这里不会再对这个板子的基础知识做讲解,已经模型的具体训练方式做过多的讲解,因为官方的文档比我讲的更加清楚,学习之前和操作之中,反复阅读文档,实在遇到解决不了的问题再去询问他人!

Maixhub训练平台

这是spieed自己的训练平台,只要是自己做比赛或者测试的少量数据集都可以丢上去训练。 我之前也用过,当时这平台也是三天两头崩溃,当时说是重做网站,那一个月都无法上传训练,后面才找到一个工具在本地训练,后面再细讲。 当时最近看群消息,基本这个网站现在还算是稳定可用了。 用这个就相当于傻瓜式操作,基本只要自己处理好数据集,按照规定的格式,打包上传即可。然后训练完成后的模型就会打包发送到你的邮箱。把里面的模型文件拷贝到SD卡里面就可以使用。同时还包括boot.py和main.py两个文件,一起放进去,最简单的识别程序就完成了。(这是我当时的使用的情况,至于现在,大家可以自行尝试!)
这是最新平台的使用,大家可以自行查看。
maixhub平台使用说明

这个就是当时平台训练发送过来的文件,kmodel是加密的模型文件,h5,tflite也是不同格式的模型文件。anchors.txt是锚点文件,主要是进行图像检测的时候用,class.txt,就是图像的类别了。(这个是图像检测,单纯的图像识别没这么多文件)
在这里插入图片描述

本地训练 LINUX/WINDOWS

这个是后面弄出来的,我当时用的时候没有贴出这一块的教程,其实也简单,最重要的还是要配环境,配了环境也是按照要求准备好数据集,然后修改train.py文件修改参数,然后python train.py,运行后只需要等待训练即可。
这里我看了是用的tensorflow,主要是要配置tensorflow的相关环境和依赖,windows下记得使用anaconda虚拟环境暗转,这样好管理各种软件包,同样也不会影响其它环境的使用。 这里由于我当时没有暗转配置过,这里我就不做过多的讲解,一切按照WIKI文件操作。
我会在后面我使用Yolo v5算法训练的过程做比较详细的讲解和心得分享。

Mx-Yolo工具的使用

这个不是官方的工具,是一个作者自己写的一个工具,很强! 其实他和上面本地训练的本质是一样的。它只是把上面的环境安装做了一键安装,然后相关的参数配置和训练写了一个界面,不得不说还是很强,也方便我们小白的使用。
不知道现在有没有更新最新版,我当时用的时候用的是第一版和第二版,总体效果还不错。
刚去看了一眼,也没更新了,可以了解一下,下面是关于它的一个介绍。

mx-yolov3介绍

代码讲解

实在是时间过去有点久,所以找了一圈,我都没有在电脑上找到之前的代码。包括识别+通过串口发送+播放视频+文本显示的代码,十分可惜。那一版是第一版,所以包括比较多的功能,本来值得写一下学习的,但是可能我当时修改的时候直接烧进的板子,没有在电脑上保存,所以实在是没找到。
就简单贴一下识别+串口发送,和播放视频的代码吧(这里代码不知道最新的固件后烧录后还能不能跑,反正只是学习看一下,实操还是参考最新的官方历程!)

#这里是识别加串口发送的函数,没写注释,将就看看吧
import sensor
import image
import lcd
import KPU as kpu
from fpioa_manager import fm
from board import board_info
from machine import UART
import time

fm.register(5,fm.fpioa.UART1_TX)
fm.register(4,fm.fpioa.UART1_RX)
uart_A = UART(UART.UART1, 115200, 8, None, 1, timeout=1000, read_buf_len=4096)


lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.set_hmirror(1)
lcd.rotation(2)
sensor.set_vflip(1)
sensor.run(2)
task = kpu.load("/sd/2020_11_14.kmodel")
f=open("anchors.txt","r")
anchor_txt=f.read()
L=[]
for i in anchor_txt.split(","):
    L.append(float(i))
anchor=tuple(L)
f.close()
a = kpu.init_yolo2(task, 0.6, 0.3, 5, anchor)
f=open("classes.txt","r")
labels_txt=f.read()
labels = labels_txt.split(",")
f.close()
count = 0
while(True):
    img = sensor.snapshot()
    code = kpu.run_yolo2(task, img)
    if code:
        for i in code:
            a=img.draw_rectangle(i.rect(),(255,0,0),2)
            a = lcd.display(img)
            for i in code:
                lcd.draw_string(48, 224, labels[i.classid()]+" "+'%.2f'%i.value(), lcd.RED,lcd.WHITE)
        write_str = str(i.classid())
        uart_A.write(write_str)
    else:
        a = lcd.display(img)
        if count == 3:
            count=0
            continue
        count += 1
    print('ok')
a = kpu.deinit(task)

#这是当时的播放视频的例程
from Maix import GPIO, I2S
from board import board_info
from fpioa_manager import fm
import lcd
import video
import time
lcd.init()
# AUDIO_PA_EN_PIN = None  # Bit Dock and old MaixGo
#AUDIO_PA_EN_PIN = 32      # Maix Go(version 2.20)
AUDIO_PA_EN_PIN = 2     # Maixduino

# init i2s(i2s0)
i2s = I2S(I2S.DEVICE_0)

# config i2s according to audio info
i2s.channel_config(i2s.CHANNEL_1, I2S.TRANSMITTER, resolution=I2S.RESOLUTION_16_BIT,
                       cycles=I2S.SCLK_CYCLES_32, align_mode=I2S.RIGHT_JUSTIFYING_MODE)

# open audio PA
if AUDIO_PA_EN_PIN:
    fm.register(AUDIO_PA_EN_PIN, fm.fpioa.GPIO1, force=True)
    wifi_en = GPIO(GPIO.GPIO1, GPIO.OUT)
    wifi_en.value(1)

fm.register(34,  fm.fpioa.I2S0_OUT_D1, force=True)
fm.register(35,  fm.fpioa.I2S0_SCLK, force=True)
fm.register(33,  fm.fpioa.I2S0_WS, force=True)

fm.register(board_info.BOOT_KEY, fm.fpioa.GPIOHS1)
key = GPIO(GPIO.GPIOHS1, GPIO.IN)

def Video_Play():
    v = video.open("/sd/badapple.avi")
    print(v)
    v.volume(50)
    while True:
        if v.play() == 0 or key.value() == 0:
            print("play end")
            break
    v.__del__()


if __name__=='__main__':
 while(True):
    Video_Play()

写在最后

maixpy的东西大概就这么多,剩下的就是还是看我提供的链接,看最新的资料就行学习。这里我就不对代码过多分享了。后面的树莓派和jetsonnano部分我会花更多的篇幅进行总结!

标签:fpioa,训练,为例,maixduino,lcd,讲解,import,sensor,fm
来源: https://blog.csdn.net/GUA8122HOU/article/details/120754780

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有