注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
CoderX9527的个人空间 https://home.eeworld.com.cn/space-uid-1479210.html [收藏] [复制] [分享] [RSS]
日志

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

已有 80 次阅读2024-11-5 16:59 |个人分类:评测

 

简介

这是本书的最后一个章节,融合前面模块、库搜寻、调用第三方库的知识,并基于 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,来源于 javascript:;/releases
下载适用于 linux-x64 平台的压缩包,并解压到如下目录:
ch009 目录下编译失败: 应该和 c++ 版本与编译有关。暂时不折腾了。

低版本编译成功

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

zlib 库的编译和安装

zlib 的 github 链接 javascript:;

编译

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

安装

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

libpng 库的编译和安装

仓库地址:javascript:;

编译

在源码目录中新建一个 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.

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章