YOLOv3では、やりたいことはほとんど標準のコマンドと引数で実現できますが、「もうちょっとこうしたいんだけどなぁ」という場面もあります。
今回のゴールは、「動画のフレーム番号に対応した、検出結果のログを取り出したい(=検索で使いたいから)」です。
そのためには、次のようなことが出来ないといけません。
実は、上でリストアップした
「基本的な機能は、考え抜いたうえで、すでに用意しているので、あとの必要なことはShellプログラムや、他のスクリプトでやってくれたまい、君たち」と恐らくAlexey氏は考えられているのではなかろうか、とは当R&DセンターのM室長の言です。(Alexey氏がどう考えたか本当のところはわかりませんが...)
それでもやはり「こうしたいけれどどうすればよいのか?」と多くの悩める方たちが、Alexey氏のGithubのIssueやPull Requestで質問しているのを"英語"で読むことができます。(残念ながら、日本語で質問している人はいません。)
素晴らしいことに、Alexey氏のcソースコードをすこし魔改造して(改悪して)リビルドすれば、ちょっとしたことなら出来てしまいそうです。
実際に、私もいくつか処理を加えて、やりたいことを実現してみました。その事例を以下でご紹介します。
同じものを手にしたい方は、ページ末尾の問い合わせ先から"見積もり依頼"をお願いします。
方針:検出させたい画像のファイルリストを作成。
リストで与えたファイルフルパスからパス部分とファイル名部分を分け、Resultフォルダ内にサブディレクトリと出力ファイルを生成する。
修正箇所:detector.c 1341行目あたり~
関連情報:https://github.com/AlexeyAB/darknet/issues/1396
方針:動画のフレーム番号(頭からの連番)と検出結果をjson形式のログに出力する。
・オプション"-prefix"か"-out_filename"を指定してるときだけjsonファイルを出力
・出力先は"-prefix"か"-out_filename"の指定先と同じ(両方指定しているときは"-prefix"の方に出力)
・ファイル名は"result.json"で固定
・コマンドプロンプトへのログ出力で画像ファイル名(または連番)を表示する
修正箇所:demo.c 206行目あたり~352行目まで
方針:動画→静止画切り出し→yolo物体認識→動画保存を連続実行する
・動画→静止画はdataフォルダの下に出力
・静止画→yolo物体認識はresultsフォルダの下に出力
・yolo物体認識→動画保存はresultsフォルダの下(物体認識の静止画と同じ階層)に出力
※data、resultsフォルダの下の階層が同じになるようにフォルダを自動生成します
コマンド例
python video_2_video.py -i data/test.mp4 -o test -r 29.97
-i : 処理する動画ファイル(必須)
-r : 切り出し/動画作成時のフレームレート(必須、デフォルトは30)
-o : 出力先フォルダ名(デフォルトは"frame")
▼この記事を書いたひと
R&Dセンター 野原 佐知世
R&Dの「ちょっとしたものづくり」を主に担当。360°パノラマ、機械学習などシステム、画像処理を中心に活動しています。
●富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337
〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711 地図
交通部 R&Dセンター