k210学习记录(数字识别)

这段代码演示了如何利用MaixPy中的KPU模块对摄像头捕获的图像进行实时处理,识别手写数字。程序加载预先训练的MNIST模型,对输入的224x224图像进行灰度化、缩放和像素调整后,通过KPU运行模型进行预测,将结果显示在LCD屏幕上。特别地,针对全黑或全白图像可能导致的误识别(将全黑识别为5,全白识别为1),代码进行了额外的判断处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

示例代码:

import sensor, image, time, lcd
from maix import KPU
import gc

lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.skip_frames(time = 100)
clock = time.clock()

kpu = KPU()
kpu.load_kmodel("/sd/KPU/mnist/uint8_mnist_cnn_model.kmodel")


while True:
    gc.collect()
    img = sensor.snapshot()
    img_mnist1=img.to_grayscale(1)
    img_mnist2=img_mnist1.resize(112,112)
    img_mnist2.invert()
    img_mnist2.strech_char(1)
    img_mnist2.pix_to_ai()

    out = kpu.run_with_output(img_mnist2, getlist=True)
    max_mnist = max(out)
    index_mnist = out.index(max_mnist)
    score = KPU.sigmoid(max_mnist)
    if index_mnist == 1:
        if score > 0.999:
            display_str = "num: %d" % index_mnist
            print(display_str, score)
            img.draw_string(4,3,display_str,color=(0,0,0),scale=2)
    elif index_mnist == 5:
        if score > 0.999:
            display_str = "num: %d" % index_mnist
            print(display_str, score)
            img.draw_string(4,3,display_str,color=(0,0,0),scale=2)
    else:
        display_str = "num: %d" % index_mnist
        print(display_str, score)
        img.draw_string(4,3,display_str,color=(0,0,0),scale=2)
    lcd.display(img)

kpu.deinit()

解析:

1、导入相关库,初始化摄像头和LCD屏

import sensor, image, time, lcd
from maix import KPU
import gc

lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.skip_frames(time = 100)
clock = time.clock()

2、加载模型文件

kpu = KPU()
kpu.load_kmodel("/sd/KPU/mnist/uint8_mnist_cnn_model.kmodel")

3、新建while循环读取摄像头画面,然后复制一个112*112大小的画面,对像素进行取反等处理,再将图像传入KPU里进行计算,与模型文件做运算,最终得到最优识别结果和识别分数

while True:
    gc.collect()
    img = sensor.snapshot()
    img_mnist1=img.to_grayscale(1)
    img_mnist2=img_mnist1.resize(112,112)
    img_mnist2.invert()
    img_mnist2.strech_char(1)
    img_mnist2.pix_to_ai()

    out = kpu.run_with_output(img_mnist2, getlist=True)
    max_mnist = max(out)
    index_mnist = out.index(max_mnist)
    score = KPU.sigmoid(max_mnist)

4、背景全白或全黑会出现误识别问题(将全黑识别为5,全白识别为1),所以对数字1和5进行额外分析

if index_mnist == 1:
        if score > 0.999:
            display_str = "num: %d" % index_mnist
            print(display_str, score)
            img.draw_string(4,3,display_str,color=(0,0,0),scale=2)
    elif index_mnist == 5:
        if score > 0.999:
            display_str = "num: %d" % index_mnist
            print(display_str, score)
            img.draw_string(4,3,display_str,color=(0,0,0),scale=2)
    else:
        display_str = "num: %d" % index_mnist
        print(display_str, score)
        img.draw_string(4,3,display_str,color=(0,0,0),scale=2)
    lcd.display(img)

kpu.deinit()

### K210 芯片实现数字识别的方法 #### 准备工作 为了在K210芯片上实现数字识别,需先完成一系列准备工作。这包括但不限于MAIX GO硬件组装、安装MaixPy IDE、更新MaixPy固件以及获取必要的机器码[^3]。 #### 获取与准备数据集 对于数字识别任务来说,拥有一个高质量的数据集至关重要。可以选择已有的公开数据集如MNIST,也可以自行收集特定场景下的数字图像作为训练样本。确保这些图片经过预处理以便于后续操作。 #### 训练模型 利用maixHub或其他平台来训练适合K210使用的轻量级神经网络模型来进行数字分类。此过程可能涉及调整超参数以优化性能,并最终导出适用于嵌入式设备部署的小型化模型文件[^2]。 #### 部署模型至K210 一旦获得了满意的模型权重文件(.kmodel),就需要将其传输到K210开发板中。可以通过USB连接电脑,在MaixPyIDE环境中编写简单的Python脚本来加载该模型并初始化摄像头模块用于实时捕获待测对象的画面流。 ```python from maix import nn, camera, display, image as img_tool import time # 加载之前训练好的.kmodel 文件路径 model_path = "/path/to/your/digit_recognition_model.kmodel" # 初始化神经网络推理引擎实例 interpreter = nn.Interpreter(model_file=model_path) while True: frame = camera.capture() # 抓取一帧视频画面 # 对输入图像做适当缩放和平移变换使其适应模型预期尺寸 resized_frame = img_tool.resize(frame, (96, 96)) output_data = interpreter.run(resized_frame)[0] predicted_digit = int(output_data.argmax()) result_image = draw_text_on_img(resized_frame, str(predicted_digit), position=(10, 10)) display.show(result_image) if button_pressed(): break # 如果按下按钮则退出循环停止程序执行 ``` 上述代码片段展示了如何读取来自摄像头的每一帧图像并通过已经部署成功的数字识别模型对其进行预测分析;最后将结果显示出来供观察者查看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃橘子的橘猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值