[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灯亮了。

在这里插入图片描述

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

在这里插入图片描述

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

结语

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卷积特征图与感受野

特征图尺寸和感受野是卷积神经网络中非常重要的两个概念,今天来看一下,如何计算特征尺寸和感受野。 特征图尺寸 卷积特征图,是图片经过卷积核处理之后的尺寸。计算输出特征的尺寸,需要给出卷积核的相关参数包括: 输…

cubic 相比 bbr 并非很糟糕

迷信 bbr 的人是被它的大吞吐所迷惑,我也不想再解释,但我得反过来说一下 cubic 并非那么糟。 想搞大吞吐的,看看我这个 pixie 算法:https://github.com/marywangran/pixie,就着它的思路改就是了。 cubic 属于 aimd-ba…

嵌入式C语言高级教程:实现基于STM32的智能健康监测手环

智能健康监测手环能够实时监控用户的生理参数,如心率、体温和活动量,对于健康管理和疾病预防非常有帮助。本教程将指导您如何在STM32微控制器上实现一个基本的智能健康监测手环。 一、开发环境准备 硬件要求 微控制器:STM32L476RG&#xf…

完美撤离暗区突围测试资格获取指南 超简单的暗区突围资格申请

完美撤离!暗区突围测试资格获取指南 超简单的暗区突围资格申请! 最近游戏圈关注度最高的一件事莫过于暗区突围国际服的上线,随着暗区突围PC端的上线,这款游戏的测试资格申请成为了玩家们心头的一个大问题,许多玩家爱不…

二叉树进阶 --- 中

目录 1. find 的递归实现 2. insert 的递归实现 3. erase 的递归实现 3.1. 被删除的节点右孩子为空 3.2. 被删除的节点左孩子为空 3.3. 被删除的节点左右孩子都不为空 4. 析构函数的实现 5. copy constructor的实现 6. 赋值运算符重载 7. 搜索二叉树的完整实现 1. fi…

【Linux】从零开始认识动静态库 -动态库

送给大家一句话: 我不要你风生虎啸, 我愿你老来无事饱加餐。 – 梁实秋 《我把活着欢喜过了》 ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭…

基于CCS5.5的双音多频(DTMF)信号检测仿真实验(①检测型音频文件②输入生成音频并检测)

DTMF的优点 我们知道,DTMF根本上仍然是频谱分析,基础还是DFT,但DFT通常需要对一整段数据做变换,而DTMF不同,每输入一个采样点就计算一次,更有利于硬件实现。 基于CCS的双音多频(DTMF)信号检测原理 公式详细推导 详细的公式推导在下面这篇博客中已经进行了详细的描述,…

示例十、红外遥控器

通过以下几个示例来具体展开学习,了解红外遥控器原理及特性,学习红外遥控器的应用(干货版): 示例十、红外遥控器 ino文件源码: //Arduino C demo #include "IRremote.h"IRrecv irrecv(4); decode_results …

python自动化办公的代码

以下是一个简单的Python自动化办公代码示例,用于实现一些基本的自动化任务,例如打开文件、读取数据、写入数据和保存文件等。 python import os # 打开文件 def open_file(filename): try: file open(filename, r) data file.read() file.close() ret…

词令蚂蚁庄园今日答案如何在微信小程序查看蚂蚁庄园今天问题的正确答案?

词令蚂蚁庄园今日答案如何在微信小程序查看蚂蚁庄园今天问题的正确答案? 1、打开微信,点击搜索框; 2、打开搜索页面,选择小程序搜索; 3、在搜索框,输入词令搜索点击进入词令微信小程序; 4、打开…

验证码生成--kaptcha

验证码生成与点击重新获取验证码 如图所示&#xff0c;本文档仅展示了验证码的生成和刷新显示。 1. 概述 系统通过生成随机验证码图像和文本。 2. 代码分析 2.1. Maven依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptch…

OpenCV-android-sdk配置及使用(NDK)

opencv官网下载Android版Releases - OpenCV 下载好OpenCV-android-sdk并解压好,然后新建一个jni文件夹测试,测试项目目录结构如下: ├── jni │ ├── Android.mk │ ├── Application.mk │ └── test.cpp Application.mk: APP_STL := c++_static APP_CPP…