2025年C++中用frugally-deep读取keras的模型并进行预测(详细)

C++中用frugally-deep读取keras的模型并进行预测(详细)简介 frugally deep 是一个用纯 C 写的头文件 只依赖于三个头文件库 FunctionalPl Eigen 和 json frugally deep 可以在 C 语言中调用 keras 生成的模型 用 opencv 或者 PIL 读取图片进行预测 项目地址 https github

大家好,我是讯享网,很高兴认识大家。

简介

frugally-deep 是一个用纯C++写的头文件,只依赖于三个头文件库 FunctionalPlus, Eigen 和 json ,frugally-deep 可以在C++语言中调用keras生成的模型,用opencv或者PIL读取图片进行预测
项目地址

https://github.com/Dobiasd/frugally-deep

常见问题和使用方法

https://github.com/Dobiasd/frugally-deep/blob/master/FAQ.md

安装配置

  • 注:配置过程看起来很长但是关键的操作没多少,力求详细对初学者比较友好。
1.在github上下载https://github.com/Dobiasd/frugally-deep 项目,解压

t1.PNG
讯享网

  • 下载三个依赖头文件解压
    • FunctionalPlus https://github.com/Dobiasd/FunctionalPlus
    • Eigen http://eigen.tuxfamily.org/
    • json https://github.com/nlohmann/json
2. 用vs创建一个空共项目

t3.PNG

3. 把FunctionalPlus, Eigen 和 json的头文件库下载下来解压,将对应文件放入一个include文件夹中

(所需文件的路径看截图的路径框)
egin.PNG

fdeep.PNG

fplus.PNG

json.PNG

  • opencv不想每次都重新配置的话也可以在此一次性配置,方法如下
    opencv.PNG
  • 把这两个文件夹拷贝到include文件夹

最终的include文件夹

include.PNG

  • 把include文件夹移入项目(推荐与load_model.props配置表同级)
    xiangmu.PNG
  • opencv的lib文件,opencv的两个DLL文件拷贝到项目中
    opencvlib2015.PNG
  • opencv的两个DLL文件
    opencvdll2015.PNG

现在的项目文件夹如下

xiangmu2.PNG

4. 新建一个属性表(以后新建项目直接拖进去就不用重新配置了)

t4.PNG

  • 配置包含目录和库目录
    baohan.PNG
  • 配置连接器的附加依赖项
    fujiaku.PNG

5. 创建源文件读取图像并预测

  • cpp源文件
 #include <fdeep/fdeep.hpp> #include <cstdlib> #include<opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc.hpp> #include"time.h" int main() { 
    const char a[62] = { 
    '0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' }; const auto model = fdeep::load_model("mymodel.json"); cv::Mat image = cv::imread("1.bmp"); cv::Size dsize = cv::Size(35, 75); cv::resize(image, image, dsize, 0, 0, cv::INTER_NEAREST); cv::imshow("img", image); cv::waitKey(0); const auto input = fdeep::tensor_from_bytes(image.ptr(), static_cast<std::size_t>(image.rows), static_cast<std::size_t>(image.cols), static_cast<std::size_t>(image.channels()), 0.0f, 1.0f); const auto pre_class = model.predict_class({ 
    input }); std::cout << a[pre_class]; } 

讯享网
  • 把模型.json文件和图片放入项目(由.h5生成.json文件见附录)

最终项目结构

final.PNG

在vs中运行

predict.PNG

完美!!!有没有!!!

附录

.h5转为 .json模型

  • 在下载下来的fdeep文件中有这样一个文件夹
    image.png
  • 把keras生成的模型放入这里,打开cmd或者pawershell(shift+右键)输入下面这条命令就会生成.json模型了。
讯享网python keras_export/convert_model.py mymodel.h5 mymodel.json 
小讯
上一篇 2025-01-28 21:26
下一篇 2025-01-10 14:16

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/34184.html