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。
如果項(xiàng)目是由c++編寫,想調(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,如下圖所示,代表安裝成功:
2.tensorflow
直接終端輸入:
pip install tensorflow
就會(huì)自動(dòng)幫你安裝到python下。
如果出現(xiàn)類似“沒(méi)有找到匹配版本”(或者紅色英文提示),那么你可能裝的是python32bit版本,暫時(shí)不支持tensorflow!
安裝成功后在終端如下操作:
顯示tensorflow版本,表示安裝成功!
3.C++Demo
一個(gè)簡(jiǎn)單的c++調(diào)取python+tensorflow的demo,按照實(shí)際需要可以依葫蘆畫瓢。
#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);//這里開始執(zhí)行py腳本 PyArg_Parse(pRetVal, "i", &iRetVal);//py腳本返回值給iRetVal //PyErr_Print(); std::cout<<iRetVal; return iRetVal; }
4.tensorflow的python腳本
默認(rèn)你已經(jīng)寫好tensorflow的python腳本,并能跑成功。(tensorflow的使用不是本文重點(diǎn))
c++需要調(diào)用的就是這個(gè)classify.py里面的evaluate函數(shù),傳入圖片路徑,返回分類結(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í)候需要寫一個(gè)簡(jiǎn)單的makefile加入需要的依賴環(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é)果如下:
得到結(jié)果0。任務(wù)完成!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)我們的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
上一篇:C++語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)五子棋
欄 目:C語(yǔ)言
本文標(biāo)題:C++調(diào)用tensorflow教程
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/671.html
您可能感興趣的文章
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用函數(shù)刪除字符
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求階乘
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10APUE筆記之:進(jìn)程環(huán)境詳解
- 01-10c++中inline的用法分析
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類算法
- 01-10全排列算法的非遞歸實(shí)現(xiàn)與遞歸實(shí)現(xiàn)的方法(C++)
- 01-10C++大數(shù)模板(推薦)


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什