カワリモノ息子の技術メモ的な~

カワリモノ息子とその母の技術メモ的な〜

学校が苦手な息子くんの作品とその母の作品、はたまた日常などいろいろを在宅エンジニア母が綴る

中1息子くんOpenCVでリアルタイムトラッキングやってみた

【2020/5/18 更新あり】:「その後」セクション追加しました

ラッキング

やりたい開発について何か思うところがあったようで、息子くん先日トラッキングの勉強をしていました。
おもしろい成果物ができていたので、今日はそれについて書こうと思います。

ブログを書くにあたって私は詳しくないので息子先生に内容をよく教えてもらいました。
テクノロジーの大きなジャンルを広く理解しようとしている息子くんすごいなと改めて思いました。日常生活には難ありだけど・・・プラマイでプラスかなと思います。

ここでいうトラッキングとは、モノを認識してそれを追従する手法のことを指します。

f:id:toriko0413:20200515104908p:plain

OpenCVとは

OpenCVオープンソースのライブラリで、この中にコンピューターで画像や動画を処理するのに必要な機能が入っています。機械学習とかも入ってます。
今回はこれを使ってトラッキングをやってみたそう。

そういえばOpenCVって前にも息子くんから聞いたことがあったような・・・
あっ2年前にブログ書いてた!

siroitori.hatenablog.com

こんなブログ書いてたこと本気で忘れてました。
そして読んで懐かしみました。

『行き詰った時に「おかあさんも調べて!」とギャーギャー怒り出す』って!
そんな時代もあったな~~~、って感じです!

今では行き詰ると機嫌は悪くなるものの、私にしつこくあたってくるようなことは無くなりました。
多分今では「私に聞いてわかるくらいならネットで調べた方が断然解決する」という認識だと思われます^^;;
成長を感じました。

と、それは置いといて。
2年前にも息子くんOpenCVやってみてたんですね。本人はちゃんと覚えていました。

プログラムを動かしてみた

わりと前の記事のようですが、こちらを参考にしたとのこと。
ensekitt.hatenablog.com

この記事内にある実装例のサンプルコード(python)をまるぱくで大丈夫だったとのこと。

これを動かすとこうなりました。(ちょっと見づらいですけど・・)

この動画にはありませんが、まず最初に写真でピンクのメルくんマスコットを認識させています。

その次に上記動画の操作になるのですが、Macのインカメラでうつしているリアルタイムの動画からピンクのメルくんマスコットを認識すると緑色の四角い枠で囲むという処理をしています。

こうすることでずっとピンクメルくんを追いかけていく感じになってます。

ラッキングの種類について

OpenCVで使えるトラッキングにもいろいろと種類があるそうです。

というのは、上記参考にさせていただいた記事の中にも詳しく書いてあるのですが、以下の種類が存在するそうです。

  • Boosting
  • MIL(Multiple Instance Learning)
  • KCF(Kernelized Correlation Filters)
  • TLD(Tracking, learning and detection)
  • MedianFlow
  • GOTURN

今回のピンクメルくんトラッキング「KCF」を使ったそうです。

それぞれ認識させるアルゴリズムが違っているみたいで、じゃあそれぞれ使ったら具体的にどんなふうになるのかというと息子くんが、「これがわかりやすいよ」ってYouTubeを教えてくれました。

www.youtube.com

めっちゃ全部英語やけど!
息子くんは調べ物はほとんど英語で、リスニング力鍛えられてるようです。

この動画を見ると、各種類のトラッキングでレーシングカーの動画とかチャップリンの動画とかどういうふうに認識されるかがわかります。
また、対象物が一時的に隠れてしまった場合どうなるかというのも説明してあります。

ラッキングできたら

ラッキングできたらこんなことができるようになるんですよね。すごい!

www.youtube.com

息子くんのやりたいことは果たして何なのか私にもよくわかっていないのですが、また何か進捗がありましたらブログでお知らせしたいです^^

その後

【2020/5/18 更新】
(この続きの話、長くなるかなと思いきやそう長くならなかったのでここに追加することにしました!)

息子くん、これをゲームを遊ぶためのツールにできないかなとたくらんでいたみたいなんです。
シューティングゲームだったらシューティングする対象を認識させてリアルタイムトラッキングしたら、常にロックオンできそうって!たしかに!

Twitter動画、上:Roblox、下:Scratch

Roblox

上のほうの動画、ロブロックスでトラッキングを行った場合、ピンクメルくんのトラッキングのときに使用した「KCF」ではどうにも認識ができずいろいろなトラッキングの種類を試した結果TLDが一番認識が良かったのでそれを使用しました。
しかしTLDを使ってもロブロックスではラッキングが外れる(四角の枠が外れる)ことが多々。キャラクターが3Dということがあるのでしょう。

Scratch

2DゲームのScratchではなかなか良い感じでした。

結論

Robloxをはじめとする3Dゲームでは使えなさそう。2Dゲームでは使えるかも?なにかよさそうなゲームがあったら試してみたいです。
悪いことには使わないです。はい。

関連記事

ピンクのメルくんマスコット、ちょいちょい登場しています。
siroitori.hatenablog.com
siroitori.hatenablog.com