スクリプトタスクをVisual Studioで開発・テストしたい

[はじめに]
これまでMENOUフォーラムではスクリプトタスクによって総合的な検査を行ったり、CSVファイルに検査結果を書き出したりする例をご紹介してきました。

スクリプトタスクはプログラミング作業そのものであるため、記述するC#のコードが大規模になるほど開発の手間がかかるようになります。そんなとき、慣れたVisual Studioで開発してからスクリプトタスクに移植したくなるのではないかと思います。MENOU SDKを使えばそれが可能になります。

この記事ではVisual Studioでスクリプトタスクと同様のC#コードを開発・テストして、それをMENOU-TEのスクリプトタスクに移植する際の手順と注意事項をまとめました。解説は以下のサンプルを例に進めますのでダウンロードをお願いします。
https://menou.co.jp/20221116_sdksample/

※なお、この記事で紹介するサンプルプログラムの実行にはMENOU SDKのライセンスファイルが必要となります。ご希望の方は、担当営業または販売代理店までお問い合わせください。

[サンプルワークスペース]
ダウンロードしたZIP内に含まれる「SDKサンプルワークスペース.zip」をさらに展開し、MENOU-TEで開いてください。これは領域検出タスク、分類タスク、異常領域検出タスクの3つがあるプロジェクトです。

スクリプトタスクもあらかじめ開発済みです。このスクリプトには各タスクの検出結果における面積やスコアをCSVファイルに書き出す処理が実装されています。

[サンプルコード]
すでに完成品のスクリプトを見たあとですが、これと同等の処理が記述されたVisual StudioのC#プロジェクトが「SDKSample」に格納されています。

検査AIのランタイムモデルファイル(mtrunファイル)や検査用画像はすでにサブフォルダに格納されています。SDKSample.slnファイルを開き、Program.csの中を見てみましょう。このProgram.csはMENOU SDKを呼び出すコンソールプログラムで、やはり同様に各タスクの検出結果における面積やスコアをCSVファイルに書き出す処理が実装されています。

ソリューションをビルドしてください。すると、bin\Debug\netcoreapp3.1フォルダの下にexeファイルが生成されます。MENOUから配布されたライセンスファイルはこのexeファイルと同じ場所にコピーして配置してください。配置したら48行目にブレークポイントを張り、デバッグ実行してみてください。このようにランタイムモデルファイルがロードされ、

以後はF10キーでステップ実行したり、変数の中を見たり、Visual Studioの機能によって効率的に開発とテストを進めることができます。

[SDKプログラムからスクリプトタスクへの移植]
Visual Studio上で目的のプログラムが完成したら、いよいよスクリプトタスクへの移植を行いましょう。MENOU SDKを呼び出すプログラム(以下、SDKプログラム)とスクリプトタスクには共通点と異なる点があります。

(共通点)

  • ISegmentationTaskResultなど検査結果を取得したあとの各情報へのアクセス方法
  • 各情報を分析したりファイルに書き込んだりする処理

(異なる点)

  • SDKプログラムではPredictor.Load()するが、スクリプトタスクではすでに実行済みなのでしない
  • SDKプログラムではIPerdictor.Predict()で対象のタスクを推論実行するが、スクリプトタスクではすでに実行済みなのでしない
  • その代わり、スクリプトタスクでは実行済みである対象タスクの推論結果を GetPredictionTaskResult() というスクリプトパラメーターインターフェースのメソッドを呼び出す

スクリプトパラメーターインターフェースはスクリプトタスクの中で便利に使用できるメソッド群、という程度に覚えておいていただければ結構です。特に必ず使用するのは
GetPredictionTaskResult() だけなのでまずはサンプルコードの当該部分を真似てご自分のプロジェクトで活用していただければと思います。

ここでは両者の違いについて1行1行解説するのは割愛しますが、それぞれを実行して動きを見た上で、移植を行ってみてください。

[参考]
https://docs.menou.co.jp/sdk/api/latest/Menou.Menoute.Runtime.ScriptParameter.GetPredictionTaskResult.html

https://docs.menou.co.jp/sdk/api/latest/Menou.Menoute.Runtime.IPredictionTaskResult.html

「いいね!」 2