527|1

76

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

《CMake 构建实战-项目开发卷》实战分享4—基于onnxruntime的手写数字识别库 [复制链接]

本帖最后由 CoderX9527 于 2024-11-5 17:02 编辑
 

简介

这是本书的最后一个章节,融合前面模块、库搜寻、调用第三方库的知识,并基于 ONNX runtime 写一个手写数字识别的命令行工具。

ONNX runtime 安装

ONNX runtime 的官方地址如下
ONNX Runtime 是一种跨平台的推理和训练机器学习加速器。通过使用 ONNX runtime 进行推理,可以实现更快的客户体验并降低陈本,并支持诸如 PyTorch、TensorFlow/Keras 等深度学习框架以及诸如 sckit-learn、LightGBM 和 XGBoost 等经典机器学习库。 ONNX Runtime 兼容不同的硬件、驱动程序和操作系统,并利用使用的硬件加速器和图形优化与转换来提供最佳性能。

安装并检验库(最新版本失败,低版本成功)

这里下载当前最新的预编译包 onnxruntime-linux-x64-1.20.0.tgz,来源于 https://github.com/microsoft/onnxruntime/releases
下载适用于 linux-x64 平台的压缩包,并解压到如下目录:
ch009 目录下编译失败: 应该和 c++ 版本与编译有关。暂时不折腾了。

低版本编译成功

下载和作者一样的 onnxruntime-linux-x64-1.10.0.tgz ,解压到对应目录。
运行提示 Load model failed,符合书本上的描述。

zlib 库的编译和安装

zlib 的 github 链接 https://github.com/madler/zlib

编译

在 zlib 源码路径中新建 build-release 目录,进入,然后 cmake 配置并开始编译。
mkdir build-release
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . –config Release

安装

cmake --install . 失败,需要以管理员权限安装
sudo cmake --install . 安装成功

libpng 库的编译和安装

编译

在源码目录中新建一个 build-release 目录,在此目录中编译
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . –-config Release

安装

cmake --install . 安装失败,需要管理员权限
sudo cmake --install . 安装成功

手写库示例

此目录程序是一个调用手写数字识别库的应用程序,依赖上面三个库。

CMake 目录程序

设置工程属性

以上命令设置 CMake 目录程序的工程属性。

查找软件包 onnxruntime

这里指定 onnxruntime 版本为 1.10.0 用户可以根据下载的实际版本进行修改。
第17行查找 onnxruntime 包并指定版本号为 1.10.实际会调用 cmake/Findonnxruntime.cmake 文件。它的内容如下:
最终设置 onnxruntime_INCLUDE_DIR 、onnxruntime_LIBRARIES 两个变量。

查找软件包 libpng

在 CMakeLists.txt 的第18行。
它实际会调用 cmake/Findlibpng.cmake 文件,它的内容如下:
注意,它会继续在系统中找 libpng16.cmake 模块文件,即此文件是对 libpng16.cmake 文件的封装,导出了 libpng_LIBRARY 和 libpng_INCLUDE_DIR 两个变量。
注意,libpng16.cmake 文件路径在 /usr/local/lib/libpng/libpng16.cmake 。是上面libpng 安装的。

生成出错

出错,提示 png_shared 接口目标包含 ZLIB:ZLIB 没有找到。

ZLIB:ZLIB 解决办法

修改 /usr/local/lib/libpng/libpng16.cmake 文件
以管理员权限打开此文件,屏蔽包含 ZLIB:ZLIB 的两个语句,如下图所示:
cmake 配置并编译,成功
mkdir build-debug
cd build-debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . --config Debug

运行结果—有对有错

命令行运行 ./recognize ../models/mnist.onnx ../2.png
分别识别 2.png/3.png/4.png 均识别成功。
这里的 2.png/3.png/4.png 均是作者提供的原始图片。
以下是我提供的图片 8.png/9.png/0.png,图片尺寸和2.png 相同,111x131 像素大小。
运行结果如下:0/8 识别正确,9 识别错误(识别为1)。
又提供了一张粗体的 9_bold.png 图片,识别结果还是出错,识别成了7.

此帖出自编程基础论坛
点赞 关注
个人签名

点个灯吧

 

回复
举报

76

帖子

2

TA的资源

一粒金砂(中级)

沙发
 
#聊一聊# 为什么0/9 两张图片识别失败呢?
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表