C++調(diào)用tensorflow教程

目前深度學(xué)習(xí)越來(lái)越火,學(xué)習(xí)、使用tensorflow的相關(guān)工作者也越來(lái)越多。但是目前絕大部分的python都是擁有著豐富的python的API,而c++的API不夠完善。這就導(dǎo)致絕大多是使用tensorflow的項(xiàng)目都是基于python。

創(chuàng)新互聯(lián)專(zhuān)注于隨縣企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),成都商城網(wǎng)站開(kāi)發(fā)。隨縣網(wǎng)站建設(shè)公司,為隨縣等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

如果項(xiàng)目是由c++編寫(xiě),想調(diào)用python下的tensorflow?可參考本教程(tensorflow模型是CNN卷積神經(jīng)網(wǎng)絡(luò))

具體步驟:

1.python環(huán)境

首先安裝python,可以在Anaconda官網(wǎng)直接下載。記住python一定選擇64bit,目前tensorflow不支持32位的python,這也是我之前被坑過(guò)的地方。下載Anaconda后直接

bash Anaconda3-4.3.1-Linux-x86_64.sh

就可以安裝,然后

gedit ~/.bashrc

在最后面加上

export PATH=/<你的anaconda路徑>/bin:$PATH

將python安裝路徑添加到系統(tǒng)路徑中,這樣在終端敲python后會(huì)運(yùn)行安裝的python3.6,如下圖所示,代表安裝成功:

C++調(diào)用tensorflow教程

2.tensorflow

直接終端輸入:

pip install tensorflow

就會(huì)自動(dòng)幫你安裝到python下。
如果出現(xiàn)類(lèi)似“沒(méi)有找到匹配版本”(或者紅色英文提示),那么你可能裝的是python32bit版本,暫時(shí)不支持tensorflow!
安裝成功后在終端如下操作:

C++調(diào)用tensorflow教程

顯示tensorflow版本,表示安裝成功!

3.C++Demo

一個(gè)簡(jiǎn)單的c++調(diào)取python+tensorflow的demo,按照實(shí)際需要可以依葫蘆畫(huà)瓢。

#include <Python.h>
#include <iostream>
int main(int argc, char** argv)
{
  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;
  char* modulName="classify";  //這個(gè)是被調(diào)用的py文件模塊名字
  pMod = PyImport_ImportModule(modulName); 
  if(!pMod)
  {
    return -1;
  }
  char* funcName="evaluate"; //這是此py文件模塊中被調(diào)用的函數(shù)名字
  pFunc = PyObject_GetAttrString(pMod, funcName); 
  if(!pFunc) 
  {  
    return -2; 
  } 
  pParm = PyTuple_New(1);
  PyTuple_SetItem(pParm, 0, Py_BuildValue("s",picpath));//傳入的參數(shù),是圖片的路徑
  pRetVal = PyEval_CallObject(pFunc, pParm);//這里開(kāi)始執(zhí)行py腳本
  PyArg_Parse(pRetVal, "i", &iRetVal);//py腳本返回值給iRetVal
  //PyErr_Print();
  std::cout<<iRetVal;
  return iRetVal;
}

4.tensorflow的python腳本

默認(rèn)你已經(jīng)寫(xiě)好tensorflow的python腳本,并能跑成功。(tensorflow的使用不是本文重點(diǎn))
c++需要調(diào)用的就是這個(gè)classify.py里面的evaluate函數(shù),傳入圖片路徑,返回分類(lèi)結(jié)果給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():
    里面就是對(duì)圖像讀取模型,預(yù)測(cè),得到prediction……
      max_index = np.argmax(prediction)
      return max_index

5.c++調(diào)用python腳本的環(huán)境

這時(shí)候需要寫(xiě)一個(gè)簡(jiǎn)單的makefile加入需要的依賴(lài)環(huán)境。例如c++代碼第一行的Python.h和相關(guān)的庫(kù)文件。
簡(jiǎn)單的makefile如下:

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復(fù)制到/usr/lib/下(sudo cp ——–)

此時(shí)再次輸入make,一切ok!得到out文件,輸入./out,結(jié)果如下:

C++調(diào)用tensorflow教程

得到結(jié)果0。任務(wù)完成!

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

本文題目:C++調(diào)用tensorflow教程
瀏覽地址:http://muchs.cn/article42/gdiiec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、定制開(kāi)發(fā)定制網(wǎng)站、網(wǎng)站策劃、做網(wǎng)站、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作