1. C++ 和python的混合编程

    • windows + vs

      1. 新建一个工程,在工程属性中添加如下的几个

        C:\Users\[user_name]\Anaconda3\include

        C:\Users\[user_name]\Anaconda3\Lib

        C:\Users\[user_name]\Anaconda3\libs

        具体路径根据自己python的安装情况确定。

      2. 添加附加依赖项 pytyhon36.lib,具体参照自己的文件路径以及python版本

      1. 如果需要在DEBUG下运行,需要修改pyconfig.h文件,我的电脑上的位置为C:\Users\chmtt\Anaconda3\include\pyconfig.h 打开以后在293行,将python36_d.lib修改为python36.lib 即可。如果直接在release下运行无需操作。

      2. 假设需要调用的python脚本为

        默认你已经写好tensorflowpython脚本,并能跑成功。(tensorflow的使用不是本文重点)

        c++需要调用的就是这个classify.py里面的evaluate函数,传入图片路径,返回分类结果给c++程序

        from PIL import Image
        import numpy as np
        import tensorflow as tf def evaluate(pic):
        image = Image.open(pic)
        image = image.resize([256, 256])
        image_array = np.array(image)
        with tf.Graph().as_default():
        #里面就是对图像读取模型,预测,得到prediction……
        max_index = np.argmax(prediction)
        return max_index
      3. C++Demo

        #include <Python.h>
        #include <iostream> int main(int argc, char** argv)
        {
        const char* picpath ="/home/pdd/PD/c++/c++python/pic/0.0.jpg";
        Py_Initialize();
        if ( !Py_IsInitialized() ) {
        return -1;
        }
        PyRun_SimpleString("import sys");
        PyRun_SimpleString("sys.path.append('./')");
        PyObject* pMod = NULL;
        PyObject* pFunc = NULL;
        PyObject* pParm = NULL;
        PyObject* pRetVal = NULL;
        int iRetVal = -999;
        const char* modulName="classify"; //这个是被调用的py文件模块名字
        pMod = PyImport_ImportModule(modulName);
        if(!pMod)
        {
        return -1;
        }
        const char* funcName="evaluate"; //这是此py文件模块中被调用的函数名字
        pFunc = PyObject_GetAttrString(pMod, funcName);
        if(!pFunc)
        {
        return -2;
        }
        pParm = PyTuple_New(1);
        PyTuple_SetItem(pParm, 0, Py_BuildValue("s",picpath));//传入的参数,是图片的路径
        pRetVal = PyEval_CallObject(pFunc, pParm);//这里开始执行py脚本
        PyArg_Parse(pRetVal, "i", &iRetVal);//py脚本返回值给iRetVal
        //PyErr_Print();
        std::cout<<iRetVal;
        return iRetVal;
        }
    • ubuntu

      安装了anaconda, tensorflow

      C++ 和 python代码与上面类似。在构建执行文件时

      main:c++python.cpp
      g++ -o out c++python.cpp -I/home/pdd/anaconda3/include/python3.6m -lpython3.6m -L /home/pdd/anaconda3/lib clean:
      rm -rf *.o

      -I后面的/home/pdd/anaconda3/include/python3.6m有需要的Python.h

      -lpython3.6m链接到需要的libpython3.6m.so;

      -L指出链接的路径。

      终端输入make。如果提示需要什么libpython3.6m.so,就把/home/pdd/anaconda3/lib下的libpython3.6m.*.so复制到/usr/lib/下(sudo cp ——–)  此时再次输入make,一切ok!得到out文件,输入./out

  2. 源码编译运行。

    大体的流程如下:

    • 1.使用tensorflow python API编写和训练自己的模型,训练完成后,使用tensorflow saver 将模型保存下来。
    • 2.使用tensorflow c++ API 构建新的session,读取python版本保存的模型,然后使用session->run()获得模型的输出。
    • 3.编译和运行基于tensorflow c++ API写的代码。
    1. Ubuntu
    2. windows

C++调用tensorflow模型的更多相关文章

  1. ML.NET调用Tensorflow模型示例——MNIST

    ML.NET在不久前发行了1.0版本,在考虑这一新轮子的实际用途时,最先想到的是其能否调用已有的模型,特别是最被广泛使用的Tensorflow模型.于是在查找了不少资料后,有了本篇示例.希望可以有抛砖 ...

  2. 用C++调用tensorflow在python下训练好的模型(centos7)

    本文主要参考博客https://blog.csdn.net/luoyexuge/article/details/80399265 [1] bazel安装参考:https://blog.csdn.net ...

  3. 将TensorFlow模型变为pb——官方本身提供API,直接调用即可

    TensorFlow: How to freeze a model and serve it with a python API 参考:https://blog.metaflow.fr/tensorf ...

  4. [翻译] Tensorflow模型的保存与恢复

    翻译自:http://cv-tricks.com/tensorflow-tutorial/save-restore-tensorflow-models-quick-complete-tutorial/ ...

  5. Tensorflow模型的格式

    转载:https://cloud.tencent.com/developer/article/1009979 tensorflow模型的格式通常支持多种,主要有CheckPoint(*.ckpt).G ...

  6. 移动端目标识别(1)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之TensorFlow Lite简介

    平时工作就是做深度学习,但是深度学习没有落地就是比较虚,目前在移动端或嵌入式端应用的比较实际,也了解到目前主要有 caffe2,腾讯ncnn,tensorflow,因为工作用tensorflow比较多 ...

  7. 移动端目标识别(2)——使用TENSORFLOW LITE将TENSORFLOW模型部署到移动端(SSD)之TF Lite Developer Guide

    TF Lite开发人员指南 目录: 1 选择一个模型 使用一个预训练模型 使用自己的数据集重新训练inception-V3,MovileNet 训练自己的模型 2 转换模型格式 转换tf.GraphD ...

  8. tensorflow 模型保存与加载 和TensorFlow serving + grpc + docker项目部署

    TensorFlow 模型保存与加载 TensorFlow中总共有两种保存和加载模型的方法.第一种是利用 tf.train.Saver() 来保存,第二种就是利用 SavedModel 来保存模型,接 ...

  9. 一份快速完整的Tensorflow模型保存和恢复教程(译)(转载)

    该文章转自https://blog.csdn.net/sinat_34474705/article/details/78995196 我在进行图像识别使用ckpt文件预测的时候,这个文章给我提供了极大 ...

  10. 使用tensorflow-serving部署tensorflow模型

    使用docker部署模型的好处在于,避免了与繁琐的环境配置打交道.使用docker,不需要手动安装Python,更不需要安装numpy.tensorflow各种包,直接一个docker就包含了全部.d ...

随机推荐

  1. vue指令之属性指令

    目录 属性指令 示例 属性指令 标签上的属性可以绑定变量,变量变化,属性也会变化 # 什么是属性?比如: href/src/name/value/class/style... 语法: v-bind:属 ...

  2. 使用frp进行内网穿透

    frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公网. frp is a ...

  3. Linux(二)文件权限和压缩

    1 搜索查找类 1.1 查找定位文件 find <搜索范围.路径> <选项> find将从指定目录下递归地遍历其各个子目录,将满足条件的文件显示在终端. 选项说明 -name: ...

  4. 一款能“干掉” ChatGPT 的应用「GitHub 热点速览」

    据说有了它,ChatGPT 就可以靠边站了.因为 Auto-GPT 能更加主动地完成你给他的指定任务,不用做更多的人为干涉,它的推理能力比 ChatGPT 更强,有人用它解放双手做了个 React 网 ...

  5. Pandas的使用

    在数据分析工作中,Pandas 的使用频率是很高的,一方面是因为 Pandas 提供的基础数据结构 DataFrame 与 json 的契合度很高,转换起来很方便.另一方面,如果日常的数据清理工作不是 ...

  6. 关于Java中代码的执行顺序

    结论 注意 只有显式的加载类 JVM才会加载到内存中 先加载父类的静态代码块 然后执行子类静态代码块 当前类存在类静态变量注意引用类型没进行赋值操作初始化为null 并不会显式的加载类又存在静态代码块 ...

  7. JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码"

    JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码" @ 目录 JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码&q ...

  8. P2482 [SDOI2010] 猪国杀

    方法论 这是一道复杂的模拟题.由于游戏规则的条目很多,我们需要仔细考虑程序的组织.否则,在编写程序的过程中极容易陷入停滞的状态(不知道下一步应该怎么做),或在发现程序出问题时,难以快速定位到错误点,对 ...

  9. C#处理医学影像(四):基于Stitcher算法拼接人体全景脊柱骨骼影像

    在拍摄脊柱或胸片时,经常会遇到因设备高度不够需要分段拍摄的情况, 对于影像科诊断查阅影像时希望将分段影像合并成一张影像,有助于更直观的观察病灶, 以下图为例的两个分段影像:       我们使用Ope ...

  10. 一文梳理z-index和层叠上下文

    前言 最近参与某前端项目架构改造,发现项目中滥用z-index,设置的值有几十种并且不统一.在对项目的z-index进行梳理和统一过程中也深入学习了一下z-index,并撰写成文,希望也能帮助到陌生的 ...