当前位置: 首页 > news >正文

[Vision Board创客营]--使用openmv识别阿尼亚

文章目录

  • [Vision Board创客营]使用openmv识别阿尼亚
    • 介绍
    • 环境搭建
    • 训练模型
      • 上传图片
      • 生成模型
    • 使用
    • 结语

[Vision Board创客营]使用openmv识别阿尼亚

🚀🚀五一和女朋友去看了《间谍过家家 代号:白》,入坑二刺螈(QQ头像也换阿尼亚了😄 😆 😊 😃),刚好不知道做什么项目来交作业,突然想到可以做一个阿尼亚识别器,于是有了这篇文章。

🚀🚀水平较菜,大佬轻喷。😰😰😰

介绍

🚀🚀Vision-Board 开发板是 RT-Thread 推出基于瑞萨 Cortex-M85 架构 RA8D1 芯片,为工程师们提供了一个灵活、全面的开发平台,助力开发者在机器视觉领域获得更深层次的体验。

🚀🚀Vision Board搭载全球首颗 480 MHz Arm Cortex-M85芯片,拥有Helium和TrustZone技术的加持。SDK包里集成了OpenMV机器视觉例程,配合MicroPython 解释器,使其可以流畅地开发机器视觉应用。

img

环境搭建

🚀🚀环境搭建可以查看这个Vision Board 环境搭建文档(https://docs.qq.com/doc/DY2hkbVdiSGV1S3JM),特别需要注意的就是,版本一定要新,我使用之前老版的RASC是不行的,如果开发过程中遇到奇奇怪怪的问题,可以首先检查自己版本的问题。

🚀🚀我们使用openmv只需要烧录官方的openmv demo就好了,官方视频教程以及文档已经很详细了,我就不重复介绍了,只需要把demo烧录进来就好了。

训练模型

🚀🚀训练模型我们使用的是edge impulse (https://studio.edgeimpulse.com/),首先准备大量的阿尼亚图片作为数据集,这里我测试的时候只选了11张,肯定是太少了,大家可以多几张,这样效果会更准确,识别精度更高,我这里只是测试学习用的,大家请勿模仿。

在这里插入图片描述

🚀🚀然后我们还需要准备一份其他的图片用来训练,因为训练模型必须两类及以上,这里我选择了几张花园宝宝的图片(就不一一展示了),大家可以自己更换其他的:

在这里插入图片描述

🚀🚀之后我们进入edge impulse,进行简单的设置,选择One label per data item(每个数据项一个标签)以及M7,然后就可以上传图片进行训练了。

在这里插入图片描述

上传图片

🚀🚀选择图片进行上传,我们先上传阿尼亚的图片。

🚀🚀这个地方注意,如果上传失败,大概率网络问题,要关闭加速器(神奇,我特地开的加速器😰)。

在这里插入图片描述

🚀🚀再上传其他的,如下所示:

在这里插入图片描述

生成模型

🚀🚀之后就到impulse design里面训练模型,差不多一直默认就好,比较简单。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

🚀🚀训练结束就好了,然后直接生成模型。

在这里插入图片描述

🚀🚀就会有一个压缩包下载,我们打开压缩包就能发现模型,到这里,训练模型部分就结束了。

在这里插入图片描述

使用

🚀🚀然后我们把labels.txt和trained.tflite放入openmv的SD里面去,同时需要新建一个captures文件夹用来存放图片,复制py文件到openmv IDE 里面去,就可以直接运行了,这里我对自动生成的程序做了一点修改,加上了LED灯,拍摄以及红框,结果如下(简陋的代码,甚至没封装,太懒了😭😭😭):

# This work is licensed under the MIT license.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Hello World Example
#
# Welcome to the OpenMV IDE! Click on the green run arrow button below to run the script!import sensor, image, time, os, tf, uos, gc
from machine import LEDsensor.reset()                         # Reset and initialize the sensor.
sensor.set_pixformat(sensor.RGB565)    # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA)      # Set frame size to QVGA (320x240)
sensor.set_windowing((240, 240))       # Set 240x240 window.
sensor.skip_frames(time=2000)          # Let the camera adjust.net = None
labels = None
led = LED("LED_BLUE")try:# load the model, alloc the model file on the heap if we have at least 64K free after loadingnet = tf.load("trained.tflite", load_to_fb=uos.stat('trained.tflite')[6] > (gc.mem_free() - (64*1024)))
except Exception as e:print(e)raise Exception('Failed to load "trained.tflite", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(e) + ')')try:labels = [line.rstrip('\n') for line in open("labels.txt")]
except Exception as e:raise Exception('Failed to load "labels.txt", did you copy the .tflite and labels.txt file onto the mass-storage device? (' + str(e) + ')')clock = time.clock()last_capture_time = time.time()
while(True):clock.tick()img = sensor.snapshot()for obj in net.classify(img, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5):img.draw_rectangle(obj.rect())# This combines the labels and confidence values into a list of tuplespredictions_list = list(zip(labels, obj.output()))x1, y1, w1, h1 = obj.rect()margin = 10  # 设置一个边距,避免紧贴头像边缘x1 += marginy1 += marginw1 -= margin * 2h1 -= margin * 2if (predictions_list[0][1] > 0.95):img.draw_rectangle((x1, y1, w1, h1), color=(255, 0, 0))  # 在检测到的对象周围绘制红色矩形框led.on()print("Anya")print("********")if time.time() - last_capture_time >= 2:  # 检查距离上次拍照是否已经超过两秒img.save("/captures/Anya_capture_%s.jpg" % str(time.time()))  # 使用时间戳作为文件名保存图片last_capture_time = time.time()  # 更新上次拍照时间print("Shooting a photo of Anya was successful")else:led.off()print("Other")print("********")

🚀🚀然后我们运行看一下结果:

🚀🚀我们注意到4个地方,一个是终端打印了Anya,第二个是拍照功能,第三个是红框,第四个是LED灯亮了。

在这里插入图片描述

🚀🚀我们打开文件夹看一下拍摄的图片:

在这里插入图片描述

🚀🚀差不多到这里就结束了,模型训练其实还不是很准,大家可以多高一点数据集,不要像我这样懒。

结语

🚀🚀因为是第一次接触,所以很多地方不太懂,请大家见谅,不过这个确实很好玩,哈哈哈!

相关文章:

[Vision Board创客营]--使用openmv识别阿尼亚

文章目录 [Vision Board创客营]使用openmv识别阿尼亚介绍环境搭建训练模型上传图片生成模型 使用结语 [Vision Board创客营]使用openmv识别阿尼亚 🚀🚀五一和女朋友去看了《间谍过家家 代号:白》,入坑二刺螈(QQ头像也换…...

【Linux:lesson1】的基本指令

🎁个人主页:我们的五年 🔍系列专栏:Linux课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🚗打开Xshell,登陆root…...

20240511日记

今天工作内容: 1.二期2号机EAP测试 2.二期开门机器暂停(停轴,停流水线电机),关闭门后继续功能测试 3.针点位偏移还需要调整,未进行大批量验证是否偏移(S3模板点位测试,两台机各焊…...

蓝桥杯成绩已出

蓝桥杯的成绩早就已经出来了,虽然没有十分惊艳 ,但是对于最终的结果我是心满意足的,感谢各位的陪伴,关于蓝桥杯的刷题笔记我已经坚持更新了49篇,但是现在即将会告别一段落,人生即将进入下一个规划。我们一起…...

.kat6.l6st6r勒索病毒数据怎么处理|数据解密恢复

导言: 在数字时代的洪流中,网络安全领域的新挑战层出不穷。近期,.kat6.l6st6r勒索病毒的出现再次打破了传统安全防护的界限。这种新型勒索病毒不仅具有高超的加密技术,更以其独特的传播方式和隐蔽性,给全球用户带来了…...

Spring Batch 是什么?主要用于什么场景?

Spring Batch是一个开源的、基于Spring框架的批量处理框架,它提供了一系列用于批量数据处理的工具和API。Spring Batch的主要目标是简化和标准化批量数据的处理过程,使得开发者可以更加专注于业务逻辑的实现,而不是批量处理的复杂性。 Sprin…...

SQL-慢查询的定位及优化

定位慢查询sql 启用慢查询日志: 确保MySQL实例已经启用了慢查询日志功能。可以通过以下命令查看是否启用: SHOW VARIABLES LIKE slow_query_log;如果未启用,可以通过以下命令启用: SET GLOBAL slow_query_log ON;配置慢查询日志&…...

练习题(2024/5/11)

1逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 、-、* 和 / 。每个操作数(运算对象)都可以是一个整数或…...

linux系统服务器中常见故障及排查方法

目录 故障1:系统无响应 故障2:网络连接问题 故障3:文件系统错误 故障4:软件包依赖问题 故障5:用户权限问题 故障6:服务无法正常工作 故障7:磁盘空间不足 故障8:内存不足 故障…...

产品人生(5):从“敏捷开发”到“四化时间管理法”

人生如产品,产品映人生,借鉴产品思维,快速提升软技能! 在互联网的敏捷开发实践中,经常会用到“流程化、模板化、清单化、不断优化”的思想来提升开发的效率和产品质量,并确保团队能够快速响应市场变化。大…...

超级好看的html网站维护源码

源码介绍 好看的html网站维护源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面, 源码截图 源码下载 好看的html网站维护源码...

从零开始搭建Springboot项目脚手架2:配置文件、返回值、日志等

1、多个环境与配置文件 2、统一返回值 返回值包括两种场景:正常controller的返回、异常发生之后返回 正常controller的返回:通过在controller的默认返回Response实现 异常发生之后返回:通过全局异常处理统一捕获返回 首先创建类StatusCode…...

Java web第五次作业

1.在idea中配置好数据源 2、视频案例中只给出了查询所有结果的示例,请自己完成添加、删除、修改操作的代码。以下供参 考。 Delete("delete from emp where id#{id}") public void delete(Integer id); 测试代码 Test public void testDelete(){ empMa…...

Unity使用ToggleGroup对多个Toggle进行管理时,初始化默认选项失效的问题

问题描述: 在unity脚本的OnEnable中用代码设置Toggle集合中的其中一个对象的ison时,发现并没有根据设置发生变化。但是该Toggle的OnValueChange却发生过变化。 如果使用协程等待0.01s,那么对应组件的ison的修改才能生效,但是逐帧分析的话会发…...

Retrofit同步请求直接返回目标对象

Rxjava方式: // 创建 Retrofit 实例 Retrofit retrofit new Retrofit.Builder().baseUrl("https://api.example.com/").addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build();// 创…...

Android GPU渲染屏幕绘制显示基础概念(1)

Android GPU渲染屏幕绘制显示基础概念(1) Android中的图像生产者OpenGL,Skia,Vulkan将绘制的数据存放在图像缓冲区中,Android中的图像消费SurfaceFlinger从图像缓冲区将数据取出,进行加工及合成。 Surface…...

Mac电脑设置hosts的方法

hosts文件是什么 hosts文件是一个系统文件,通过绑定域名与ip的关系,当本机访问该域名时 从这个文件中如果找到了对应域名,则转发到对应ip;如果没有找到对应域名,则走默认的DNS公网解析。 好处: 加速访问…...

数据分析——大数据伦理风险分析

大数据伦理风险分析 前言一、大数据伦理二、大数据技术伦理风险算法安全性、可信赖性及稳定性风险及其应对算法风险的表现算法风险的危害算法风险的应对 算法的可解释性风险及其应对算法可解释性风险的内容算法可解释性风险的损害算法可解释性风险的应对 算法的决策不可预见性风…...

漫谈AI时代的手机

以chatGPT 为代表的大语言的横空出世使人们感受到AI 时代的到来,大语言模型技术的最大特点是机器开始”懂人话“,”说人话“了。如同任何一个革命性工具的出现一样,它必将改变人类生活和工作。 在这里。我谈谈AI时代的手机。 语音通信的历史…...

fatal error: ros/ros.h: 没有那个文件或目录

解决方法: 在出错的文件的包下的CMakeLists.txt文件里,加上 find_package(catkin REQUIRED COMPONENTSroscpp )include_directories(include ${catkin_INCLUDE_DIRS} )【ROS-解决问题】 fatal error: ros/ros.h: 没有那个文件或目录-CSDN博客...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...