yolov3_video_subject1.cpp構造 - takgto/utokyo-chipathon2023 GitHub Wiki

~/Vitis-AI/examples/VART/yolov3/yolov3_video_subject1.cppの説明です。
ソースコードと見比べてください。

main関数

以下の行から始まる関数です。まずこの関数が動作して他の関数を呼び出します。
20240719_0 ベタ打ちで動画を読み出しています。VideoCapture videoに動画をキャプチャしています。
20240719_1 frameにYOLOV3処理後の画像が入ります。変数imshowで画像を表示しています。
20240719_2 変数start_timeに処理開始前の時刻を格納していて、変数show_timeに画像表示後の時刻を格納しています。
show_time - start_timeが処理時間です。
20240719_3 chrono::system_clock::now()で時刻を取得できます。例として、以下の行で処理開始前の時刻をstart_timeに格納しています。 image コメントアウトされていますが各処理時刻を格納する変数があるので、コメントアウトを外すとそれぞれの処理にかかる時間が測れます。
以下の行がコメントアウトの行です。//を行の最初に書くとその行がコメントアウトされてプログラムとして動作しません。
image //を削除すると動作するようになります。VSCodeではコメントアウトの行は緑色になります。
coutを使うとコンソールに値や文字を表示できます。以下のように記述します。
image

関数runYOLO

以下の行から始まる関数です。この関数内でYOLOV3を処理しています。
20240719_4 setInputImageForYOLOを呼び出します。
image この関数で画像をリサイズしています。 image post_processを呼び出します。
image この関数で物体検出と検出ボックスの描画をしています。
image 物体検出は以下のコードで行っています。detect関数で物体検出してboxesに格納しています。
image 検出ボックスを元の画像に上書きして描画します。 image .
.

以下の関数は使用されていませんが、yolov3_video_study.cppにあって、main関数に組み込めば使うことができます。

関数readFrame

image 動画を読み出す関数です。
fileNameのファイルを読み出してフレームの画像をoutに出力します。

関数displayFrame

image 動画を表示する関数です。
inに渡された画像を表示します。imshowが表示するコマンドです。