Flow-Developers

Raspberry Pi, Raspbian, python, ROS, IoT, 電子工作, 機械学習, Deep learning, サッカー, スポーツ写真, ライフハック

pythonからC++関数を簡単に呼ぶ方法

はじめに

f:id:flow-dev:20171219075129p:plain

  • C++で書いたアルゴリズム関数をpythonに組み込んで頂戴」なんてことがあります.
  • numpyとか駆使すれば十分高速なコードが書けるのですが,書き換えるのも面倒です.(興味がないコードだったりもしますし.)
  • そういう時のために,pythonコード内でC++を簡単に呼ぶ方法をまとめておきます.
  • ベースはpythonで書いて,画像処理だけC++のコードで貰う時とか便利です.
  • ctypesを使います.

サンプルコード

  • githubに置きました.
  • ctypes_for_Image_processing.
  • 実践的じゃないhelloworldのサンプルではなく,変数とポインタ渡しのサンプルです.

要点

C++コードをWindowsOSであれば,DLL化. LinuxOSであればShared Object(so)化します.そうすればctypesで呼び出せます.

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++関数を呼ぶ方法をまとめてみました.
  • これでpythonC++関数を混在しなきゃいけない場面でも安心ですね.
  • ROSでpythonC++共存させちゃうのもありますけど,インストール大変ですしね.

flow-developers.hatenablog.com


以上