Vtuberのアバターとソフトウェア(プログラム)を1から作成してみた(その4)

みなさん、こんにちは。今回は自分の動きに合わせて体動くようにprocessingでプログラムを作成していきます。この記事は前回の続きです。前回の記事を読んでいない方はまずはそちらをご覧頂くとどのようにして作成しているか分かると思います。

Vtuberのアバターとソフトウェア(プログラム)を1から作成してみた(その3)
みなさん、こんにちは。本日は頭と尻尾、体を動かすプログラムを実装するところまで作成しました。プログラムと動作を紹介します。なお、この記事は前回の続きになります。前回の記事を読んでいない方はそちらを参照してくださいね。体と頭...
webカメラを用いて画像処理
画像処理クラスタリングの実装結果

記事主の顔出しをするのは抵抗があったのて、今回はグレイシアのぬいぐるみを用意して、動作確認用として使ってみました。実際に使った機材は下記の通りです。

実行時に認識対象にしていたグレイシアのぬいぐるみ
今回使用したwebカメラ

ELECOM WEBカメラ

UCAM-C310FBBK HD 720p 30FPS

今回の記事は画像処理のクラスタリングがメインのため、内容が難しくなると思われます。よって、順を追って説明していきます。

webカメラから取得した画像を読み込む

最初にやることはwebカメラから画像を表示させることです。これができなければ、画像処理以前の問題なのでささっと解説します。昔作ったプログラムを移植して作ったため、プログラムの書き方が独特なのでご了承くださいm(_ _)m

このプログラムを動作させるには、スケッチのライブラリーインポートから video ライブラリーをインポートさせる必要があります。まずはwebカメラから読み取った画像を表示させましょう。なお、カメラのサイズは320×240にしています。サイズが多くなればなるほどwebカメラの画質は良くなりますが、その分処理が重くなります。今回は特定の色の重心座標を取得するだけなので、320×240のサイズで十分です。

取得したwebカメラから各pixelのRBG値を取得する

次はwebカメラから取得した各ピクセルの色を取得し、特定の色かどうか判別します。

最初に前回の値が配列に残っている可能性があるので、初期化作業を行います。その後、各ピクセルのRBG値を取得します。今回は髪の毛の色を取得したいので、黒色を抽出します。RBGからHSV系に変換し、条件を満たす色の場合はそのピクセルの場所に値を振り分けます。条件を満たさない場合は0を振り分けていきます。

抽出した色を物体ごとに分ける

次は色ごとに分ける作業です。mapという配列に数字を振り分けていきました。隣り合った数字を確認し最も最小の数字に振り分けていきます。

各物体面積と重心座標の抽出

次に各物体の面積を求めます。この処理に来た段階では、各物体ごとで数字が振り分けられている状態になっています。物体の面積を求めるために各数字ごとの個数をカウントします。加えて、物体の重心座標を計算するため、xy座標の和も並列して計算します。

その後、各物体の重心座標を求めます。今回は面積が50pixel以上の物体のみに絞って計算します。

重心座標の決定

最後に重心座標の決定を行います。前回取得した重心座標と現在取得した各物体の重心座標との距離を測ります。最も近い重心座標を現在追っている物体であると判定し、重心座標を取得します。万が一、重心が違う物体へ移動してしまった場合、マウスクリックで好きな物体へ重心座標を選択できるように、割り込みプログラムを入れて完成です。

最後に

最後に今回作成したプログラムを前回作成したプログラムに組み込み、重心のx座標の位置からパチリスが左右に頭が傾くように設定すれば完了です。私が学生の頃、この画像処理を理解するのに1か月かかりました。がっつりプログラムの話でしたが、ここを突破できれば、自作でVチューバ―を簡易的に作成できると思います。webカメラの代金2000円ほどでできたので安価で作りたい方はぜひ参考にしてみてください。

コメント

タイトルとURLをコピーしました