検査レシピ=処理/検査ステップの縦リスト(配線なし)。yfoxlib(yfoximg/yfoxbase)使用。 - ビジュアル・パイプライン(カード+適用後サムネイル+緑/赤 合否) - テンプレート/対話式ウィザードでレシピ生成(CTaskDialog) - パラメータのスライダー・ライブ調整 - レシピ保存/読込(*.itr) + 最近使ったファイル(MRU) - 検査範囲(ROI)を複数マウス指定(ドラッグ追加/右クリック削除) - カードのドラッグ並べ替え - 判定結果画像の保存 + 検査ログCSV(項目拡張) - 処理6種+検査3種(明るさ/白画素率/塊の数) - /selftest(実行+レシピ往復+結果画像+複数ROI塊カウント検証)、/demo Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
82 lines
2.6 KiB
C++
82 lines
2.6 KiB
C++
#pragma once
|
|
//
|
|
// Recipe.h - ノーコード「検査レシピ」のデータモデル(UI/画像ライブラリ非依存)。
|
|
//
|
|
// パラダイム: ブロックをワイヤで繋ぐノードグラフではなく、
|
|
// 「上から下へ順に実行するステップの縦リスト」= 料理のレシピ / 検査チェックリスト。
|
|
// ステップは2種: 処理(画像を加工) と 検査(値を測って範囲判定=PASS/FAIL に寄与)。
|
|
//
|
|
#include <afx.h>
|
|
#include <atltypes.h> // CRect
|
|
#include <vector>
|
|
|
|
namespace core {
|
|
|
|
// ステップ種別。process=画像加工 / inspect=測定+判定。
|
|
enum class StepKind
|
|
{
|
|
// --- 処理(画像を加工する) ---
|
|
Grayscale, // カラー→グレー(24bit→8bit)
|
|
Median, // 3x3 メディアン(ノイズ除去)
|
|
Binarize, // 二値化(帯 [L,H])
|
|
Otsu, // 大津の二値化(自動しきい値)
|
|
Gamma, // ガンマ補正
|
|
Contrast, // コントラスト伸長
|
|
|
|
// --- 検査(測定して範囲で合否) ---
|
|
InspectBrightness, // 平均輝度が [min,max] に入れば OK
|
|
InspectWhiteRatio, // 二値化後の白画素率(%) が [min,max] に入れば OK
|
|
InspectBlobCount, // 二値化+ラベリングで「塊(キズ/穴)の数」が [min,max] に入れば OK
|
|
};
|
|
|
|
// 1つのパラメータ(数値)。UI はこの記述を見て入力欄を作る。
|
|
struct StepParam
|
|
{
|
|
CString key; // 内部キー
|
|
CString label; // 画面表示名
|
|
double value; // 現在値
|
|
double lo; // 入力下限(UIヒント)
|
|
double hi; // 入力上限(UIヒント)
|
|
};
|
|
|
|
// 実行後の結果(検査ステップのみ意味を持つ)。
|
|
struct StepResult
|
|
{
|
|
bool ran = false; // 実行された
|
|
bool ok = true; // 検査OK(処理ステップは常に true)
|
|
double measured = 0.0; // 測定値(検査ステップ)
|
|
CString text; // 表示用の説明(測定値/エラー等)
|
|
};
|
|
|
|
// レシピの1ステップ。
|
|
struct Step
|
|
{
|
|
StepKind kind;
|
|
std::vector<StepParam> params;
|
|
StepResult result;
|
|
|
|
double Param(LPCWSTR key, double def = 0.0) const
|
|
{
|
|
for (const auto& p : params)
|
|
if (p.key == key) return p.value;
|
|
return def;
|
|
}
|
|
void SetParam(LPCWSTR key, double v)
|
|
{
|
|
for (auto& p : params)
|
|
if (p.key == key) { p.value = v; return; }
|
|
}
|
|
};
|
|
|
|
// 検査レシピ = ステップの並び + 検査範囲(ROI)。
|
|
struct Recipe
|
|
{
|
|
std::vector<Step> steps;
|
|
|
|
// 検査範囲(画像ピクセル座標)。空のときは画像全体を検査。複数指定すると各範囲を合算。
|
|
// 本アプリの処理ステップは寸法を変えないため、ROI は全ステップで同座標系で有効。
|
|
std::vector<CRect> rois;
|
|
};
|
|
|
|
} // namespace core
|