部署yolo到k230教程

训练:K230 借助 AICube部署AI 视觉模型 YOLO等教程_嘉楠 ai cube多标签分类-CSDN博客K230模型训练ai cube报错生成部署文件异常_aicube部署模型显示生成部署文件异常-CSDN博客

部署:

# 导入必要的库和模块
import os
import ujson          # 超快的JSON解析库
import aicube         # AI加速库
from media.sensor import *    # 摄像头传感器相关
from media.display import *   # 显示相关
from media.media import *     # 媒体处理基础库
from time import *            # 时间相关
import nncase_runtime as nn   # 神经网络运行时库
import ulab.numpy as np       # 嵌入式优化的numpy替代库
import time
import utime                  # 更精确的时间库
import image                  # 图像处理
import random
import gc                     # 垃圾回收
import utime# 显示模式配置(LCD或HDMI)
display_mode="lcd"
if display_mode=="lcd":DISPLAY_WIDTH = ALIGN_UP(800, 16)  # 对齐到16的倍数(硬件要求)DISPLAY_HEIGHT = 480
else:DISPLAY_WIDTH = ALIGN_UP(1920, 16)DISPLAY_HEIGHT = 1080# RGB888输出分辨率配置
OUT_RGB888P_WIDTH = ALIGN_UP(1080, 16)
OUT_RGB888P_HEIGH = 720# 预定义的80种颜色(ARGB格式),用于不同类别的检测框显示
# 颜色盘
color_four = [(255, 220, 20, 60), (255, 119, 11, 32), (255, 0, 0, 142), (255, 0, 0, 230),(255, 106, 0, 228), (255, 0, 60, 100), (255, 0, 80, 100), (255, 0, 0, 70),(255, 0, 0, 192), (255, 250, 170, 30), (255, 100, 170, 30), (255, 220, 220, 0),(255, 175, 116, 175), (255, 250, 0, 30), (255, 165, 42, 42), (255, 255, 77, 255),(255, 0, 226, 252), (255, 182, 182, 255), (255, 0, 82, 0), (255, 120, 166, 157),(255, 110, 76, 0), (255, 174, 57, 255), (255, 199, 100, 0), (255, 72, 0, 118),(255, 255, 179, 240), (255, 0, 125, 92), (255, 209, 0, 151), (255, 188, 208, 182),(255, 0, 220, 176), (255, 255, 99, 164), (255, 92, 0, 73), (255, 133, 129, 255),(255, 78, 180, 255), (255, 0, 228, 0), (255, 174, 255, 243), (255, 45, 89, 255),(255, 134, 134, 103), (255, 145, 148, 174), (255, 255, 208, 186),(255, 197, 226, 255), (255, 171, 134, 1), (255, 109, 63, 54), (255, 207, 138, 255),(255, 151, 0, 95), (255, 9, 80, 61), (255, 84, 105, 51), (255, 74, 65, 105),(255, 166, 196, 102), (255, 208, 195, 210), (255, 255, 109, 65), (255, 0, 143, 149),(255, 179, 0, 194), (255, 209, 99, 106), (255, 5, 121, 0), (255, 227, 255, 205),(255, 147, 186, 208), (255, 153, 69, 1), (255, 3, 95, 161), (255, 163, 255, 0),(255, 119, 0, 170), (255, 0, 182, 199), (255, 0, 165, 120), (255, 183, 130, 88),(255, 95, 32, 0), (255, 130, 114, 135), (255, 110, 129, 133), (255, 166, 74, 118),(255, 219, 142, 185), (255, 79, 210, 114), (255, 178, 90, 62), (255, 65, 70, 15),(255, 127, 167, 115), (255, 59, 105, 106), (255, 142, 108, 45), (255, 196, 172, 0),(255, 95, 54, 80), (255, 128, 76, 255), (255, 201, 57, 1), (255, 246, 0, 122),(255, 191, 162, 208)]# 配置文件路径
root_path="/sdcard/mp_deployment_source/"
config_path=root_path+"deploy_config.json"
deploy_conf={}
debug_mode=1  # 调试模式开关# 性能分析工具类(上下文管理器)
class ScopedTiming:def __init__(self, info="", enable_profile=True):self.info = infoself.enable_profile = enable_profiledef __enter__(self):if self.enable_profile:self.start_time = time.time_ns()return selfdef __exit__(self, exc_type, exc_value, traceback):if self.enable_profile:elapsed_time = time.time_ns() - self.start_timeprint(f"{self.info} took {elapsed_time / 1000000:.2f} ms")# 读取部署配置文件
def read_deploy_config(config_path):with open(config_path, 'r') as json_file:try:config = ujson.load(json_file)  # 使用ujson快速解析except ValueError as e:print("JSON 解析错误:", e)return config# 主检测函数
def detection():print("det_infer start")# 加载部署配置deploy_conf=read_deploy_config(config_path)# 解析配置参数kmodel_name=deploy_conf["kmodel_path"]        # 模型文件路径labels=deploy_conf["categories"]             # 类别标签confidence_threshold= deploy_conf["confidence_threshold"]  # 置信度阈值nms_threshold = deploy_conf["nms_threshold"] # NMS阈值img_size=deploy_conf["img_size"]             # 模型输入尺寸num_classes=deploy_conf["num_classes"]       # 类别数量nms_option = deploy_conf["nms_option"]       # NMS选项model_type = deploy_conf["model_type"]       # 模型类型(AnchorBaseDet等)# 锚点配置(如果是基于锚点的检测模型)if model_type == "AnchorBaseDet":anchors = deploy_conf["anchors"][0] + deploy_conf["anchors"][1] + deploy_conf["anchors"][2]# 图像预处理参数计算kmodel_frame_size = img_size  # 模型输入尺寸frame_size = [OUT_RGB888P_WIDTH,OUT_RGB888P_HEIGH]  # 实际输入尺寸strides = [8,16,32]  # 特征图步长# 计算保持长宽比的缩放参数ori_w = OUT_RGB888P_WIDTHori_h = OUT_RGB888P_HEIGHwidth, height = kmodel_frame_sizeratiow = width / ori_wratioh = height / ori_hratio = min(ratiow, ratioh)  # 选择较小比例保持长宽比new_w = int(ratio * ori_w)new_h = int(ratio * ori_h)# 计算填充参数(居中填充)dw = (width - new_w) / 2dh = (height - new_h) / 2top = int(round(dh - 0.1))bottom = int(round(dh + 0.1))left = int(round(dw - 0.1))right = int(round(dw - 0.1))# 初始化神经网络推理组件kpu = nn.kpu()        # 创建KPU(神经网络加速器)实例ai2d = nn.ai2d()      # 创建AI2D(图像预处理加速器)实例# 加载kmodel模型文件kpu.load_kmodel(root_path+kmodel_name)# 配置AI2D预处理参数ai2d.set_dtype(nn.ai2d_format.NCHW_FMT, nn.ai2d_format.NCHW_FMT, np.uint8, np.uint8)ai2d.set_pad_param(True, [0,0,0,0,top,bottom,left,right], 0, [114,114,114])  # 填充灰色ai2d.set_resize_param(True, nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel)# 构建AI2D预处理流水线ai2d_builder = ai2d.build([1,3,OUT_RGB888P_HEIGH,OUT_RGB888P_WIDTH], [1,3,height,width])# 初始化摄像头传感器sensor = Sensor(id = 1)sensor.reset()# 摄像头参数配置sensor.set_hmirror(False)  # 水平镜像关闭sensor.set_vflip(False)    # 垂直翻转关闭# 配置显示通道(YUV420格式)sensor.set_framesize(DISPLAY_WIDTH, DISPLAY_HEIGHT)sensor.set_pixformat(PIXEL_FORMAT_YUV_SEMIPLANAR_420)# 配置AI处理通道(RGB888格式)sensor.set_framesize(OUT_RGB888P_WIDTH, OUT_RGB888P_HEIGH, chn=CAM_CHN_ID_2)sensor.set_pixformat(PIXEL_FORMAT_RGB_888_PLANAR, chn=CAM_CHN_ID_2)# 绑定显示层sensor_bind_info = sensor.bind_info(x=0, y=0, chn=CAM_CHN_ID_0)Display.bind_layer(**sensor_bind_info, layer=Display.LAYER_VIDEO1)# 初始化显示设备if display_mode=="lcd":Display.init(Display.ST7701, to_ide=True)  # 7寸LCD屏else:Display.init(Display.LT9611, to_ide=True)  # HDMI输出# 创建OSD层用于绘制检测结果osd_img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888)try:MediaManager.init()  # 初始化媒体系统sensor.run()         # 启动摄像头# 初始化AI2D输入输出张量ai2d_input_tensor = Noneai2d_output_tensor = nn.from_numpy(np.ones((1,3,width,height), dtype=np.uint8))# 主循环while True:with ScopedTiming("total", debug_mode > 0):# 捕获图像rgb888p_img = sensor.snapshot(chn=CAM_CHN_ID_2)if rgb888p_img.format() == image.RGBP888:# 转换为numpy格式ai2d_input = rgb888p_img.to_numpy_ref()ai2d_input_tensor = nn.from_numpy(ai2d_input)# 执行预处理(缩放+填充)ai2d_builder.run(ai2d_input_tensor, ai2d_output_tensor)# 模型推理kpu.set_input_tensor(0, ai2d_output_tensor)kpu.run()# 获取输出results = []for i in range(kpu.outputs_size()):out_data = kpu.get_output_tensor(i)result = out_data.to_numpy().flatten()results.append(result)del out_data  # 及时释放内存gc.collect()  # 垃圾回收# 后处理if model_type == "AnchorBaseDet":det_boxes = aicube.anchorbasedet_post_process(...)elif model_type == "GFLDet":det_boxes = aicube.gfldet_post_process(...)else:det_boxes = aicube.anchorfreedet_post_process(...)# 清空OSD层并绘制结果osd_img.clear()if det_boxes:for box in det_boxes:# 坐标转换到显示尺寸x1, y1, x2, y2 = box[2], box[3], box[4], box[5]w = (x2 - x1) * DISPLAY_WIDTH / OUT_RGB888P_WIDTHh = (y2 - y1) * DISPLAY_HEIGHT / OUT_RGB888P_HEIGH# 绘制矩形框osd_img.draw_rectangle(int(x1 * DISPLAY_WIDTH / OUT_RGB888P_WIDTH),int(y1 * DISPLAY_HEIGHT / OUT_RGB888P_HEIGH),int(w), int(h),color=color_four[box[0]][1:]  # 根据类别选择颜色)# 显示OSD层Display.show_image(osd_img, 0, 0, Display.LAYER_OSD3)gc.collect()rgb888p_img = None  # 释放图像引用except Exception as e:print(f"运行异常: {e}")finally:# 资源清理os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)del ai2d_input_tensordel ai2d_output_tensorsensor.stop()        # 停止摄像头Display.deinit()     # 关闭显示MediaManager.deinit()# 释放媒体资源gc.collect()time.sleep(1)nn.shrink_memory_pool()  # 释放神经网络内存print("det_infer end")return 0if __name__=="__main__":detection()

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

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

相关文章

Flask 应用封装成 Docker 服务的完整技术指南

一、实现原理 容器化核心逻辑 Docker 通过将应用代码、运行环境和依赖项打包成镜像,实现环境一致性。Flask 应用容器化需包含: Python 基础运行环境项目代码及依赖库(requirements.txt)WSGI服务器(如 Gunicorn&#xf…

windows上的 Vmware Workstation 环境搭建

本文的视频版本:https://www.bilibili.com/video/BV1JhLRzyESh Vmware Workstation 是一款跨平台的桌面级虚拟化软件,可以使用 Vmware 创建虚拟机,我们一般使用 Linux 虚拟机(目前主流的 Linux 发行版是 Ubuntu)&…

Linux下终端命令行安装常见字体示例

一、准备工作: 准备好要安装的字体文件,如宋体、微软雅黑(simsun.ttc、msyh.ttc)。进入字体路径: /usr/share/fonts,使用root权限,新建一个目录shell_fonts。 二、命令行安装字体: 将要安装…

CentOS中在线安装Docker(超详细)

1)检查安装docker的基本要求: 64位CPU架构的计算机,目前不支持32为CPU架构的计算机 系统的Linux内核版本为3.10及以上 开启CGroups和namespace功能 2)使用命令查看当前系统的内核版本 [rootlocalhost ~]# uname -r 3.10.0-862…

武汉昊衡科技OLI光纤微裂纹检测仪:高密度光器件的精准守护者

随着AI技术应用越来越广,算力需求激增,光通信系统正加速向小型化、高密度、多通道方向演进。硅光芯片、高速光模块等核心器件内部的光纤通道数量成倍增加,波导结构愈发精细,传统检测手段因分辨率不足、效率低下,难以精…

Java数据结构——Stack

Stack 栈的概念和使用栈的概念栈的使用 栈的应用出栈元素序列有效的括号栈的压入、弹出序列逆波兰表达式最小栈 栈的概念和使用 栈的概念 栈(Stack):一种特殊的线性表,只允许再栈的一端进行插入和删除元素,这一端点被称为栈顶,另…

神经网络与计算机视觉

2016 年,随着 AlphaGo 在围棋比赛中击败李世石,“人工智能”、“神经网络”、“深度 学习”等字眼便越来越多的出现在大众眼前,智能化好像成为一种不可逆转的趋势,带给大家新奇感的同时也带来了一丝忧惧:在不远的未来,机器是否真的拥有思维和情感?《终结者》中天网大战人…

VS2019 与gitcode团队管理

1、安装git 点击下一步安装即可 2、vs2019连接gitcode 然后更改本地的代码添加文件等都可以进行远程同步操作了

Python类和对象四(十三)

魔法方法: 按位运算 按位于运算 只要相同才是1 或运算: 只要某个位是1结果就是1 、 按位非 将结果取反 按位异或: 左移和右移运算符: 右移两位 右移动n位,就是除以2的n次方 左移两位: 左移n位就是乘…

如何设置极狐GitLab 议题截止日?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 截止日期 (BASIC ALL) 可以在议题中使用截止日期,来跟踪截止日期并确保功能按时交付。用户至少需要报告者权限才…

如何在 Conda 环境中降级 Python 版本:详细指南

如何在 Conda 环境中降级 Python 版本:详细指南 Python 版本的管理在开发过程中至关重要,特别是在处理不同项目需求时。对于使用 Conda 环境的 Python 程序员来说,版本管理不仅仅是安装不同的 Python 版本,还涉及到依赖关系的兼容…

【随笔】地理探测器原理与运用

文章目录 一、作者与下载1.1 软件作者1.2 软件下载 二、原理简述2.1 空间分异性与地理探测器的提出2.2 地理探测器的数学模型2.21 分异及因子探测2.22 交互作用探测2.23 风险区与生态探测 三、使用:excel 一、作者与下载 1.1 软件作者 作者: DOI: 10.…

使用达梦官方管理工具SQLark快速生成数据库ER图并导出

在数据库设计与开发中,实体-关系图(ER 图)作为数据建模的核心工具,能够直观呈现表结构、字段属性及表间关系,是团队沟通和文档维护的重要工具。然而,对于许多使用达梦数据库的开发者来说,可用的…

单精度浮点运算/定点运算下 MATLAB (VS) VIVADO

VIVADO中单精度浮点数IP核计算结果与MATLAB单精度浮点数计算结果的对比 MATLAB定点运算仿真,对比VIVADO计算的结果 目录 前言 一、VIVADO与MATLAB单精度浮点数运算结果对比 二、MATLAB定点运算仿真 总结 前言 本文介绍了怎么在MATLAB中使用单精度浮点数进行运算…

力扣-141.环形链表

题目描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中存在环 ,则返回 true 。 否则,返回 false 。 class Solution { public:bool hasCycle(ListNode *head) {ListNode *fast head;ListNode *slow head;while (fast! n…

RESTful学习笔记(一)

Web发展 一、API 程序硬件接口(Application Programming Interface),是预先定义好的逻辑函数,软件系统不同组成部分衔接的约定,直接调用函数,无序访问代码细节,分为SDK和Web应用接口两类 SDK…

SD2351核心板:重构AI视觉产业价值链的“超级节点”

在AI视觉技术狂飙突进的当下,一个吊诡的现象正在浮现:一方面,学术界不断刷新着ImageNet等基准测试的精度纪录;另一方面,产业界却深陷“算法有、场景无,技术强、落地难”的怪圈。明远智睿SD2351核心板的问世…

【数据结构】红黑树原理及实现

目录 一. 红黑树的概念1. 红黑树的规则思考 2. 红黑树的效率 二.红黑树的实现1. 红黑树的结构2. 红黑树的插入3. 红黑树的平衡调整情况1:变色情况2:单旋变色情况3:双旋变色 4. 红黑树插入及平衡调整代码实现5.红黑树的验证 一. 红黑树的概念 …

时间复杂度分析

复杂度分析的必要性: 当给我们一段代码时,我们是以什么准则来判断代码效率的高低呢?每一段代码都会消耗一段时间,或占据一段数据空间,那么自然是在实现相同功能的情况下,代码所耗时间最少,所占…

L1-1、Prompt 是什么?为什么它能“控制 AI”?

*Prompt 入门 L1-1 想象一下,你只需输入一句话,AI 就能自动为你写一篇文案、生成一份报告、甚至规划你的创业计划。这种“对话即编程”的背后魔法,就是 Prompt 的力量。 🔍 一、Prompt 的定义与由来 Prompt(提示词&am…