【树莓派4B】MindSpore lite 部署demo
一个demo,mindspore lite 部署在树莓派4B ubuntu22.04中,为后续操作开个门!

环境
- 开发环境:wsl-ubuntu22.04分发版
- 部署环境:树莓派4B,操作系统为ubuntu22.04
- mindspore lite版本:mindspore-lite-2.4.1-linux-aarch64.tar.gz
- demo模型:mnist手写数字识别
步骤
1. 准备交叉编译环境
- 安装交叉编译器
sudo apt install gcc-aarch64-linux-gnu
# 验证是否安装成功
(base) joke@ShineZhang:~/mindspore_deploy_demo_aarch64$ aarch64-linux-gnu-gcc --version
aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- 设置交叉编译环境
# file: toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
2. 下载demo并交叉编译
- 下载
# 有用的话给个star呗
git clone https://gitee.com/Shine_Zhang/mindspore_aarch64_runtime_demo.git
- 文件结构说明:
.
├── CMakeLists.txt
├── README.md
├── build.sh # 执行编译
├── main.c
├── model
│ └── mnist.ms # mnist模型文件
└── toolchain.cmake # 编译工具链
- 模型文件转换:
MindSpore Lite端侧模型转换
执行交叉编译:
chomd +x build.sh
./build.sh
3. 部署环境配置
- 准备环境
编译后目录如下:
.
├── CMakeLists.txt
├── README.md
├── bin
│ └── mindspore_mnist_demo # es
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── Makefile
│ ├── bin
│ ├── cmake_install.cmake
│ ├── mindspore-lite-2.4.1-linux-aarch64
│ ├── mindspore-lite-2.4.1-linux-aarch64.tar.gz
│ ├── mindspore_mnist_demo
│ └── mindspore_quick_start_c
├── build.sh
├── include
│ ├── api
│ ├── c_api
│ ├── dataset
│ ├── ir
│ ├── kernel_interface.h
│ ├── mindapi
│ ├── registry
│ ├── schema
│ └── third_party
├── lib
│ ├── libmindspore-lite.so # es
│ ├── libmindspore_glog.so -> /home/mindspore_deploy_demo_aarch64/lib/libmindspore_glog.so.0
│ └── libmindspore_glog.so.0 # es
├── main.c
├── model
│ └── mnist.ms # es
└── toolchain.cmake
将目录中标记es的文件拷贝至要部署的树莓派4B中
- 配置运行环境
将libmindspore-lite.so和libmindspore_glog.so.0拷贝至/usr/local/lib
# 编辑~/.bashrc 增加环境变量
vim ~/.bashrc# ~/.bashrc 末尾增加以下内容后保存:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH# 重新加载当前用户的 ~/.bashrc 配置文件
source ~/.bashrc# 检验动态库是否加载成功
joke in ~ λ ldd mindspore_mnist_demolinux-vdso.so.1 (0x0000ffffb580b000)libmindspore-lite.so => /usr/local/lib/libmindspore-lite.so (0x0000ffffb5040000)libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffffb4e90000)/lib/ld-linux-aarch64.so.1 (0x0000ffffb57d2000)libmindspore_glog.so.0 => /usr/local/lib/libmindspore_glog.so.0 (0x0000ffffb4e30000)libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000ffffb4e10000)libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000ffffb4be0000)libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffffb4b40000)libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000ffffb4b10000)libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000ffffb4af0000)
4. 执行demo
joke in ~ λ ./mindspore_mnist_demo mnist.ms
----------------------------------------------------------
Model Inputs (1):Input 0:Name: serving_default_keras_tensor:0Shape: [1, 28, 28]Data Type: 43Data Size: 3136 bytesModel Outputs (1):Output 0:Name: StatefulPartitionedCall_1:0Shape: [-1]Data Type: 43Data Size: 0 bytesEstimated Model Size: 3136 bytes
----------------------------------------------------------
inputs: Tensor 1:
Tensor shape: [1, 28, 28]
outputs: Tensor 1:
Tensor shape: [1, 10]
outputs[1]: -5.782
outputs[2]: 0.069
outputs[3]: 1.802
outputs[4]: -12.207
outputs[5]: -7.331
outputs[6]: -18.879
outputs[7]: 6.847
outputs[8]: -5.083
outputs[9]: -4.575
Predicted digit: 7 # 预测结果为数字 7相关文章:
【树莓派4B】MindSpore lite 部署demo
一个demo,mindspore lite 部署在树莓派4B ubuntu22.04中,为后续操作开个门! 环境 开发环境:wsl-ubuntu22.04分发版部署环境:树莓派4B,操作系统为ubuntu22.04mindspore lite版本:mindspore-li…...
Idea汉化插件Datagrip汉化插件
汉化插件 Chinese (Simplified) Language Pack / 中文语言包 插件地址 安装完了之后,如果还不是中文的怎么办 需要手动设置 Seetings -> Appearance & Behavior -> System Settings -> Language and Region -> Language 修改为 [ Chi…...
精彩回顾|Cocos开发者沙龙长沙站
长沙-不一样 Cocos 开发者沙龙长沙站,完全超出了我们的预期,一开始还担心没有太多人报名。最后发现,全场爆满,座无虚席。 <<< 左右滑动见更多 >>> 许多小伙伴曾反馈过,在以往的开发者沙龙回顾文章中…...
算法日记 49 day 图论(A*算法)
这算是算法的最后一篇了,原本A*之前还有一些相关的最短路径算法的,比如dijkstra的堆优化,SPFA等等,但是有些我没看懂,就不写了,用A*做个结尾。 题目:骑士的攻击 127. 骑士的攻击 (kamacoder.co…...
服务器批量清理redis keys,无法适用客户端必须直连的情况
在 Redis 中,批量清理指定模式的键(例如 memberCardData:*)可以通过多种方法来实现。需要注意的是,Redis 的命令执行是单线程的,因此对大量键进行操作时可能会阻塞服务器。以下是几种常见的方法: shell K…...
Grafana配置告警规则推送企微机器人服务器资源告警
前提 已经部署Grafana,并且dashboard接入数据 大屏编号地址:Node Exporter Full | Grafana Labs 创建企微机器人 备注:群里若有第三方外部人员不能创建 机器人创建完成,记录下来Webhook地址 Grafana配置告警消息模板 {{ define &…...
数字货币金融研究,深度学习虚拟币价格预测 数据集 市值top20 (2014年—2024年)
比特币,以太坊,狗狗币,屎币,模因币 声明 此数据集的目的是 用于数字货币金融研究,深度学习虚拟币价格预测 1、数据集 2014年——2024年 市值top20 比特币,以太坊,屎币,狗狗币交易…...
druid.properties图标是齿轮
一、问题 在IDEA中, druid.properties图标是齿轮 二、原因 2023版本开始,IDEA新的UI的问题 三、解决方法 1、点击右上角的齿轮图标 2、点击Settings 3、Appearance & Behavior---->New UI---->取消勾选“Enable new UI”---->右下角OK 4…...
【图像处理】利用numpy、opencv、python实现车牌检测
| 利用opencv实现车牌检测 整体流程涉及5个部分 图像通道转换对比度增强边缘连接二值化边界区域裁剪 图像通道转换 将RGB图像转换为HSV图像,仅保留V通道。V通道表示颜色的明暗,常用于图像对比度拉伸、直方图均衡化等流程。 原图像: V通…...
ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor‘
问题: 运行代码时,报错: … File “/home/xzy/anaconda3/envs/groundinggpt/lib/python3.10/site-packages/pytorchvideo/transforms/augmix.py”, line 6, in from pytorchvideo.transforms.augmentations import ( File “/home/xzy/anac…...
Android无障碍服务监听实现自动点击按钮
原理: 通过监听窗口改变事件,监听目标应用,通过视图ID(或文本、或描述、或其他如坐标之类的)找到目标视图,使用无障碍动作点击方法点击它 无障碍服务实现: 1、写一个自己的无障碍服务继承Acc…...
Deveco Studio首次编译项目初始化失败
编译项目失败 Ohpm install失败的时候重新使用管理者打开程序 build init 初始化失败遇到了以下报错信息 Installing pnpm8.13.1... npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/pnpm failed, r…...
Redis缓存应用场景【Redis场景上篇】
文章目录 1.缓存基础2.缓存异步场景1.缓存穿透2.缓存击穿3.缓存雪崩总结 3.缓存一致性 1.缓存基础 Redis由于性能高效,通常可以做数据库存储的缓存。一般而言,缓存分为服务端缓存和客户端缓存。缓存有以下三种模式: Cache Aside(…...
线程与进程基础
文章目录 前言一、 线程与进程1.1 什么是线程与进程?1.2 并发与并行1.3 同步调用与异步调用1.4 为什么要使用多线程? 前言 在学习juc前,需要先对进程和线程之间整体有一个认知。我们之前或多或少接触过,一些特别高大上的概念&…...
electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题
electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题 这篇文章是接我cocos专栏的上一篇文章继续写的,我上一篇文章写的是 cocos 开发触摸屏项目,需要嵌入一个网页用来展示,最后通过 electron 打包成 exe 程序,而且网页里面…...
OpenCV的简单练习
1、读取一张彩色图像并将其转换为灰度图。 import matplotlib.pyplot as pltimg plt.imread("./flower.png") # 灰度化 img_gray img[:,:,0]*0.299 img[:,:,1]*0.587 img[:,:,2]*0.114plt.subplot(121) plt.imshow(img) plt.subplot(122) plt.imshow(img_gray,c…...
JAVA:建造者模式(Builder Pattern)的技术指南
1、简述 建造者模式(Builder Pattern)是一种创建型设计模式,它通过将对象的构造过程与表示分离,使得相同的构造过程可以创建不同的表示。建造者模式尤其适用于创建复杂对象的场景。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 本文将详细介绍建…...
12.11函数 结构体 多文件编译
1.脑图 定义一个数组,用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息,删除后调用显示学生信息函数 显示 4> 封…...
Debezium系列之:使用Debezium采集oceanbase数据库
Debezium系列之:使用Debezium采集oceanbase数据库 一、oceanbase数据库二、安装OceanBase三、安装oblogproxy四、基于Docker的简单采集案例五、生产实际应用案例Debezium 是一个开源的分布式平台,用于监控数据库变化和捕捉数据变动事件,并以事件流的形式导出到各种消费者。D…...
VMware虚拟机 Ubuntu没有共享文件夹的问题
在虚拟机的Ubuntu系统中,共享文件目录存放在 mnt/hgfs 下面,但是我安装完系统并添加共享文件后发现,在mnt下连/hgfs目录都没有。 注意:使用共享文件目录需要已安装VMtools工具。 添加共享文件目录 一:在超级用户下 可…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
