【正点原子K210连载】第四十八章 自学习分类实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第四十八章 自学习分类实验

在上一章节中,介绍了利用maix.KPU模块实现了MNIST的手写数据识别,本章将继续介绍利用maix.KPU模块实现的自学习分类。通过本章的学习,读者将学习到自学习分类应用在CanMV上的实现。
本章分为如下几个小节:
47.1 maix.KPU模块介绍
47.2 硬件设计
47.3 程序设计
47.4 运行验证

48.1 maix.KPU模块介绍
有关maix.KPU模块的介绍,请见第39.1小节《maix.KPU模块介绍》。
48.2 硬件设计
48.2.1 例程功能

  1. 获取摄像头输出的图像,对三类物体分别采集五张图像后,对采集到的图像进行分类学习,分类学习完成后,在LCD上显示识别出的物体和其对应的得分。
    48.2.2 硬件资源
    本章实验内容,主要讲解maix.KPU模块的使用,无需关注硬件资源。
    48.2.3 原理图
    本章实验内容,主要讲解maix.KPU模块的使用,无需关注原理图。
    48.3 程序设计
    48.3.1 maix.KPU模块介绍
    有关maix.KPU模块的介绍,请见第48.1小节《maix.KPU模块介绍》。
    48.3.2 程序流程图
    在这里插入图片描述

图48.3.2.1 自学习分类实验流程图
48.3.3 main.py代码
main.py中的脚本代码如下所示:

from board import board_info
from fpioa_manager import fm
from maix import GPIO
import time
import lcd
import sensor
import gc
from maix import KPU

# 省略部分代码

fm.register(board_info.KEY2, fm.fpioa.GPIOHS2)
key2 = GPIO(GPIO.GPIOHS2, GPIO.IN, GPIO.PULL_UP)

lcd.init()
sensor.reset()
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.RGB565)
sensor.set_vflip(True)

# 构造并初始化自学习分类KPU对象
self_learning = KPU()
self_learning.load_kmodel("/sd/KPU/mb-0.25.kmodel")

# 构造状态机对象
state_machine = StateMachine(state_handlers, event_handlers, transitions)
state_machine.emit_event(EVENT.POWER_ON)

# 构造按钮对象
key2_btn = Button()
btn_ticks_prev = time.ticks_ms()

fps = 0
clock = time.clock()

while True:
    gc.collect()
    clock.tick()

    # 获取按键状态并处理
    btn_ticks_cur = time.ticks_ms()
    delta = time.ticks_diff(btn_ticks_cur, btn_ticks_prev)
    btn_ticks_prev = btn_ticks_cur
    if key2.value() == 0:
        key2_btn.key_down(delta)
    else:
        key2_btn.key_up(delta)

    # 获取摄像头输出图像
    img = sensor.snapshot()
    # 通过状态机进行自学习及分类过程
    if state_machine.current_state == STATE.CLASSIFY:
        scores = []
        feature = self_learning.run_with_output(img, get_feature=True)
        high = 0
        index = 0
        for j in range(len(features)):
            for f in features[j]:
                score = self_learning.feature_compare(f, feature)
                if score > high:
                    high = score
                    index = j
        if high > THRESHOLD:
            a = img.draw_string(5, 200, "class:{}, score:{:2.1f}".format(index + 1, high), color=(0, 255, 0), scale=1.8)
    # 显示帧率
    if lcd_show_fps:
        img.draw_string(5, 5, "{:.2f}fps".format(fps), color=(0, 255, 0), scale=1.5)
    # 显示状态机消息
    if msg_notification:
        img.draw_string(5, 30, msg_notification, color=(255, 0, 0), scale=1.8)
    lcd.display(img)
    fps = clock.fps()

可以看到一开始是先初始化了LCD和摄像头,并分别构造并初始化了用于自学习分类的KPU对象,和用于处理按钮事件的按钮对象,以及控制整个应用裸机的状态机对象。
然后便是在一个循环中,不断地获取按键状态和摄像头输出的图像,然后根据状态机对象的处理,依次进行多种物体的图像采集、自学习和分类,最后在LCD上显示分类结果。
48.4 运行验证
将DNK210开发板连接CanMV IDE,点击CanMV IDE上的“开始(运行脚本)”按钮后,并根据LCD上的提示进行物体图像的采集,如下图所示:
在这里插入图片描述

图48.4.1 采集物体1图像
在这里插入图片描述

图48.4.2 采集物体2图像
物体的图像采集完毕后,便可在自学习完成后进行物体分类,如下图所示:
在这里插入图片描述

图48.4.3 检测物体1
在这里插入图片描述

图48.4.4 检测物体2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/902269.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

维乐Senso Edge坐垫,自然并不远,向往就前往

嘿,是不是已经厌倦了城市的钢筋森林,渴望一场说走就走的自然之旅?别急,维乐Senso Edge坐垫带你飞,让我们的车轮一起碾过每一寸向往的土地!    追逐风,拥抱自然。你还记得第一次骑行时的那份…

【功能安全】 独立于环境的安全要素SEooC

目录 01 SEooC定义 02 SEooC开发步骤 03 SEooC开发示例 04 SEooC问答 01 SEooC定义 缩写: SEooC:Safety Element out of Context独立于环境的安全要素 SEooC出处:GB/T34590.10—2022,第9章节 SEooC与相关项什么关系? SEooC可以是系统、系统组合、子系统、软件组件、…

Linux 系统中,将网络配置从 DHCP 改为静态 IP的几种方法

Linux 系统中,将网络配置从 DHCP 改为静态 IP 可以通过几种不同的方法来实现,下面是几种常见的方式: 方法一:使用 connman(Connection Manager) 如果你已经在使用 connman 管理网络,可以通过修…

MATLAB实现遗传算法优化零件拆卸装配问题

零件拆卸装配问题是一个有复杂约束的优化问题,它涉及到零件之间的连接关系、拆卸或装配的顺序、工具的使用、操作成本。 1.假设: (1)零件完整性:每个零件在拆卸和装配过程中保持完整,不发生形变或损坏 &…

MATLAB生物细胞瞬态滞后随机建模定量分析

🎯要点 基于随机动态行为受化学主方程控制,定量分析单细胞瞬态效应。确定性常微分方程描述双稳态和滞后现象。通过随机性偏微分方程描述出暂时性滞后会逐渐达到平稳状态,并利用熵方法或截断方法计算平衡收敛速度的估计值。随机定量分析模型使…

软考中级嵌入式系统设计师笔记分享(二)

1.TTL 电路是电流控制器件,而CMOS 电路是电压控制器件。 2.TTL 电路的速度快,传输延迟时间短(5-10ns),但是功耗大。 常见的串行总线有 SPI、II2C、USB、RS232/RS422/RS485、CAN等;高速串行总线主要有 SATA、PCIE、IEEE 1394、Rapidl0、USB 3…

鸿蒙UI开发——基于全屏方案实现沉浸式界面

1、概 述 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条。 其中状态栏和导航条,通常在沉浸式布局下称为避让区,避让区之外的区域称为安全区。 开发应用沉浸式效果主要指:通过调整状态栏、应用界面和导航条的显示效果来减少状态…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21目录1. The Fair Language Model Paradox摘要研究背景问题与挑战如何解决创新点算法模型实验效果重要数据与结论推荐阅读指数&…

stable-zero123模型构建指南

一、介绍 stabilityai出品,能够对有简单背景的物体进行三维视角图片的生成,简单来说也就是通过调整变换观察的视角生成对应视角的图片。 本项目通过comfyui实现。 二、容器构建说明 1. 部署ComfyUI (1)使用命令克隆ComfyUI g…

6,000 个网站上的假 WordPress 插件提示用户安装恶意软件

黑客使用窃取的凭证感染 WordPress 网站,并向其发送虚假插件,通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种,自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…

C++ 模板编程:解锁高效编程的神秘密码

快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 目录 💯前言 💯泛型编程 💯函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 5.模板参…

社交媒体视频素材平台推荐

在内容创作日益重要的今天,社交媒体视频素材的需求不断增加。适合各种平台的视频素材不仅可以提升内容质量,还能吸引更多观众。以下是一些推荐的社交媒体视频素材平台,帮助你找到适合的资源。 蛙学网 蛙学网 是一个专注于社交媒体视频素材的平…

C# 标准绘图控件 chart 多 Y 值的编程应用

C# 标准绘图控件 chart 多 Y 值的编程应用 1、前言2、声明标准绘图控件 chart 命名空间3、使用绘图控件 chart3.1、在窗体中拖入绘图控件 chart ,拖入绘图控件 chart 最简单实用。3.2、在语句中声明加入,但要将 控件和其组件加入窗体或其它容器很麻烦&am…

2025 - AI人工智能药物设计 - 中药网络药理学和毒理学的研究

中药网络药理学和毒理学的研究 TCMSP:https://old.tcmsp-e.com/tcmsp.php 然后去pubchem选择:输入Molecule Name 然后进行匹配:得到了smiles 再次通过smiles:COC1C(CC(C2C1OC(CC2O)C3CCCCC3)O)O 然后再次输入:http…

尚硅谷-react教程-求和案例-数据共享(下篇)-完成数据共享-笔记

#1024程序员节&#xff5c;征文# public/index.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>redux</title></head><body><div id"root"></div></body> </html&…

Vuex的基础

文章目录 vuex概述构建vuex[多组件数据共享]环境创建一个空仓库ps.创建仓库时遇到的错误 核心概念 - state状态核心概念 - mutations辅助函数 - mapMutations 核心概念 - actions辅助函数 - mapActions 核心概念 - getters核心概念 - 模块module&#xff08;进阶语法&#xff0…

Python(pandas库2)

DateFrame的添加 上文中DateFrame的增加中&#xff0c;因版本弃置append函数 如果你想要向 DataFrame 添加一行&#xff0c;建议的方法是首先创建一个新的 DataFrame 来表示这行数据&#xff0c;然后使用 pd.concat() 函数来合并它们。 concat 语法&#xff1a; objs: 要连…

基于协同过滤算法的个性化课程推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

JDBC: Java数据库连接的桥梁

什么是JDBC&#xff1f; Java数据库连接&#xff08;Java Database Connectivity&#xff0c;简称JDBC&#xff09;是Java提供的一种API&#xff0c;允许Java应用程序与各种数据库进行交互。JDBC提供了一组标准的接口&#xff0c;开发者可以利用这些接口执行SQL语句、处理结果集…

「C/C++」C++ STL容器库 之 std::multiset 键的集合容器

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…