スコアと検査結果をスクリプトタスクでCSV保存する

[検査結果はファイルで取り出せる?]
MENOU-RNでは検査結果の履歴を画面上から確認することができます。しかし、結果の保存・分析のためにそれらをファイルなどのデータとして取り出す機能は本記事執筆の2022年10月時点において標準では提供しておりません。将来的にはMENOU-RNと連携して検査結果の保存・分析を可能にするサーバー製品の開発を計画しておりますが、当面の間は回避策としてスクリプトタスクを使用していただくようお願いします。この記事ではそれを実現する手順をサンプルプロジェクトとともにご紹介します。

[サンプルプロジェクト]
基板上に配置されたチップ抵抗に汚れがついていたらNG、という検査AIをサンプルとして使っていきましょう。ワークスペースはこちらからダウンロードできます。
https://menoufs.blob.core.windows.net/workspaces/csvsave.zip

[出力したいCSVファイル]
このようなヘッダー情報を持つCSVファイルを保存することにします。

なお、MENOU-TEの領域検出タスクにおいて左上に表示されている「スコア」というのは、検査結果のスコアマップ(ピクセルごとの推論結果である0~255の値を画像化したもの)の全ピクセルにおける最大値を、0.0~1.0の値になるよう255で除算して正規化したものになります。このあと登場するスクリプトタスクではこの値を簡単なコーディングで計算しています。

image

[スクリプト]
[ランタイム評価] - [スクリプト検査設定]を開き、以下のようにコードを書いてください。

using System.Runtime.InteropServices;

// 検査をしない場合はnull 条件に一致する場合はtrue 条件に一致しない場合はfalse
bool? result = null;

// today.csvには1行目のヘッダーとして
// (検査日時, チップ抵抗タスクのスコア,  チップ抵抗タスクの判定結果)
// が書き込まれているものとする
// 追記用にappend = trueを指定
using (var sw = new StreamWriter(@"C:\test\today.csv", true, System.Text.Encoding.UTF8))
{
    sw.Write(DateTime.Now.ToString("[yyyy/MM/dd HH:mm:ss.fff], "));

    // 「チップ抵抗の汚れ」タスクの検査結果
    var tr = GetPredictionTaskResult("チップ抵抗の汚れ");

    // 検査結果が存在する場合
    if (tr is ISegmentationTaskResult segtr)
    {
        // スコアマップ画像(グレースケール)のサイズを計算
        var sm = segtr.CreateScoreMapImage();
        var len = sm.Width * sm.Height;
        // バイト配列を作成し、Marshal.Copyする
        var ba = new byte[len];
        Marshal.Copy(sm.DataPtr, ba, 0, ba.Length);
        // 最大値を255で割って0から1の値に直す
        sw.Write((ba.Max() / 255.0).ToString("F2"));
        sw.Write(", ");
        // 検査結果文字列(異常 or 正常)
        sw.Write(segtr.InspectionValue);        
        sw.Write(", ");
    }
    else
    {
       // 検査結果なしは-で表現
        sw.Write("-, -, ");
    }
    sw.WriteLine();
}
result = true;
// resultは必ず最後の行に記述してください
result

分類タスク、異常領域検出タスクについても同様の手法で、検査結果の中から所望の情報を取り出し、ファイル保存することができます。各タスクのインターフェース仕様についてはMENOU SDKのドキュメントを参照してください。

[MENOU SDKドキュメント]
https://docs.menou.co.jp/sdk/

[APIリファレンス - IPredictionTaskResult]
https://docs.menou.co.jp/sdk/api/latest/Menou.Menoute.Runtime.IPredictionTaskResult.html

こちらのトピックでもCSV保存についてディスカッションされていますので参考になさってください。

「いいね!」 7

2022年12月のリリースでカメラとして「フォルダから読み込み」を使用したときに画像ファイル名を取得できるようになりました。これにより、CSVファイルへの出力において各行に検査した画像のファイル名も合わせて出力することが可能となります。

https://forum.menou.co.jp/t/topic/668

プロジェクト編集/ランタイム評価画面/スクリプトから画像ファイル名を取得可能な I/F を追加
スクリプト検査機能に以下のメソッドを追加しました。

・string GetFilePath()
現在の推論対象の画像ファイルパスを取得します。
・string GetFileName()
現在の推論対象の画像ファイル名(拡張子含む)を取得します。

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

「いいね!」 1

結果をCSV出力すると同様に、OCRで読み取ったテキストをCSVで出力したいのですが、サンプルコードがあれば、頂きたいです。
検出数(塊)は様々です。
いかがでしょうか?よろしくお願いいたします。

「いいね!」 1

ご要望ありがとうございます。
以下のトピックを作成いたしました。
こちらはシンプルな例となっておりますが、その他にご要望等ございましたら、是非ご連絡ください。

「いいね!」 3

サンプルプロジェクトがリンク切れとなっているようです
https://menou.co.jp/wp-content/uploads/2022/10/csvsave.zip

再アップロードいただけますと幸いです

「いいね!」 1

ご不便をお掛けして大変申し訳ございません。

サンプルプロジェクトですが、リンク先が変更になりましたので、
以下リンクからダウンロード頂けますでしょうか。

https://menoufs.blob.core.windows.net/workspaces/csvsave.zip

「いいね!」 2

アップロードありがとうございました
参考にします

「いいね!」 1