見出し画像

完全素人な大学生。Yolo-v8で画像認識をやってみた。

こんばんは、僕です。

年も明け、後期の成績が確定する時期になりました。
その中で、プログラミングの単位が危機的状況。

日頃の行いが悪く、小テストをサボりにサボりまくっていたためこのままでは落単という事態になっていました。(薄々年末から気づいていたけれど見て見ぬふりをしていた)

これを挽回して単位を強奪するためには、"最終課題"という名の自由課題で20点中17点以上を取る必要が。なかなかにハードな条件です。

授業をまともに受けていなかったので、PythonのPの字もわからない状態。来年の再履修を悟りました。

が、せっかくなら凄そうなことやってみようということで前々から気になっていたYoloというブツを使ってみることに。ヨーロというのは、俗にいう”画像認識”をしてくれるアルゴリズムで、誰でも無料で使えます。これを使えばなんか面白そうな物ができるのでは?と崖っぷちで閃きました。

これだけではなんとも味気ないので、これにPythonで地図を出力できるfoliumというモジュールを用いて、こんなのを作ろうと思います。↓


ネット上に転がっているライブカメラの映像を拝借して、これに画像認識をかませれば各地点の混雑度マップを作成できるんじゃね?ってことです。

言葉にすると大層なことをするように見えますが、意外と中身は簡単に作れました。↓


大まかな流れはこんな感じ。

requestモジュールを使って、ライブカメラ映像を自動ダウンロード、そしてその動画の拡張子をyoloに対応した形に変換(ffmpegを使用)、そしてyoloに噛ませて数値データを取得、そこから地図にプロットという流れ。

画像認識はなかなかに処理が重く、時間がかかってしまうので今回は一点だけをモニタニングすることに。ただ、このコードを複製していけば何地点でも追加可能です。

が、最初のステップで躓きます。なんと動画がダウンロードできないではないですか。

どうやら、拝借しようとしたライブカメラ映像のサイトが古く(?)SSL証明書の関係でエラーが出てしまいました。一応解決方法はネットで見つけたので、それを実行して見たのですがAppleのicloudキーチェーンとやらに阻まれ失敗。しょうがなく動画のダウンロードは手動ですることにしました。

見事に出鼻をくじかれたわけですが、ここで心を折ってしまうと来年の再履修がチラついてくるのでやるしかありません。

次は拡張子の変換なのですが、素人すぎてそもそものモジュールの導入に一苦労。ffmpegを入れる前のhomebrew(インストーラ的なもの)の導入にめちゃくちゃ手を焼きました。まあこれは無事に完了。

あとはもう簡単です、yoloに動画を食べさせてあげて、その分析データをこちらで回収するだけです。


yoloは動画から物体認識をする際、動画をコマ割りにしてそれぞれの場面ごとに画像認識を行うらしく、10秒ほどの動画に対して150個の分析結果を返してくれます。

テキストファイルが150個生成されるので、その中から車の検出データを抜き取っていきます。↑

そしてこれを数値化して地図データにプロットしていけば….


ちゃんとできましたね。嬉
ちなみに、このピンの色は混雑度に応じて変化します。結構混んでるのでこの時は赤になってますね。

ちなみに、画像認識の結果はこんな感じ↓

よくみると結構ガバガバ。今回はトラックと車の区別はつけていないので、ここの認識ミスは混雑度データに影響していませんが、画面左の車両は認識されていません。ただ、これは追加でyoloにデータを与えてあげることで認識精度を向上させれば解決しそう。

ただ、画像ベースなので夜間や悪天候の際はデータが取得されないのが難点。。

最初から分かってはいたことですがね笑

まあ何はともあれ面白いものができたのでヨシとしましょう。
完全にPython素人だった自分でも、ネットで検索しまくればなかなかサマになりました。

そして肝心の評価結果ですが… 20/20点(満点)で単位ゲット🥳
やった甲斐がありました。

yoloに関してはまだまだ面白い使い方ができそう。今後も触って見たいなーと。やってみると面白い。

ということで、無事単位取れたよーって話でした。

今日も最後まで読んでくださりありがとうございました🙇‍♂️

スキとフォローもよろしくお願いします👋

それじゃまた。


金欠大学生の食費になります()