#はじめに
本記事はこちらでYOLOv3+Tensorflow+Kerasの環境構築を行っていた際につまづいた点について書きます。
##目的
qiita.py
python yolo_video.py --input hoge1.mp4 --output hoge2.mp4
を実行し、うまく処理が続いたと思っていたところ最後にやってきたエラー…そう、
qiita.py
Traceback (most recent call last):
File "yolo_video.py", line 75, in <module>
detect_video(YOLO(**vars(FLAGS)), FLAGS.input, FLAGS.output)
File "C:\Users\Shota\OneDrive\Workplace\keras-yolo3-master\yolo.py", line 191, in detect_video
image = Image.fromarray(frame)
File "C:\Anaconda3\envs\keras\lib\site-packages\PIL\Image.py", line 2453, in fromarray
arr = obj.__array_interface__
AttributeError: 'NoneType' object has no attribute '__array_interface__'
これを解決します。
##解決方法
最終フレーム(の後?)だけ変数frameがNoneType型になるみたいなので、その時の例外処理を書きたせば良いと思いました。
yolo.pyの190行目の次の行に
qiita.py
if type(frame) == type(None): break
を挟むことで、強引にループを抜けたところ、最後までプログラムが動いてくれて、出力動画を得られました。
##ところで
メインの処理は今回ハマったところであるdetect_video関数だと思うのですが、この中のwhileループを抜ける手段が配布されたプログラムのままだとキーボード入力"q"しかないので、他の人は全員エラーが出る前にqを押しているのかなーと思ったり。