东哥教你如何用Orange Ai pro为家里做一个垃圾分类检测机器

news2024/11/20 15:33:40

前言

最近入手了一块香橙派(Orange Ai Pro)的板子,他们的口号是:为AI而生,这让一个算法工程师按捺不住了, 之前主要是在RKNN和ESP32等设备上部署AI模型,看到官方介绍的强大AI算力,很想知道能否满足工作生活中的实时视频流模型部署,也为未来公司的战略部署多做一份准备。

AIpro是一款采用昇腾AI技术路线的强大开发板,配备4核64位处理器, 8GB的LPDDR4X内存,就足以满足大部分的AI推理应用场景,AI Pro 配备8TOPS-12TOPS的AI算力,相当于英伟达的RTX3080显卡,同时很多车企早期L2级自动驾驶的算力需求也才2-2.5TOPS,所以在AI 算力方面完全是充足的。

同时开发板支持外接eMMC模块,从32GB到256GB, 充足的存储空间能够满足日常开发所需。

AI Pro还支持外接4K的高清显示器,能够利用HDMI帮我们更好的可视化操作,大大提升了开发体验,只需要自带一个小的显示屏,便可以做一台便携mini电脑。

更多的开发板信息可以参考下面的这个硬件配置图

准备

  1. 一块Orange Ai Pro
    相关的硬件资料可参考:Orange Ai Pro 介绍和应用
    购买地址: 淘宝 、京东

  2. 一个USB 摄像头
    主要用于实时检测素材

  3. 外接鼠标、键盘

  4. 显示器
    用于可视化操作Orange Ai Pro

镜像烧录

需要下载官方的烧录工具, 将镜像烧录到存储卡内,官方镜像地址:下载地址

开机登录

接好设备后,就可以点击开机按钮, 我这边的设备主要是1个摄像头,1块32G的存储卡,系统这边用的是Ubuntu系统,比较适合个人的习惯

环境准备

配置编译依赖的头文件与库文件路径

export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest 
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub

安装ACLLite库和ffmpeg

Tips: ACLLite是必备的库文件

apt-get install ffmpeg libavcodec-dev libswscale-dev libavdevice-dev

获取ACLLite 源码

git clone https://gitee.com/ascend/ACLLite.git

进入到项目目录进行编译, 会编译到上面设置的lib 目录

bash build_so.sh

到这里环境的基本配置已经完成了,接下来就是代码的准备和编译了

官方的Ai Demo项目

git clone https://gitee.com/ascend/EdgeAndRobotics.git

这是官方提供的sample demo ,里面有基础的图像检测,分类,人脸识别等demo,可以帮助我们快速上手,同时也适合在源码上根据需要进行二次修改。

模型转换

Orange Ai pro 需要的是.om的格式,我们需要把pt 的模型转成onnx 再利用平台的 Atc工具转成.om的格式

什么是ATC
昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是昇腾CANN架构体系下的模型转换工具,类似RKNN或hisi 都有自己处理器需要的模型格式,CANN架构也不例外。

  • 它可以将开源框架的网络模型(例如TensorFlow、ONNX等)转换为昇腾AI处理器支持的模型文件(.om格式),用于后续的模型推理

  • 它可以将基于Ascend IR定义的单算子描述文件(*.json格式)转换为昇腾AI处理器支持的模型文件(.om格式),后续在整网中验证算子功能

如何转换

atc --model=yolov5s.onnx --framework=5 --output=yolov5s --input_shape="images:1,3,640,640"  --soc_version=Ascend310B4  --insert_op_conf=aipp.cfg

–framework:原始网络模型框架类型,5表示onnx。
–soc_version:模型转换时昇腾AI处理器的版本,例如Ascend310B1。
–model:原始网络模型文件,含扩展名。
–weight:原始网络模型权重文件路径,含文件名,仅当原始网络模型是Caffe时需要指定。
–output:转换后的*.om模型文件路径,含文件名,转换成功后,模型文件名自动以.om后缀结尾
–insert_op_conf: 模型相关的配置文件,包含图像大小,预处理等参数

tips: 内存小于8G最好将atc 的进程数减少,否则转换可能会报错

export TE_PARALLEL_COMPILER=1
export MAX_COMPILE_CORE_NUMBER=1

你也可以下载官方的yolov5 模型

#下载yolov5s的模型和转换模型
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/yolov5s.onnx --no-check-certificate
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/aipp.cfg --no-check-certificate

搭建Orange Ai Pro 垃圾检测项目

在源码demo中,进入到/ Samples / YOLOV5USBCamera / python/src中,可以看到核心的实现代码, 基本上官方已经很好的把模型的加载和推理等模块, 只需要稍加修改就能变成自己需要的。

class sampleYOLOV7(object):
    '''load the model, and do preprocess, infer, postprocess'''
    def __init__(self, model_path, model_width, model_height):
        self.model_path = model_path
        self.model_width = model_width
        self.model_height = model_height

    def init_resource(self):
        # initial acl resource, create image processor, create model
        self._resource = AclLiteResource()
        self._resource.init()
    
        self._dvpp = AclLiteImageProc(self._resource) 
        self._model = AclLiteModel(self.model_path)

    def preprocess(self, frame):
        # resize frame, keep original image
        self.src_image = frame
        self.resized_image = cv2.resize(frame, (self.model_width, self.model_height))

    def infer(self):
        # infer frame
        image_info = np.array([640, 640,
                            640, 640],
                            dtype=np.float32)
        self.result = self._model.execute([self.resized_image, image_info])

也可以参考这个官方项目: https://gitee.com/ascend/samples/tree/master/python/contrib/garbage_picture

模型准备

利用yolov5 代码训练出垃圾分类的模型, yolov5 源码可以在github 下载。
我这里是利用了之前公司做的垃圾分类数据集训练的垃圾分类模型,训练数据总共19000张,验证集3000张,准确率92%。

运行export导出onnx模型,拷贝到orange ai pro里。

转换模型

将我们的模型转成om的格式,参考上面的模型转换内容。

这里可以直接用官方的python版本进行修改

/home/HwHiAiUser/project/EdgeAndRobotics/Samples/YOLOV5USBCamera/python/

编写index.py, 加入自己的预处理和后处理逻辑

def preprocess_image(image, cfg, bgr2rgb=True):
    """图片预处理"""
    img, scale_ratio, pad_size = letterbox(image, new_shape=cfg['input_shape'])
    if bgr2rgb:
        img = img[:, :, ::-1]
    img = img.transpose(2, 0, 1)  # HWC2CHW
    img = np.ascontiguousarray(img, dtype=np.float32)
    return img, scale_ratio, pad_size


def draw_bbox(bbox, img0, color, wt, names):
    """在图片上画预测框"""
    det_result_str = ''
    for idx, class_id in enumerate(bbox[:, 5]):
        if float(bbox[idx][4] < float(0.05)):
            continue
        img0 = cv2.rectangle(img0, (int(bbox[idx][0]), int(bbox[idx][1])), (int(bbox[idx][2]), int(bbox[idx][3])),
                             color, wt)
        img0 = cv2.putText(img0, str(idx) + ' ' + names[int(class_id)], (int(bbox[idx][0]), int(bbox[idx][1] + 16)),
                           cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
        img0 = cv2.putText(img0, '{:.4f}'.format(bbox[idx][4]), (int(bbox[idx][0]), int(bbox[idx][1] + 32)),
                           cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
        det_result_str += '{} {} {} {} {} {}\n'.format(
            names[bbox[idx][5]], str(bbox[idx][4]), bbox[idx][0], bbox[idx][1], bbox[idx][2], bbox[idx][3])
    return img0

在完成推理后,输出模型的推理结果同时保存推理图像

3
有害垃圾
1
厨余垃圾
2
其他垃圾
4
可回收垃圾
1
厨余垃圾
4
可回收垃圾

经过测试发现,推理一张图像耗费的时间大约为16-20ms之间,后续还有优化的空间

 handler img 18.02ms
 hanlder img 16.01ms
 handler img 19.92ms

使用总结

1、开发流程和官方文档较为完善,整个流程还是比较顺畅的,降低了使用的学习成本。
2、同时在AI算力上,推理的速度也非常给力,npu的推理速度可以满足大部分的实时处理需求,能够满足我做一些diy的智能家居方向。
3、丰富的硬件功能,Orang ai pro 配备了丰富的硬件接口,给开发更复杂的AI应用提供了更多可能性。

总体来说,Orang AI Pro 强大的AI能力和便捷的使用体验,还是给我留下了美好的印象,未来我也希望能通过Orange AI Pro 创作出更多的AI应用。

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

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

相关文章

入门PHP就来我这(纯干货)08

~~~~ 有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 ~~~~ 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 1 PHP对象的高级应用 1.1 final关键字 final 最终的、最后的。被final修饰过的类…

如何在电脑设备上恢复已删除的照片

丢失 PC、智能手机或 USB 闪存盘上的照片可能会让人不知所措。幸运的是&#xff0c;使用最好的照片恢复软件&#xff0c;您可以在 Windows 和 Android 上恢复已删除的照片。本博客讨论如何使用照片恢复来恢复丢失的照片。 数码照片是我们记忆的重要组成部分。然而&#xff0c;它…

UE4_材质基础_切线空间与法线贴图

学习笔记&#xff0c;不喜勿喷&#xff0c;侵权立删&#xff0c;祝愿大家生活越来越好&#xff01; 一、切线空间 在《OpenGL基础11&#xff1a;空间》中提到了观察空间、裁剪空间、世界空间等。切线空间和它们一样&#xff0c;都属于坐标空间 上面就是一个…

FPGA的理解,个人的见解,不一定对

类似于面包板上搭建电路&#xff0c;但是使用的是逻辑单元模块&#xff1b;如加法器&#xff0c;减法器&#xff0c;寄存器等 没有模拟电路的电容&#xff0c;电阻&#xff1b;但是逻辑单元的底层实现&#xff0c;使用MOS管等电路实现电路的开关&#xff1b;从而表示0&#xf…

springai+pgvector+ollama实现rag

首先在ollama中安装mofanke/dmeta-embedding-zh:latest。执行ollama run mofanke/dmeta-embedding-zh 。实现将文本转化为向量数据 接着安装pgvector&#xff08;建议使用pgadmin4作为可视化工具&#xff0c;用navicate会出现表不显示的问题&#xff09; 安装好需要的软件后我们…

【python】OpenCV—Nighttime Low Illumination Image Enhancement

文章目录 1 背景介绍2 代码实现3 原理分析4 效果展示5 附录np.ndindexnumpy.ravelnumpy.argsortcv2.detailEnhancecv2.edgePreservingFilter 1 背景介绍 学习参考来自&#xff1a;OpenCV基础&#xff08;24&#xff09;改善夜间图像的照明 源码&#xff1a; 链接&#xff1a…

vue2 webpack使用optimization.splitChunks分包,实现按需引入,进行首屏加载优化

optimization.splitChunks的具体功能和配置信息可以去网上自行查阅。 这边简单讲一下他的使用场景、作用、如何使用&#xff1a; 1、没用使用splitChunks进行分包之前&#xff0c;所有模块都揉在一个文件里&#xff0c;那么当这个文件足够大、网速又一般的时候&#xff0c;首…

原厂商是什么意思?云管平台原厂商有哪些企业?

最近不少IT小伙伴在问关于原厂商相关问题&#xff0c;今天我们就来简单回答一下&#xff0c;仅供参考&#xff01; 原厂商是什么意思&#xff1f; 原厂商&#xff0c;或称原厂&#xff0c;是指生产特定产品或零部件的原始厂家。 软件原厂商是什么意思&#xff1f; 软件原厂…

课设:选课管理系统(Java+MySQL)

在本博客中&#xff0c;我将介绍用Java、MySQL、JDBC和Swing GUI开发一个简单的选课管理系统。 技术栈 Java&#xff1a;用于编写应用程序逻辑MySQL&#xff1a;用于存储和管理数据JDBC&#xff1a;用于连接Java应用程序和MySQL数据库Swing GUI&#xff1a;用于构建桌面应用程…

Let‘s Encrypt免费SSL证书申请最简单的步骤

随着互联网的飞速发展&#xff0c;网络安全问题愈发凸显其重要性。而HTTPS协议作为保障网站数据传输安全的重要手段&#xff0c;已经得到了广泛的应用。 申请Lets Encrypt免费泛域名SSL证书步骤 登录来此加密网站&#xff0c;输入域名&#xff0c;可以勾选泛域名和包含根域。…

Appium环境搭建,华为nova8鸿蒙系统(包括环境安装,环境配置)(一)

1.安装代码工具包 appium python client pip install appium-python-client 2.安装JDK 参考链接: ant+jmeter+jenkins从0实现持续集成(Windows)-CSDN博客 3.下载并安卓SDK 下载地址:AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载…

搜维尔科技:详谈ART的工具追踪技术

您的生产流程中是否已经受益于刀具跟踪系统&#xff1f;您是否意识到它们的价值&#xff1f;因为它们可以优化您的装配顺序&#xff0c;从而节省您的时间和金钱。 目前我们提供两种工具跟踪解决方案&#xff1a; 1.ART与 VERPOSE的解决方案——易于使用的图像识别 安装在工…

C语言 | Leetcode C语言题解之第213题打家劫舍II

题目&#xff1a; 题解&#xff1a; int robRange(int* nums, int start, int end) {int first nums[start], second fmax(nums[start], nums[start 1]);for (int i start 2; i < end; i) {int temp second;second fmax(first nums[i], second);first temp;}retur…

[激光原理与应用-97]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 1 - 什么是焊接以及传统的焊接方法

目录 一、什么是焊接 1.1 概述 1.2 基本原理 二、传统的焊接技术与方法 2.1 手工电弧焊&#xff1a; 1、定义与原理 2、特点 3、焊条类型 4、应用领域 5、安全注意事项 2.2 气体保护焊&#xff1a; 1、原理与特点 2、应用领域 3、气体选择 4、注意事项 2.3 电阻…

六角法兰面螺栓机械性能

六角法兰面螺栓&#xff0c;作为一种常见的紧固件&#xff0c;因其独特的设计和优良的机械性能&#xff0c;在众多工业领域中占据重要地位。与传统的六角头螺栓相比&#xff0c;六角法兰面螺栓的底部有一个扁平的法兰面&#xff0c;能够提供更大的接触面积&#xff0c;分散压力…

[leetcode] n个骰子的点数

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<double> statisticsProbability(int num) {vector<double> dp(6, 1.0 / 6.0);for (int i 2; i < num; i) {vector<double> tmp(5 * i 1, 0);for (int j 0; j < dp.size()…

算法day02 回文 罗马数字转整数

回文 搞错了String类型的indexOf方法&#xff0c;理解成获取对应下标的值&#xff0c;实际上是在找对应值的下标。 4ms 耗时最少的方法尽量不会去调用jdk提供的方法&#xff0c;而是直接使用对应的数学逻辑关系来处理&#xff0c; 甚至用 代替equals方法。 罗马数字转整数 考…

西安石油大学 课程习题信息管理系统(数据库课设)

主要技术栈 Java Mysql SpringBoot Tomcat HTML CSS JavaScript 该课设必备环境配置教程&#xff1a;&#xff08;参考给出的链接和给出的关键链接&#xff09; JAVA课设必备环境配置 教程 JDK Tomcat配置 IDEA开发环境配置 项目部署参考视频 若依框架 链接数据库格式注…

使用Python脚本实现SSH登录

调试IDE&#xff1a;PyCharm Python库&#xff1a;Paramiko 首先安装Paramiko包到PyCharm&#xff0c;具体步骤为&#xff1a;在打开的PyCharm工具中&#xff0c;选择顶部菜单栏中“File”下的“Settings”&#xff0c;在设置对话框中&#xff0c;选择“Project”下的“Proje…

taoCMS v3.0.2 文件上传漏洞(CVE-2022-23880)

前言 CVE-2022-23880是一个影响taoCMS v3.0.2的任意文件上传漏洞。攻击者可以利用此漏洞通过上传特制的PHP文件在受影响的系统上执行任意代码。 漏洞细节 描述: 在taoCMS v3.0.2的文件管理模块中存在任意文件上传漏洞。攻击者可以通过上传恶意的PHP文件来执行任意代码。 影响…