PythonをC#/C++どちらから呼び出すのが良いか?

金 02 8月 2019

PythonをC#/C++どちらから呼び出すのが良いか?

背景

  • Deep Learningで Pythonを利用しながら、GUIはWindows Visual Studioで簡単にデザインしたい。
    • 使い方としては特に画像の扱い。画像セットとアノテーション情報をGUIで分析確認する等の使い方も想定したい。
  • ゆくゆくはDeep LearningのDeploy寄りのツールとして。
    • Pythonコードの推論部だけをC++等で記述して、Deployを効果的に行えるようなSoftware構成を検討したい。
  • Deep Learningやコーディングを勉強中であり、調査しながら良い形を模索したい。

検討1:Python環境の呼び出しやすさの観点では?

No GUI構築 Python呼び出し方法 Note
1 C# 追加ライブラリ無しでOKの模様 Microsoftの例としてAnaconda環境。その他のPython環境も使えるらしい。
2 C++ Boost.Pythonが必要? No1とやれることは似通っているようにみえる。PythonからC++(逆方向)もできる。
3 C#(.net) pythonnet Python3.5までの対応の模様。
4 C# IronPython IronPythonは動かないという情報が多い。
5 任意 PythonをWebAPI化(Flask?) 引数→出力 以上の連携が楽になる。サーバーを別立てした構成が立てやすくなるはず。

検討2:GUIの観点では?

  • 前提

    • 前提として C# or C++?で考えている。
    • PythonではKivyを多少触ってみた。少し触った感じではあるが、Windowsであれば、Visual Studioのデザイナーには敵わない気がする。
    • C#はほとんどやったことないが、C++が書けるというほど使ってきたわけでもない。
  • 予定

    • C#のGUIに対する期待感 > C++ GUIの期待感。
    • C++はC++/CLIを扱わなければいけないので厄介という記事があったり。

結論

  • No1のフレームワークで進めてみたい。
    • C#の勉強に。
    • Deep Learning 検討用の、自前画像ビューアに。
  • (蛇足)OpenCVも使いたい。
    • C#だとOpenCVSharpなるラッパーを使うのが普通?ということに初めて気が付く。
    • OpenCVSharpって何だろう、という漠然とした不安。(知らないだけ)
    • こんな実装もありかな? と勝手に想像して、C#選択のブロック要因とまでは考えないようにする。
      • GUI側で簡単に何かしたいとき、OpenCVSharpを使えば良い。
      • 本格的に処理をしたいとき、Python側でOpenCVを使い、結果をGUI側でビューすることでの連携はできそう。
      • OpenCVSharpがデファクトだったりするのかもしれない。

social