物体検出でのラベル表示方法について
7 views (last 30 days)
Show older comments
こんにちは。
学習し終えた物体検出器(Faster R-CNNやYOLOv2)を動画像を用いて検証を行っております。その際に、検出した物体のラベルを動画像上に表示させたく以下のようにプログラムしたのですが、エラーが発生してしまいます。原因としては、物体が検出されないためラベルも検出されずエラーが起き動画がストップしてしまいます。
物体が検出された場合のみラベルを表示されるには、どのようにすれば宜しいでしょうか。
よろしくお願いいたします。
[bboxes, score, label] = detect(rcnn, videoFrame,'NumStrongestRegions', 50,'MaxSize',[106 106]);
[selectedBbox,selectedScore,index] = selectStrongestBbox(bboxes,score, 'RatioType','Min', ...
'OverlapThreshold',0.5);
idx = selectedScore > 0.90
videoFrame = insertObjectAnnotation(videoFrame,'rectangle',...
selectedBbox(idx,:), cellstr(label(idx)), 'color','r');
このコードを実行すると以下のようなエラーが発生してしまいます。
エラー: insertObjectAnnotation
LABELは空以外にする必要があります。
エラー: insertObjectAnnotation>checkLabel (line 300)
validateattributes(label,{'cell'}, {'nonempty', 'vector'}, ...
エラー: insertObjectAnnotation>validateAndParseInputs (line 180)
checkLabel(label);
エラー: insertObjectAnnotation (line 123)
validateAndParseInputs(I, shape, position, label, varargin{:});
エラー: RCNNVideoRead_2 (line 60)
videoFrame = insertObjectAnnotation(videoFrame,'rectangle',...
0 Comments
Accepted Answer
Kenta
on 29 Sep 2020
こんにちは、if size(bbox,1)>0
など、if文を作るとよいです。
9 Comments
Kenta
on 29 Sep 2020
idx = selectedScore > 0.90
videoFrame = insertObjectAnnotation(videoFrame,'rectangle',...
selectedBbox(idx,:), cellstr(label(idx)), 'color','r');
例えば、こちらの例にあわせると、if numel(find(idx==1)) > 0
とすれば、(またはsize(x,1)の形でも同じ意味)idxが1、つまりスコアが0.9以上のものがある場合IF以下の文を実行するという意味になります。例えば画像中に犬らしきものが3つあって、それが0.8, 0.85, 0.91というスコアで検出されたならば、numel(find(idx==1))の値は1になります。
そして、もし信頼度が0.9以上のものがなかった場合は、BBOXも空になって、そのあとでエラーになるので、この値が0 より大きい、ということが偽の場合はバウンディングボックスを出す工程がスキップされるのでエラーなく次のフレームに移ることができます。
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!