Maixll-Dock 数字识别

  • 数字识别
    • nn模块 会用了就不用看下面了
  • maix.nn
    • 基础用法:
      • maix.nn.load()
      • maix.nn.Model.forward()
      • maix.nn.decoder

通过数字识别,来学习一下nn模块。顺便说下我病好了(doge)

咸鱼出品,能用就行~
选用版本:v831-m2dock-maixpy3-0.5.0-20220601


在人工智能中,面对大量用户输入的数据/素材,如果要在杂乱无章的内容准确、容易地识别,输出我们期待输出的图像/语音,并不是那么容易的。因此算法就显得尤为重要了。算法就是我们所说的模型。

我们玩硬件的时候用大佬提供的模型文件就行了。当然也可以自己训练。先学会用再说吧。

数字识别

首先去官网下载MaixHub模型文件

将文件放入root/app(U盘里,镜像文件版本0.5.0)

运行main.py,首次请在串口工具下运行,方便调试。

from time import timeclass Number:mdsc_path = "./Number.mud" labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']  #标签anchors = [1.0, 5.0, 1.35, 5.42, 0.49, 2.55, 0.86, 3.75, 0.65, 4.38] #描点数据匹配度列表def __init__(self) -> None:from maix import nnself.model = nn.load(self.mdsc_path)from maix.nn import decoderself.decoder = decoder.Yolo2(len(self.labels) , self.anchors , net_in_size = (224, 224) ,net_out_size = (7,7))def __del__(self):del self.modeldel self.decoderdef cal_fps(self ,start , end):one_second = 1one_flash = end - startfps = one_second / one_flashreturn  fpsdef draw_rectangle_with_title(self ,img, box, disp_str , fps ):img.draw_rectangle(box[0], box[1], box[0] + box[2], box[1] + box[3],color=(255, 0, 0), thickness=2)img.draw_string(box[0], box[1]+ box[3] ,disp_str, scale=2,color=(255, 0, 30), thickness=2)img.draw_string(0, 0 ,'FPS :'+str(fps), scale=2 ,color=(0, 0, 255), thickness=2)def process(self,input):t =  time()out = self.model.forward(input, quantize=1, layout = "hwc")boxes, probs = self.decoder.run(out, nms=0.5, threshold=0.3, img_size=(224,224))for i, box in enumerate(boxes):class_id = probs[i][0]prob = probs[i][1][class_id]# disp_str = "{}:{:.2f}%".format(self.labels[class_id], prob*100)disp_str = "{}".format(self.labels[class_id])fps = self.cal_fps(t, time())self.draw_rectangle_with_title(input, box, disp_str, fps)def main():from maix import display, cameraapp = Number()camera.config((224,224))while True:img = camera.capture()app.process(img)display.show(img)main()

效果如下,尽量只识别数字,碰到字母和数字混用的时候,不是很准。

nn模块 会用了就不用看下面了

maix.nn

整几个有用的就行~

基础用法:

from maix import nn

maix.nn.load()

  • model_path: 模型路径, 包含了字符串和字典两种形式
    字典形式:
{"param": "/root/models/sobel_int8.param","bin": "/root/models/sobel_int8.bin"
}
  • 字典形式应用如下
   model = {"param": "./number_awnn.param","bin": "./number_awnn.bin"         #注意路径}# opt设置↓options = {   "model_type":  "awnn",               #模型类别, 目前仅支持 awnn"inputs": {# 输入层, 字典形式, 关键字是层名称, 为字符串, 如果是加密模型, 需要使用整型# 值是层形状, 为一个tuple类型:(h, w, c)"input0": (224, 224, 3)        },"outputs": {                        #输出层, 同理输入层. 支持多层输出  "output0": (7, 7, (1+4+len(labels))*5)},#如果在forward使参数standardize=True(默认为True), 则会使用这个参数对输入数据进行归一化, 计算方法为(x - mean) * norm;"mean": [127.5, 127.5, 127.5],    "norm": [0.0078125, 0.0078125, 0.0078125],  #定义参见上述mean描述}
  • 字符串形式:
model_path = "./sobel_int8.mud"  #注意路径

当model_path选择字符串格式时, 此项opt不用进行赋值,默认为None

MUD文件是模型统一描述文件,点此查看

maix.nn.Model.forward()

返回 maix.nn.Model 对象,包含了一系列神经网络操作, maix.nn.load() 会返回其对象。
只能由具体的对象调用, 不能类直接调用

inputs: 输入, 可以是_maix_image的Image对象, 也可以是HWC排列的bytes对象, 也可以是HWC排列的numpy.ndarray对象(还未支持), 多层输入使用list(还未支持)
这个参数未来可能会进行优化standardize: int 类型,默认为1, 当load()加载字典类型时, opt 的mean,norm参数对数据进行标准化;当load()加载字符串类型时,会根据mud文件自动进行标准化;置为0时不会对输入数据进行处理,则输入前需要将数据进行手动处理,处理方式跟模型训练时的数据处理一致layout: "hwc" 或者 "chw", 默认设置为 "hwc"debug: int 类型,默认为0,该值不为0时会打印debug信息和forward的推理耗时

maix.nn.decoder

maix.nn.decoder.Yolo2

YOLO V2 的后处理模块, 使用时需要创建一个对象,调用run方法对模型推理输出进行解码得到物体的坐标和类别.

decoder.run(out, nms=0.5, threshold=0.3, img_size=(224,224))

参数

  • fmap: 网路输出的特征图, 一般是forward 函数的结果
  • nms: 非极大值抑制(Non-MaximumSuppression), 用来去掉重复的框, IOU(两个框的重叠区域)大于这个值就只取概率大的一个, 取值范围:[0, 1], 默认值为 0.3
  • threshold: 置信度阈值, 大于这个值才认为物体有效, 取值范围:[0, 1], 默认 0.5
  • img_size: 源图像大小, tuple类型, 比如(320, 240), 这会使返回值的box 坐标自动计算为相对于源图的坐标, 并且类型为整型,默认None 则不会计算, box 返回相对值(百分比), 浮点类型, 范围:[0, 1]

返回值
[boxes, probs], list 类型, 可以参考上面的使用例子, 其中:

  • boxes: list 类型, 每个元素也是一个list, 包含[x, y, w, h], 分别代表了框左上角坐标, 以及框的宽高
  • probs: list 类型, 每个元素也是一个list, 包含[max_prob_idx, all_classes_probs]
    1. all_classes_probs: list 类型, 包含了该框所有类别的置信度
    2. max_prob_idx: 整型,代表了all_classes_probs中最大值的下标, 取值范围: [0, classes_num - 1]

Maixll-Dock 数字识别相关推荐

  1. 深蓝学院第三章:基于卷积神经网络(CNN)的手写数字识别实践

    参看之前篇章的用全连接神经网络去做手写识别:https://blog.csdn.net/m0_37957160/article/details/114105389?spm=1001.2014.3001 ...

  2. 深蓝学院第二章:基于全连接神经网络(FCNN)的手写数字识别

    如何用全连接神经网络去做手写识别??? 使用的是jupyter notebook这个插件进行代码演示.(首先先装一个Anaconda的虚拟环境,然后自己构建一个自己的虚拟环境,然后在虚拟环境中安装ju ...

  3. 深度学习--TensorFlow(项目)Keras手写数字识别

    目录 效果展示 基础理论 1.softmax激活函数 2.神经网络 3.隐藏层及神经元最佳数量 一.数据准备 1.载入数据集 2.数据处理 2-1.归一化 2-2.独热编码 二.神经网络拟合 1.搭建 ...

  4. 使用Caffe进行手写数字识别执行流程解析

    之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples实现对手写数字进行识别,这里详细介绍下 ...

  5. 如何利用离散Hopfield神经网络进行数字识别(2)

    如何利用离散Hopfield神经网络进行数字识别

  6. 如何利用离散Hopfield神经网络进行数字识别(1)

    如何利用离散Hopfield神经网络进行数字识别,代码部分.

  7. 使用Pytorch实现手写数字识别

    使用Pytorch实现手写数字识别 1. 思路和流程分析 流程: 准备数据,这些需要准备DataLoader 构建模型,这里可以使用torch构造一个深层的神经网络 模型的训练 模型的保存,保存模型, ...

  8. OpenCV实现0到9数字识别OCR

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 使用OpenCV对0到9数字进行识别,实现简单OCR功能,基于CA ...

  9. 教程 | 基于LSTM实现手写数字识别

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 基于tensorflow,如何实现一个简单的循环神经网络,完成手写 ...

  10. 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec...

    人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...

最新文章

  1. .Net MVC Redirect出现:服务器无法在已发送 HTTP 标头之后设置状态解决方案
  2. python 学习笔记 5 -- 文件输入输出
  3. php获取总共内存_php获取页面运行使用内存的两个函数
  4. NYOJ 586 疯牛
  5. 我是如何提高工作和研究效率的?分享给大家几个神器
  6. 使用VS2010编译Qt 5.6.1过程记录
  7. 关于数据挖掘关联规则的Oracle实现
  8. 华为商城抢手机软件_华为p40配置详细参数
  9. 美国广告市场:Facebook和Google将占据四分之一市场份额
  10. GeoServer注意点
  11. RBF(径向基)神经网络
  12. 有同学问我:Fetch 和 Ajax 有什么区别?
  13. c语言立体爱心会跳动,c语言编程实例——小球跳动
  14. 人工智能 感情 自我意识
  15. html网页两边有空隙,怎么让整个内容缩进?就是四周都有间隙。
  16. Raster Map光栅图 VS Vector Map矢量图
  17. 【附源码】计算机毕业设计java兴发农家乐服务管理系统设计与实现
  18. 管理业务流程图_业务流程管理采用方案
  19. bzoj 2244: [SDOI2011]拦截导弹 cdq分治
  20. 如何高效的实现大型设备中卫星信号的传输和分配?

热门文章

  1. 使用计算机比喻的心理学研究取向,积极心理学是在( )出现的心理学研究取向。...
  2. 3000美元大奖等你来拿!
  3. 洛谷3953 逛公园
  4. pb 两个程序之间传递数据方案_老板拖欠工资,程序员怒将项目开源,竟火爆GitHub!...
  5. 制造执行系统(MES)的发展和挑战
  6. 计算机技术在会计中的应用论文,试析计算机在会计中的应用论文
  7. Expected one of xxx device type 解决方法
  8. 三维动画在建筑领域得到重要的使用
  9. 易灵思FIFO操作指南
  10. Sergey Levine-伯克利-深度强化学习2020