您好,登錄后才能下訂單哦!
目前深度學習越來越火,學習、使用tensorflow的相關工作者也越來越多。但是目前絕大部分的python都是擁有著豐富的python的API,而c++的API不夠完善。這就導致絕大多是使用tensorflow的項目都是基于python。
如果項目是由c++編寫,想調用python下的tensorflow?可參考本教程(tensorflow模型是CNN卷積神經網絡)
具體步驟:
1.python環境
首先安裝python,可以在Anaconda官網直接下載。記住python一定選擇64bit,目前tensorflow不支持32位的python,這也是我之前被坑過的地方。下載Anaconda后直接
bash Anaconda3-4.3.1-Linux-x86_64.sh
就可以安裝,然后
gedit ~/.bashrc
在最后面加上
export PATH=/<你的anaconda路徑>/bin:$PATH
將python安裝路徑添加到系統路徑中,這樣在終端敲python后會運行安裝的python3.6,如下圖所示,代表安裝成功:
2.tensorflow
直接終端輸入:
pip install tensorflow
就會自動幫你安裝到python下。
如果出現類似“沒有找到匹配版本”(或者紅色英文提示),那么你可能裝的是python32bit版本,暫時不支持tensorflow!
安裝成功后在終端如下操作:
顯示tensorflow版本,表示安裝成功!
3.C++Demo
一個簡單的c++調取python+tensorflow的demo,按照實際需要可以依葫蘆畫瓢。
#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"; //這個是被調用的py文件模塊名字 pMod = PyImport_ImportModule(modulName); if(!pMod) { return -1; } 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; }
4.tensorflow的python腳本
默認你已經寫好tensorflow的python腳本,并能跑成功。(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
5.c++調用python腳本的環境
這時候需要寫一個簡單的makefile加入需要的依賴環境。例如c++代碼第一行的Python.h和相關的庫文件。
簡單的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復制到/usr/lib/下(sudo cp ——–)
此時再次輸入make,一切ok!得到out文件,輸入./out,結果如下:
得到結果0。任務完成!
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。