K210视觉识别模块学习笔记7:多线程多模型编程识别

今日开始学习K210视觉识别模块: 图形化操作函数

亚博智能      K210视觉识别模块......  

固件库:        canmv_yahboom_v2.1.1.bin

训练网站:    嘉楠开发者社区

今日学习使用多线程、多模型来识别各种物体

 这里先提前说一下本文这次测试实验的结果吧:
结果是不太成功的,没法同时调用俩个模型进行识别,但单独一条线程还是比较正常的

其次就是有一些不足之处,就是训练集太少了,平均每个物体就30多张图片...

以后如果想识别效果好一点,图片数量要多,使用210拍摄,多角度,多光照条件等

文章提供测试代码讲解、完整代码贴出、测试效果图、完整工程下载

目录

简单的多线程程序:

程序代码:

测试结果:

双线程识别尝试:

修改模型名称示例:

别忘了更改模型名称复制到TF卡:​编辑复制整合代码进线程函数:

测试结果声明:

不注释任何线程: 

 注释掉APPLE的线程:​编辑

网上学习资料贴出:


简单的多线程程序:

之前学习树莓派python编程就接触过多线程编程,这里就不多讲定义函数什么的了,直接贴出文章地址:

树莓派4B学习笔记14:Python多线程编程_线程间的同步通信_(锁‘threading.Lock’)_树莓派4b是否支持多线程-CSDN博客

这部分就简单演示一下简单的双线程 是怎么编程的

程序代码:


import _thread #导入线程模块头文件
import time#定义打印测试 线程函数
def print_test(name):while True:print("hello {}".format(name))time.sleep(1)_thread.start_new_thread(print_test,("1",)) #开启线程1,参数必须是元组
_thread.start_new_thread(print_test,("2",)) #开启线程2,参数必须是元组while True:print_test(3)pass

测试结果:

发现这个定义了双线程的程序其实有三条线程:多出来的是主线程

主线程先运行,然后运行其余线程,这个运行顺序可以变换!

双线程识别尝试:

今天尝试采集训练数据集,然后编程,并同时识别苹果与数字6
数据集-模型-代码都会在文末打包提供下载~~~

注意苹果与数字6的 Kmodul 模型不是同一个,而是俩个分开训练出的模型,分别给俩个线程调用


修改模型名称示例:

之前的文章讲过如何修改部分代码使其适配运行,但这里我们发现它每个训练出的模型貌似都是名称为det.kmodel,因此我要将其作小小修改,将名称变为别的

以识别数字6的模型为例,我将它的模型名称该为了:det_6.kmodel

因此程序中,在加载模型的那一行,也需要进行多一步的改写:

其余的更改在之前的文章中早就提到了,跟着更改就行:

K210视觉识别模块学习笔记5:(嘉楠)训练使用模型_识别人脸_亚博k210-CSDN博客

最后进行上位机测试无误即可:
这里别忘了先把模型文件拖入SD卡~,因为是上位机IDE测试,所以代码文件不需要拖入,改好的代码复制或者在CAN_MV的IDE上打开就好了



测试识别结果图:
感觉识别效果很不稳定,应该是数据集太少的原因``````

对于APPLE识别苹果的模型是同理的.....也先这样修改好在进行单独测试失败无问题即可!


别忘了更改模型名称复制到TF卡:


复制整合代码进线程函数:

这一步就注意一下模型名称都要对应好你修改的名称即可!

import _thread #导入线程模块头文件
import time
import sensor, image, time, lcd, gc, cmath
from maix import KPUlcd.init()                          # Init lcd display
lcd.clear(lcd.RED)                  # Clear lcd screen.# sensor.reset(dual_buff=True)      # improve fps
sensor.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_vflip(True)              # 翻转摄像头
#sensor.set_hmirror(True)            # 镜像摄像头
sensor.skip_frames(time = 1000)     # Wait for settings take effect.
clock = time.clock()                # Create a clock object to track the FPS.#定义APPLE识别线程函数
def APPLE_detect(name):labels = ["APPLE"] #类名称,按照label.txt顺序填写anchor = (2.59, 2.47, 2.84, 3.03, 3.56, 3.44, 3.77, 3.87, 5.31, 4.94) # anchors,使用anchor.txt中第二行的值kpu = KPU()# 从sd或flash加载模型kpu.load_kmodel('/sd/det_APPLE.kmodel')#kpu.load_kmodel(0x300000, 584744)kpu.init_yolo2(anchor, anchor_num=(int)(len(anchor)/2), img_w=320, img_h=240, net_w=320 , net_h=240 ,layer_w=10 ,layer_h=8, threshold=0.6, nms_value=0.3, classes=len(labels))while True:        gc.collect()clock.tick()img = sensor.snapshot()kpu.run_with_output(img)dect = kpu.regionlayer_yolo2()fps = clock.fps()if len(dect) > 0:for l in dect :a = img.draw_rectangle(l[0],l[1],l[2],l[3],color=(0,255,0))info = "%s %.3f" % (labels[l[4]], l[5])a = img.draw_string(l[0],l[1],info,color=(255,0,0),scale=2.0)print(info)del infoa = img.draw_string(0, 0, "%2.1ffps" %(fps),color=(0,60,255),scale=2.0)lcd.display(img)#定义SIX识别线程函数
def SIX_detect(name):   labels = ["six"] #类名称,按照label.txt顺序填写anchor = (1.06, 1.22, 1.36, 1.56, 1.75, 2.03, 2.41, 2.88, 3.58, 4.45) # anchors,使用anchor.txt中第二行的值kpu = KPU()# 从sd或flash加载模型kpu.load_kmodel('/sd/det_6.kmodel')#kpu.load_kmodel(0x300000, 584744)kpu.init_yolo2(anchor, anchor_num=(int)(len(anchor)/2), img_w=320, img_h=240, net_w=320 , net_h=240 ,layer_w=10 ,layer_h=8, threshold=0.6, nms_value=0.3, classes=len(labels))while(True):gc.collect()clock.tick()img = sensor.snapshot()kpu.run_with_output(img)dect = kpu.regionlayer_yolo2()fps = clock.fps()if len(dect) > 0:for l in dect :a = img.draw_rectangle(l[0],l[1],l[2],l[3],color=(0,255,0))info = "%s %.3f" % (labels[l[4]], l[5])a = img.draw_string(l[0],l[1],info,color=(255,0,0),scale=2.0)print(info)del infoa = img.draw_string(0, 0, "%2.1ffps" %(fps),color=(0,60,255),scale=2.0)lcd.display(img)_thread.start_new_thread(APPLE_detect,("1",)) #开启线程1,参数必须是元组    
_thread.start_new_thread(SIX_detect,("1",)) #开启线程2,参数必须是元组     while True:pass 



测试结果声明:

感觉K210的处理运算能力还是有限的:
当我不注释任何线程时,只有APPLE的检测比较正常,
当我把APPLE检测的线程注释掉时,SIX数字又能比较正常地识别到了~~~

其次我的数据集图片数量确实太少了,平均才30多张,识别精度受影响.....

不注释任何线程: 


 

 注释掉APPLE的线程:

 

完整工程下载地址:

https://download.csdn.net/download/qq_64257614/89574163

 
 

网上学习资料贴出:

K210——thread(线程)_k210多线程是什么-CSDN博客

 

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

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

相关文章

视频去水印免费电脑版 pdf压缩在线免费网页版 pdf压缩在线免费 简单工具软件详细方法步骤分享

消除视频中的恼人水印,是许多视频编辑爱好者的常见需求。在这篇文章中,我们将探讨几种视频去水印的技巧,在数字化时代,视频和图片的传播越来越方便,但随之而来的水印问题也让人头疼。本文将为您详细介绍视频剪辑去水印…

捕获会自动消失的消息提示弹窗

如上图,我们会在一些场景碰到会自动消失的消息提示弹窗,一般存在个3-5秒,我们在做UI断言时,需要监测这个弹窗是否会出现,就需要去捕获这个弹窗的位置 我们打开浏览器的开发者模式(F12),找到源码(Sources) …

探索 Redis 不同集群架构的性能与应用

1. 引言 Redis的集群配置成为了提高数据可靠性和服务可用性的关键。本文将带领大家了解Redis的四种主要集群架构,并重点分析哨兵模式和Redis Cluster架构和优势。 2. Redis的四种集群架构 2.1 单实例Redis 使用单个 Redis 实例提供服务。适用于小规模应用&#…

MiniExcel:.NET中处理Excel的高效方案

在.NET开发环境中,处理Excel文件是一项常见的任务,无论是数据导入、导出还是报表生成。传统的解决方案可能存在性能瓶颈或功能限制。MiniExcel作为一个现代、高效的库,为.NET开发者提供了一个强大的工具来简化Excel操作。本文将介绍MiniExcel…

爬虫程序在采集亚马逊站点数据时如何绕过验证码限制?

引言 在电商数据分析中,爬虫技术的应用日益广泛。通过爬虫技术,我们可以高效地获取大量的电商平台数据,这些数据对于市场分析、竞争情报、价格监控等有着极其重要的意义。亚马逊作为全球最大的电商平台之一,是数据采集的重要目标…

【技术升级】Docker环境下Nacos平滑升级攻略,安全配置一步到位

目前项目当中使用的Nacos版本为2.0.2,该版本可能存在一定的安全风险。软件的安全性是一个持续关注的问题,尤其是对于像Nacos这样的服务发现与配置管理平台,它在微服务架构中扮演着核心角色。随着新版本的发布,开发团队会修复已知的…

【解决】ubuntu20.04 root用户无法SSH登陆问题

Ubuntu root用户无法登录的问题通常可以通过修改‌SSH配置文件和系统登录配置来解决。 修改SSH配置文件 sudo vim /etc/ssh/sshd_config 找到 PermitRootLogin 设置,并将其值更改为 yes 以允许root用户通过SSH登录 保存并关闭文件之后,需要重启SSH服务…

【HarmonyOS】实现矩形上下拖动、动态拖拽修改高度

简介 实现一个矩形块上下拖动,并且可以拖动边缘定位点改变矩形块高度。实现效果如下: 代码 Entry Component struct Rec_Page {State penOffsetY: number 0;State offsetX: number 0State offsetY: number 0State positionX: number 0State posi…

Microsoft 官网免费下载安装正版官方增强版 office LSTC (长期支持版) 包含 visio , access

1.进入下方网址: https://www.microsoft.com/en-us/download/details.aspx?id49117 下载文件: officedeploymenttool_17126-20132.exe 现在看到下载链接可能失效了,但是下述步骤任然正确。需要下载文件的可以私信发送。 2.进入下方网址…

家具购物小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,家具分类管理,家具新品管理,订单管理,系统管理 微信端账号功能包括:系统首页,家具新品,家具公告&#xff0…

filament 初使用记录

安装初始化 一、环境准备 官网要的 我安装的 二、下载安装 安装laravel composer create-project --prefer-dist laravel/laravel 项目名称 10.*导入 filament composer require filament/filament注册 filament 管理面板 php artisan filament:install --panels初始化…

vue3前端开发-小兔鲜项目-登录组件的开发表单验证

vue3前端开发-小兔鲜项目-登录组件的开发表单验证&#xff01;现在开始写登录页面的内容。首先这一次完成基础的首页按钮点击跳转&#xff0c;以及初始化一些简单的表单的输入验证。后期还会继续完善内容。 1&#xff1a;首先还是准备好login页面的组件代码内容。 <script …

MySQL基础练习题7-销售分析

题目&#xff1a;报告 2019年春季 才售出的产品。即 仅 在 2019-01-01 &#xff08;含&#xff09;至 2019-03-31 &#xff08;含&#xff09;之间出售的商品。 准备数据 分析数据 方法一&#xff1a;group by having 第一步&#xff1a;先找到要求的列 第二步&#xff1…

CAN转PROFINET网关

型号&#xff1a;TCA-152 &#xff08;上海泗博自动化技术有限公司产品&#xff09; 基本说明&#xff1a;TCA-152可实现 PROFINET网络与CAN网络之间的数据通信。网关在PROFINET网络作为从站&#xff0c;CAN端支持CAN2.0A/CAN2.0B协议&#xff0c;支持对CAN帧进行过滤处理。 …

python 图片转文字、语音转文字、文字转语音保存音频并朗读

一、python图片转文字 1、引言 pytesseract是基于Python的OCR工具&#xff0c; 底层使用的是Google的Tesseract-OCR 引擎&#xff0c;支持识别图片中的文字&#xff0c;支持jpeg, png, gif, bmp, tiff等图片格式 2、环境配置 python3.6PIL库安装Google Tesseract OCR 3、安…

谷粒商城实战笔记-65-商品服务-API-品牌管理-表单校验自定义校验器

文章目录 1&#xff0c;el-form品牌logo图片自定义显示2&#xff0c;重新导入和注册element-ui组件3&#xff0c;修改brand-add-or-update.vue控件的表单校验规则firstLetter 校验规则sort 校验规则 1&#xff0c;el-form品牌logo图片自定义显示 为了在品牌列表中自定义显示品…

最新源支付系统源码 V7版全开源 免授权 附搭建教程

本文来自&#xff1a;最新源支付系统源码 V7版全开源 免授权 附搭建教程 - 源码1688 简介&#xff1a; 最新源支付系统源码_V7版全开源_免授权_附详细搭建教程_站长亲测 YPay是专为个人站长打造的聚合免签系统&#xff0c;拥有卓越的性能和丰富的功能。它采用全新轻量化的界面…

商场导航系统:从电子地图到AR导航,提升顾客体验与运营效率的智能解决方案

商场是集娱乐、休闲、社交于一体的综合性消费空间&#xff0c;随着商场规模的不断扩大和布局的日益复杂&#xff0c;顾客在享受丰富选择的同时&#xff0c;也面临着寻路难、店铺曝光率低以及商场管理效率低下等挑战。商场导航系统作为提升购物体验的关键因素&#xff0c;其重要…

堆的基本实现

一、堆的概念 在提出堆的概念之前&#xff0c;首先要了解二叉树的基本概念 一颗二叉树是节点的有限集合&#xff0c;该集合&#xff1a; 1、或者为空&#xff1b; 2、或者由一个根节点加上两颗分别称为左子树和右子树的两颗子树构成&#xff1b; 堆就是一颗完全二叉树&…