2using System.Collections.Generic;
5using System.Threading.Tasks;
14 static void SimpleSample(String modelPath, String imagePath)
19 if (
false == has_license) {
throw new Exception(
"no license"); }
25 CFviImage image =
new CFviImage(imagePath);
28 Console.WriteLine($
"backend: {model.ModelBackend}");
32 if (
false == is_valid_img) {
throw new Exception(
"invalid image"); }
42 for (var i_score = 0; i_score < scores.Length; i_score++)
44 Console.WriteLine($
"label{i_score}: {scores[i_score]}");
49 Console.WriteLine($
"top label{top_score_pair.Item1}, score{top_score_pair.Item2}");
59 var is_anomaly = tuple.Item1;
60 var max_anomaly = tuple.Item2;
63 var str_is_anomaly = is_anomaly ?
"anomaly" :
"normal";
64 Console.WriteLine($
"{str_is_anomaly}, max_anomaly={max_anomaly}");
72 default:
throw new NotImplementedException($
"unmatch model-category={model.ModelCategory}");
75 catch (CFviException ex)
77 Console.WriteLine($
"ErrorCode={ex.ErrorCode}, Message={ex.Message}");
78 Console.WriteLine(ex.StackTrace);
82 Console.WriteLine($
"Message={ex.Message}");
83 Console.WriteLine(ex.StackTrace);
87 static void SimpleSampleMultiView(String modelPath, String imageFolder)
92 if (
false == has_license) {
throw new Exception(
"no license"); }
98 Console.WriteLine($
"backend: {model.ModelBackend}");
101 List<CFviImage> target_images =
new List<CFviImage>();
102 for (var i_img = 0; i_img < model.
NumViews; i_img++)
105 var img_path = System.IO.Path.Combine(imageFolder, String.Format(
"{0}.bmp", i_img));
106 var image =
new CFviImage(img_path);
110 if (
false == is_valid_img) {
throw new Exception(
"invalid image"); }
113 target_images.Add(image);
124 for (var i_score = 0; i_score < scores.Length; i_score++)
126 Console.WriteLine($
"label{i_score}: {scores[i_score]}");
131 Console.WriteLine($
"top label{top_score_pair.Item1}, score{top_score_pair.Item2}");
137 var threshold = 10.0;
141 var is_anomaly = tuple.Item1;
142 var max_anomaly = tuple.Item2;
145 var str_is_anomaly = is_anomaly ?
"anomaly" :
"normal";
146 Console.WriteLine($
"{str_is_anomaly}, max_anomaly={max_anomaly}");
154 default:
throw new NotImplementedException($
"unmatch model-category={model.ModelCategory}");
157 catch (CFviException ex)
159 Console.WriteLine($
"ErrorCode={ex.ErrorCode}, Message={ex.Message}");
160 Console.WriteLine(ex.StackTrace);
164 Console.WriteLine($
"Message={ex.Message}");
165 Console.WriteLine(ex.StackTrace);
169 static void SimpleSampleSegmentation(String modelPath, String imagePath)
174 if (
false == has_license) {
throw new Exception(
"no license"); }
180 CFviImage image =
new CFviImage(imagePath);
183 Console.WriteLine($
"backend: {model.ModelBackend}");
187 if (
false == is_valid_img) {
throw new Exception(
"invalid image"); }
194 var category_masks =
new Dictionary<UInt32, CFviImage>();
195 category_masks.Add(1,
new CFviImage(image.HorzSize, image.VertSize, ImageType.BIN, 1));
196 category_masks.Add(2,
new CFviImage());
197 category_masks.Add(5,
new CFviImage());
204 foreach (var kv
in category_masks)
206 var category_id = kv.Key;
207 var category_image = kv.Value;
208 var region =
new CFviRegion(category_image);
209 Console.WriteLine($
"No.{category_id}: area={region.Area}");
219 var category_masks =
new Dictionary<UInt32, List<CFviImage>>();
220 category_masks.Add(1,
new List<CFviImage>());
221 category_masks.Add(2,
new List<CFviImage>() {
new CFviImage() });
222 category_masks.Add(5,
new List<CFviImage>());
229 foreach (var kv
in category_masks)
231 var category_id = kv.Key;
232 var mask_images = kv.Value;
233 for(var i=0;i<mask_images.Count; i++)
235 var region =
new CFviRegion(mask_images[i]);
236 Console.WriteLine($
"category={category_id}: no.={i}, area={region.Area}");
246 default:
throw new NotImplementedException($
"unmatch model-category={model.ModelCategory}");
249 catch (CFviException ex)
251 Console.WriteLine($
"ErrorCode={ex.ErrorCode}, Message={ex.Message}");
252 Console.WriteLine(ex.StackTrace);
256 Console.WriteLine($
"Message={ex.Message}");
257 Console.WriteLine(ex.StackTrace);
推論するモデルを扱うクラス
Definition: PredictionCS.cs:146
ModelCategory ModelCategory
読み込んだモデルの種別
Definition: PredictionCS.cs:167
float[] PredictClassification(CFviImage targetImage)
推論の実行(画像分類)
Definition: PredictionCS.cs:888
Boolean IsValidImage(CFviImage targetImage)
推論画像の有効性の確認
Definition: PredictionCS.cs:571
static Boolean CheckLicense()
ライセンスを確認します。
Definition: PredictionCS.cs:321
CFviImage PredictSemanticSegmentation(CFviImage targetImage)
推論の実行(セマンティックセグメンテーション)
Definition: PredictionCS.cs:1336
Tuple< Boolean, float > PredictMultiViewAD(IEnumerable< CFviImage > targetImages, float threshold)
推論の実行(多視点アノマリー検出)
Definition: PredictionCS.cs:1201
Int32 NumViews
読み込んだモデルが期待する視点数
Definition: PredictionCS.cs:210
void SetPanopticSegmentationParams(UInt32 stuffArea=1024, Double threshold=0.1, Int32 nmsKernel=31, UInt16 requestInstanceNum=0)
パノプティックセグメンテーションの検出パラメータの設定
Definition: PredictionCS.cs:648
Tuple< Boolean, float > PredictAnomaly(CFviImage targetImage, float threshold)
推論の実行(アノマリー検出)
Definition: PredictionCS.cs:979
CFviImage PredictPanopticSegmentation(CFviImage targetImage)
推論の実行(パノプティックセグメンテーション)
Definition: PredictionCS.cs:1436
float[] PredictMultiViewCNN(IEnumerable< CFviImage > targetImages)
推論の実行(MVCNN)
Definition: PredictionCS.cs:1109
WIL-PDL モジュールの名前空間
Definition: PredictionCS.cs:20
ModelCategory
モデルの種別
Definition: PredictionCS.cs:31
FVILの最上位ネームスペース
Definition: PredictionCS.cs:15
2Imports System.Collections.Generic
10 Private Shared Sub SimpleSample(modelPath As String, imagePath As String)
12 Dim has_license = PDL.Model.CheckLicense()
13 If False = has_license Then
14 Throw New Exception("no license")
17 ' モデルファイルの読込を含むコンストラクタ ( インスタンスを作成して LoadModel() をする場合と同等 )
18 Dim model As Model = New Model(modelPath)
21 Dim image As CFviImage = New CFviImage(imagePath)
24 Console.WriteLine($"backend: {model.ModelBackend}")
27 Dim is_valid_img = model.IsValidImage(image)
28 If False = is_valid_img Then
29 Throw New Exception("invalid image")
32 Select Case model.ModelCategory
33 Case ModelCategory.Classification ' 画像分類
35 Dim scores = model.PredictClassification(image)
38 For i_score = 0 To scores.Length - 1
39 Console.WriteLine($"label{i_score}: {scores(i_score)}")
43 Dim top_score_pair = model.PredictClassification(image, scores)
44 Console.WriteLine($"top label{top_score_pair.Item1}, score{top_score_pair.Item2}")
45 Case ModelCategory.AnomalyDetection ' アノマリー検出
46 ' 閾値を任意に設定して推論実行 ( double から float キャストに注意 )
48 Dim tuple = model.PredictAnomaly(image, threshold)
51 Dim is_anomaly = tuple.Item1
52 Dim max_anomaly = tuple.Item2
55 Dim str_is_anomaly = If(is_anomaly, "anomaly", "normal")
56 Console.WriteLine($"{str_is_anomaly}, max_anomaly={max_anomaly}")
58 Throw New NotImplementedException($"unmatch model-category={model.ModelCategory}")
60 Catch ex As CFviException
61 Console.WriteLine($"ErrorCode={ex.ErrorCode}, Message={ex.Message}")
62 Console.WriteLine(ex.StackTrace)
64 Console.WriteLine($"Message={ex.Message}")
65 Console.WriteLine(ex.StackTrace)
69 Private Shared Sub SimpleSampleMultiView(modelPath As String, imageFolder As String)
71 Dim has_license = PDL.Model.CheckLicense()
72 If False = has_license Then
73 Throw New Exception("no license")
76 ' モデルファイルの読込を含むコンストラクタ ( インスタンスを作成して LoadModel() をする場合と同等 )
77 Dim model As Model = New Model(modelPath)
80 Console.WriteLine($"backend: {model.ModelBackend}")
83 Dim target_images As List(Of CFviImage) = New List(Of CFviImage)()
84 For i_img = 0 To model.NumViews - 1
85 ' imageFolder フォルダ内に、0-index の通し番号の画像が保存されていることを想定
86 Dim img_path = Path.Combine(imageFolder, String.Format("{0}.bmp", i_img))
87 Dim image = New CFviImage(img_path)
90 Dim is_valid_img = model.IsValidImage(image)
91 If False = is_valid_img Then
92 Throw New Exception("invalid image")
96 target_images.Add(image)
100 Select Case model.ModelCategory
101 Case ModelCategory.MultiViewCNN ' 多視点画像分類
103 Dim scores = model.PredictMultiViewCNN(target_images)
105 For i_score = 0 To scores.Length - 1
106 Console.WriteLine($"label{i_score}: {scores(i_score)}")
109 ' 推論実行 ( 最大スコアのみを取得 )
110 Dim top_score_pair = model.PredictMultiViewCNN(target_images, scores)
111 Console.WriteLine($"top label{top_score_pair.Item1}, score{top_score_pair.Item2}")
112 Case ModelCategory.MultiViewAD ' 多視点アノマリー検出
113 ' 閾値を任意に設定して推論実行 ( double から float キャストに注意 )
115 Dim tuple = model.PredictMultiViewAD(target_images, threshold)
118 Dim is_anomaly = tuple.Item1
119 Dim max_anomaly = tuple.Item2
122 Dim str_is_anomaly = If(is_anomaly, "anomaly", "normal")
123 Console.WriteLine($"{str_is_anomaly}, max_anomaly={max_anomaly}")
125 Throw New NotImplementedException($"unmatch model-category={model.ModelCategory}")
127 Catch ex As CFviException
128 Console.WriteLine($"ErrorCode={ex.ErrorCode}, Message={ex.Message}")
129 Console.WriteLine(ex.StackTrace)
130 Catch ex As Exception
131 Console.WriteLine($"Message={ex.Message}")
132 Console.WriteLine(ex.StackTrace)
136 Private Shared Sub SimpleSampleSegmentation(modelPath As String, imagePath As String)
138 Dim has_license = PDL.Model.CheckLicense()
139 If False = has_license Then
140 Throw New Exception("no license")
143 ' モデルファイルの読込を含むコンストラクタ ( インスタンスを作成して LoadModel() をする場合と同等 )
144 Dim model As Model = New Model(modelPath)
147 Dim image As CFviImage = New CFviImage(imagePath)
150 Console.WriteLine($"backend: {model.ModelBackend}")
153 Dim is_valid_img = model.IsValidImage(image)
154 If False = is_valid_img Then
155 Throw New Exception("invalid image")
158 Select Case model.ModelCategory
159 Case ModelCategory.SemanticSegmentation ' セマンティックセグメンテーション
160 ' 検出結果の領域を表す二値画像を取得したいカテゴリ ( ラベル ) の番号をキーに持つ辞書
161 Dim category_masks = New Dictionary(Of UInteger, CFviImage)()
162 category_masks.Add(1, New CFviImage(image.HorzSize, image.VertSize, ImageType.BIN, 1)) ' 0 は背景なので、1 が最初のカテゴリ ( ラベル )
163 category_masks.Add(2, New CFviImage()) ' ペアとなる値には画像サイズやチャネル数、型の異なる画像を入力することが可能 ( 内部で自動調整されるため )
164 category_masks.Add(5, New CFviImage()) ' 連番でなくても良いので、必要なカテゴリ ( ラベル ) のみを指定することが可能
167 Dim segm_result_image = model.PredictSemanticSegmentation(image, category_masks)
168 'var segm_result_image = model.PredictSemanticSegmentation(image);
170 ' ここでは単に各カテゴリの二値画像をリージョンに変換して領域の面積のみを表示
171 For Each kv In category_masks
172 Dim category_id = kv.Key
173 Dim category_image = kv.Value
174 Dim region = New CFviRegion(category_image)
175 Console.WriteLine($"No.{category_id}: area={region.Area}")
177 Case ModelCategory.PanopticSegmentation
178 ' パノプティックセグメンテーション固有の検出パラメータの設定 ( ここではデフォルト値と同じ値を設定 )
179 model.SetPanopticSegmentationParams(1024, 0.1, 32, 0)
181 ' 検出結果の領域を表す二値画像を取得したいカテゴリ ( ラベル ) の番号をキーに持つ辞書
182 Dim category_masks = New Dictionary(Of UInteger, List(Of CFviImage))()
183 category_masks.Add(1, New List(Of CFviImage)()) ' 0 は背景なので、1 が最初のカテゴリ ( ラベル )
184 category_masks.Add(2, New List(Of CFviImage)() From {
186 }) ' ペアとなる値のリストには既に画像が存在しているリストを入力することも可能 ( 内部でリストはクリアされるため )
187 category_masks.Add(5, New List(Of CFviImage)()) ' 連番でなくても良いので、必要なカテゴリ ( ラベル ) のみを指定することが可能
190 Dim segm_result_image = model.PredictPanopticSegmentation(image, category_masks)
191 'var segm_result_image = model.PredictPanopticSegmentation(image);
193 ' ここでは単に各カテゴリの二値画像をリージョンに変換して領域の面積のみを表示
194 For Each kv In category_masks
195 Dim category_id = kv.Key
196 Dim mask_images = kv.Value
197 For i = 0 To mask_images.Count - 1
198 Dim region = New CFviRegion(mask_images(i))
199 Console.WriteLine($"category={category_id}: no.={i}, area={region.Area}")
204 Throw New NotImplementedException($"unmatch model-category={model.ModelCategory}")
206 Catch ex As CFviException
207 Console.WriteLine($"ErrorCode={ex.ErrorCode}, Message={ex.Message}")
208 Console.WriteLine(ex.StackTrace)
209 Catch ex As Exception
210 Console.WriteLine($"Message={ex.Message}")
211 Console.WriteLine(ex.StackTrace)