前回の記事ではテンプレートマッチングでウォーリーを探してみました。
テンプレートマッチングは(ほぼ)完全にマッチするイラストしか探すことができまないので「ウォーリーを探せ」に関して言うと、まずウォーリーを見つけて画像を用意しなければならないという矛盾がありました。
完全に機械任せで見つけられないものでしょうか。
構想
- 画像内の物体を検出させる
- personと検出されたものは別途機械学習させた仕組みでウォーリーであるかどうかを判断する
イメージ的にはこういう感じで「Wally」と表示させるイメージです。
情報が多すぎて目にうるさいので「Wally」以外は表示もさせないようにしたら、なお良さそうです。
結論
結論から言いますと、この記事ではそこまで成功せず断念しました。
しかしせっかくやったので備忘録のような意味で残しておきました。
Google coraboratoryにYoloのインストール
今回、google colaboratoryでYoloを使用します。
下記のようにしたらv8が入りました。
!pip install ultralytics
import ultralytics
ultralytics.checks()
物体検出の実行
ultralytics.comで用意されている画像でテストしてみます。
!yolo predict model=yolov8n.pt source='https://ultralytics.com/images/zidane.jpg'
Ultralytics 8.3.152 🚀 Python-3.11.11 torch-2.5.1+cu124 CUDA:0 (Tesla T4, 15095MiB)
YOLOv8n summary (fused): 72 layers, 3,151,904 parameters, 0 gradients, 8.7 GFLOPs
Found https://ultralytics.com/images/zidane.jpg locally at zidane.jpg
image 1/1 /content/zidane.jpg: 384x640 2 persons, 1 tie, 75.6ms
Speed: 3.6ms preprocess, 75.6ms inference, 172.8ms postprocess per image at shape (1, 3, 384, 640)
Results saved to runs/detect/predict
💡 Learn more at https://docs.ultralytics.com/modes/predict
メッセージの通り、runs/detect/predictの中に結果が作成されました。


フリー素材でやってみます。小さいにも関わらず人間がちゃんと認識されています。人間以外にも車、自転車、赤信号などが認識されています。

認識している物体から見て、自動運転車の用途が意識されてそうです。(実際、開発中の自動運転車のニュースなどでよく見かけるやつですね)
自動運転車用途色が強いのが影響しているのかどうか不明ですが、イラストの人間はテディベアと認識されました。笑

Yoloで「ウォーリーを探せ」を物体検出してみる
冒頭の動画(リアルタイム検知)ではうまく「person」を検出してくれていましたが、結論から言いますと今回は何も検出されませんでした。

動画を見なおしてみると、かなり接近させたときにようやく認識されていることに気が付きました。
人物のサイズが影響してそうです。
そこで人間のサイズが高さ10cmくらいになるように、この部分だけを拡大してみました。
ようやく何人かが認識されていますが、肝心のウォーリーはまだpersonとして認識されていません。
もっと拡大すれば期待できそうです。

それを踏まえて、全体サイズをこのように検討しました。
- 縦横サイズ約283cm × 約200cm
- 解像度600 dot/cm(1cmあたり600ドットの解像度)
しかしこれには問題がありました。
情報量がが大きすぎてjpgでは保存できません。tifなら保存可能そうですが、「tifで保存できる上限(4GB)に達してしまうかもしれない」という注意ダイアログが出たので中止しました。
Yolo v5にダウングレードしてみる
実は冒頭の動画は、2021年ごろにYolo v5でやったものです。
v5ならうまく「person」で認識されるのかも知れないと思って試してみましたが、同じ結果でした。
v5の入れ方
!git clone https://github.com/ultralytics/yolov5
%cd yolov5
!pip install -r requirements.txt
まとめ
いったん今回はここで断念することにしました。
- 一人の人物のサイズが10cmくらいの大きさになるまで拡大する必要あり
- ただしそうしてしまうと絵本の見開きを2.8m × 2.0mくらいで作る必要があり、ファイルの保存形式に課題が出る
jpgでは保存できない。描画形式を圧縮したtifなら保存可能だがファイルの上限4GBを越えてしまう可能性がある - カメラを使ったリアルタイムな認識なら画像の保存も不要だし、接写もできるのでこれらの問題を解決できるかもしれない
コメント