Maixll-Dock 数字识别

2023-11-10 05:21
文章标签 识别 数字 dock maixll

本文主要是介绍Maixll-Dock 数字识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 数字识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/380597

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示: 此时只需要右击项目,或者你的源代码目录,将这个项目或者源码目录标记为项目源和头文件即可。 英文如下:

NC 把数字翻译成字符串

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。 现在给一串数字,返回有多少种可能的译码结果 import java.u

34465A-61/2 数字万用表(六位半)

34465A-61/2 数字万用表(六位半) 文章目录 34465A-61/2 数字万用表(六位半)前言一、测DC/AC电压二、测DC/AC电流四、测电阻五、测电容六、测二极管七、保存截图流程 前言 1、6位半数字万用表通常具有200,000个计数器,可以显示最大为199999的数值。相比普通数字万用表,6位半万用表具有更高的测量分辨率和更高的测量准确度,适用于精度比较高的测

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

两个长数字相加

1.编程题目 题目:要实现两个百位长的数字直接相加 分析:因为数字太长所以无法直接相加,所以采用按位相加,然后组装的方式。(注意进位) 2.编程实现 package com.sino.daily.code_2019_6_29;import org.apache.commons.lang3.StringUtils;/*** create by 2019-06-29 19:03** @autho

关于字符串转化为数字的深度优化两种算法

最近在做项目,在实际操作中发现自己在VC环境下写的字符串转化为整型的函数还是太过理想化了,或者说只能在window平台下软件环境中运行,重新给大家发两种函数方法: 第一个,就是理想化的函数,在VC环境下充分利用指针的优越性,对字符串转化为整型(同时也回答了某位网友的答案吖),实验检验通过: #include <stdio.h> #include <string.h> int rayatoi(c