サンプルワークスペース~カードケースとストラップの組み合わせ検査~

カードケースとストラップの組み合わせ検査AI作成例を紹介します。

1.MENOU-TE起動後、プロジェクトを開く

2.タスクコネクションを以下のように作成して、配置する

3.カードケースタスクを開き、カードケースのみが反応するように学習させる

4.カードケースの色タスクを開き、黒、灰、茶の3色にそれぞれ分類する


↓分類タスクのアノテーション方法はこちら

5.ストラップタスクも3.と同様に学習させる

6.ストラップの色タスクも4.と同様に黒、灰、茶の3色に分類する

7.ランタイム評価画面を開く

8.スクリプト検査タスクを開き、以下のコードを入力する


※コードは一例になります。用途に応じて都度変更して使用ください

// 検査をしない場合はnull 条件に一致する場合はtrue 条件に一致しない場合はfalse
bool? result = null;
// resultは必ず最後の行に記述してください
//検査結果(文字)の表示位置がOKの場合
var AreaCentric = CreatePointD(900, 700);
//検査結果(文字)の表示位置がNGの場合
var imageCentric = CreatePointD(900, 700);
//検査結果(文字)の表示の大きさOKの場合
var centerbox = CreateBlob(AreaCentric, 300, 200);
//検査結果(文字)の表示の大きさNGの場合
var falsebox = CreateBlob(imageCentric, 200, 200);
//カードケースの初期文字列
string case_class = "CASE";
//ストラップの初期文字列
string strap_class = "STRAP";
//カードケースの検査結果文字を入力する
var case_results = GetPredictionTaskResult("カードケースの色");
//ストラップの検査結果文字を入力する
var strap_blobs = GetPredictionTaskResult("ストラップの色");

// もしカードケースの色の検査結果があったら
if (case_results is IClassificationTaskResult classificationTaskResult)
{
    // 分類タスクの結果が1つの時(1つもないもしくは複数あったら検査しない、つまりCASEのまま)
    if (classificationTaskResult.Regions.Count == 1)
    {
        // 先頭の要素を取得してクラス名で書き換える
        case_class = classificationTaskResult.Regions.First().ClassName.ToString();        
    }
}
// もしストラップの色の検査結果があったら
if (strap_blobs is IClassificationTaskResult strap_classificationTaskResult)
{
    // 分類タスクの結果が1つの時(1つもないもしくは複数あったら検査しない、つまりSTRAPのまま)
    if (strap_classificationTaskResult.Regions.Count == 1)
    {
        // 先頭の要素を取得してクラス名で書き換える
        strap_class = strap_classificationTaskResult.Regions.First().ClassName.ToString();
    }
    //ストラップが二つ検出された場合
    else if (strap_classificationTaskResult.Regions.Count ==2)
    {
        var list = strap_classificationTaskResult.Regions.ToList();
        var strap1 = list[0].ClassName;
        var strap2 = list[1].ClassName;
        // ストラップのクラスが二つとも同じだったら
        if (strap1 == strap2)
        {
             strap_class = strap1;
        }
    }
}
string concat_class = String.Concat(case_class,", ", strap_class);

// 検査しないパターン
if (case_class == "CASE" || strap_class == "STRAP")
{
    // resultはnullのままで終了
    // タスクコネクションで異常が検知出来ないなら以下を有効にして異常を出力
    // result = true
}
// ケースとストラップが一致する時はfalse(正常)
else if (case_class == strap_class)
{
    AddBlob(concat_class,centerbox);
    result = false;
}

// それ以外はtrue(異常)
else
{
    AddBlob(concat_class,falsebox);
    result = true;
}
result

8.保存し、実行ボタンをクリック

9.スクリプト検査タスクをクリックし、組み合わせが間違った画像を選ぶと、検査結果が異常と表示される

10.上記9.のモデルをMENOU-RNで実行させ、問題ないことを確認

「いいね!」 3