はじめに
- 「C++で書いたアルゴリズム関数をpythonに組み込んで頂戴」なんてことがあります.
- numpyとか駆使すれば十分高速なコードが書けるのですが,書き換えるのも面倒です.(興味がないコードだったりもしますし.)
- そういう時のために,pythonコード内でC++を簡単に呼ぶ方法をまとめておきます.
- ベースはpythonで書いて,画像処理だけC++のコードで貰う時とか便利です.
- ctypesを使います.
サンプルコード
- githubに置きました.
- ctypes_for_Image_processing.
- 実践的じゃないhelloworldのサンプルではなく,変数とポインタ渡しのサンプルです.
要点
C++コードをWindowsOSであれば,DLL化. LinuxOSであればShared Object(so)化します.そうすればctypesで呼び出せます.
- WindowsOS
- Download https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win64/Personal Builds/rubenvb/gcc-4.8-release/
- "x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb.7z"
- Build Dll for Windows 64bit System.
- Reference https://kakurasan.blogspot.jp/2015/07/debianubuntu-mingw-crosscompile.html
x86_64-w64-mingw32-g++ -c Image_processing.cpp x86_64-w64-mingw32-g++ -shared -o Image_processing.dll Image_processing.o
- Linux OS(こっちの方が簡単)
g++ -g -Wall -fPIC -o Image_processing.o -c Image_processing.cpp g++ -shared Image_processing.o -o Image_processing.so
- あとはサンプルコードをご参照ください.(出来るだけシンプルに書きましたので)
リンク
まとめ
- pythonで手早くC++関数を呼ぶ方法をまとめてみました.
- これでpythonとC++関数を混在しなきゃいけない場面でも安心ですね.
- ROSでpythonとC++共存させちゃうのもありますけど,インストール大変ですしね.
flow-developers.hatenablog.com
以上