見出し画像

大人の自由研究。プログラミングが表現力をくれた。

日々、なにをしたら自分自身を楽しませることができるか、考えながら生活している。

そういう思考になったのは、自身で表現する方法を身に着けてからだと思う。今の私の表現の根幹にあるのは、高校一年生から始めたジャグリングだが、日常的に思いついたアイディアをアウトプットできるようになったのは、大学院生のときに身に着けたプログラミングのおかげである。

0. 始まりは投資コンテスト(2021年9月)

2021年の夏に友だちに誘われて、東工大の生命理工学院の学生3人と環境社会学院(金融系)の学生1人の合計4人で、BloombergのESG投資コンテストに参加した。ESGというのが、EnvironmentとSocialとGovernanceの略で、ただ利益を追求するだけでなくて、環境や社会のためになるような、企業が持続可能な形で投資をしていきましょう、という最近の投資の考え方らしい。このESG投資においては、銘柄の選抜方法は様々あっていい、という雰囲気で、理系学徒の我々にとってはどこか生ぬるい感じがしていた。そこで我々は、シンプルに「ここ数年で、利益を上げながらも、温室効果ガスの削減に成功している銘柄」をBloombergのデータベースから抽出して、それを報告することにした。

大学院生で普段はみんな忙しかったので、夏休みに3日ぐらいAirbnbで代官山のホテルを借りて、レポート作成のための合宿を企画した。Bloombergのデータベースから各企業の売上高の変化と温室効果ガス排出量の年間データを取得し、上記のスクリーニングを行った。このときに初めてPythonの表計算ツールのPandasをちょこちょこつかってコーディングの基礎を学んだ。

このバカ単純な=naiveな考え方が評価されて(?)、レポート賞をいただくことができた。その当時のレポートは今でも読めるのでぜひ。金融の観点からまともなことを書けているのかはわからない。(ただ、生物学徒の友達がこれを持って就活したところ、金融系企業に就職できたというので、ある程度すごいのかもしれない。)



https://assets.bbhub.io/company/sites/59/2022/01/2021_Bloomberg_ESG_Investment_Report.pdf
これをきっかけに、研究でも大きなデータ(RNA-seqデータ)を取り扱うのにPythonをつかって馴染んでいった。今回の記事では、プログラミングベースで(一部全く異なる)近年取り組んだ「大人の自由研究」を紹介したい。(パラパラ眺めてほしい)


1. 箱の物体認識プログラム (2021年12月)

その年の冬、趣味のジャグリングのオブジェクト、シガーボックスの箱認識をここ試みた。アルゴリズムとしては、ある色を認識して箱様の物体を検出する、というもの。いわゆる最近流行りの機械学習のアルゴリズムは使っていないので、物体認識に知見のある人からすると全然すごくない。ただ、Pythonを書き始めてから数ヶ月でここまで実装できたのは、今から考えても急成長だと自身でも思う。このときに画像を取り扱う手法としてOpen CVを習得した。そしてこのときから、大人の自由研究をコンスタントにやろうと思った。

Version1

Version2

2. KPOPダンス棒人間化。ダンスの最小単位はなにか。 (2022年2月)

動画ファイルも画像の結合からなるだけであるということを上で知った。当たり前な事実だけれども、動画ファイルを1秒あたり30枚の画像に分けて処理をするという作業を通して、その事実を実感した。次にやってみようと思ったのが、アニメーションづくり。アニメーションづくりと言っても、絵が特段上手だというわけでもないし、研究の合間を縫って遊びでやるだけなので、手の凝ったものは作れない。そこで、当時ハマってたKPOPのダンス(Kep1erのヨンウンの英雄)を棒人間で表現してどこまでダンスの「感じ」が残せるか実験してみることにした。元の動画をPythonコードで画像に分解し、フレーム数を30/sから10/sに落として、その画像をパワポに貼り付けていって体の線と顔の向きをiPadのパワポのアプリで10フレームx11秒=110枚分なぞり、Pythonコードで再度その画像を結合するという、原始的な手法でアニメーションを作ることができた。面白かったのが、手足の線と顔の向きを十字で表現するだけで、オリジナルの動きを大体保存できていた。ダンスって顔と手足の動きしか見ていないのかもしれない。

元動画


3. ジャグリングの多視点撮影(2022年8月)

こういったプログラミングベースの表現をしたくなったのは、私が好きなPerfumeがそのような演出をよくやるからである。Perfumeの演出はライゾマティクスというクリエイター集団がいつも担当している。そのなかでも傑作だと思うのが、次の作品。

現場にはたくさんカメラがあって、そのカメラでPerfumeを撮っている。各視点の間でおそらく事前の位置調整をしてあって、リアルタイムでカメラの切り替え&間に時々3Dモデルの映像を挟んで、現実と仮想を行き来している。私はこの技術のなかでも、カメラをスムーズに切り替えるという発送と技術がシンプルでおもしろく、好きだった。そこで今回、この仕組みを全部手作りで作って、趣味のジャグリングを撮ってみようと思った。

まず必要なのがたくさんのカメラだった。別視点で撮影した映像の間に色や拡大率などに違いが出るとまずいので、同じ規格のカメラを5個以上用意する必要があった。最初はWebカメラを考えたが、Webカメラを5個買おうとすると、1個3000円x5=15000円もする。そこで古いiphoneを大量に買うという考えが思いついた。メルカリで1個辺り1000-2000円で売っていたので5個ぐらい買っても10000円越えなかった。楽天で安いスマホスタンドを買って近くの公園で撮影してみた。

画像をスイッチングするための技術を作るのが大変だった。これらの動画は時間軸と位置の2つの観点から位置あわせを行う必要があった。最初は音声ファイルの波形が同期するタイミングを探すコードを書いたが、動画は合わなかった。多少音が届くタイミングが違うようだった。ある程度音で合わせ、各視点で撮った動画を並べて1フレームずつ合わせることで時間軸を合わせた。位置情報についてはもっとも高い箱の座標を取得して、その位置で揃えた。あとは、面白いと思えるようなタイミングで動画を切り替えた。このタイミングを探すのが結構難しい。単純に画面を切り替えるだけでは面白い映像は作れない。最終的には結構満足の行くものを作れた↓ 撮影道具を集めるところからはじめ、1つのシステムを作れたのが達成感があった。コーディングの部分で学んだのは、全てのものを自動がする必要はなくて、マニュアルで調整するためのインターラクティブな仕組みを自分で作ってしまえば効率的に作りたいものが作れる。この当時、動画編集はOpenCV一強論をラボの仲間に提唱していた。(未だにAdobeの動画編集ソフトを使わないようにしてる)

4. 次世代のストレージは紙(2022年11月)

近年、マイクロソフトがDNA storageに力を入れているという話を聞いて、ラボの先輩と雑談していた。背景としては、近年、デジタルデータの量が指数的に増えていて、すべてのデータは保存できなくなってきているらしい。現在は磁気ストレージ(HDD)、光学ストレージ(Blu-ray)、Solid State Disc(SSD)がメインで使われているけれども足りないということである。より密度たかく、長期間保存できて、エネルギーコストの良い次世代のストレージとしてDNA stroageが期待されているということであった(2022当時の調査なので今は多少状況がことなるかもしれない)。

でも、DNAを実験で扱っている我々からすると、DNAにデータを格納したとして、それを読み出すのも書き込むのも時間が掛かるし、取り扱いが面倒だと思った。議論の結果、実は紙が一番いいのではないかという結論に至った。QR決済で流行っているQRコードというのは読み出しが早く、コピー機のような装置に紙を置くだけでよCD、DVDのように読み出しができる。古代のパピルスも数千年間保存できてきたわけだし、保存性の良い紙を開発できれば、先に上げたSSDなどの既存のストレージよりも長持ちするかもしれない。その紙の取り出し&貯蔵&スキャニングする巨大なシステムが開発できればグーグルのストレージのような最強のストレージになるかもしれない。そう考え、1280x720のjpg画像(110KB)をデコードしてQRコードにエンコードし直して並べて印刷してみた。 画像を印刷してそのまま保存しておいたほうがいいじゃん(終)

1280x720のjpg画像(110KB)をデコードしてQRコードにエンコードし直して並べた

5. 物理演算を利用したMy Homepage(2022年12月)

自分の自由研究やメインの研究(普段は微生物の代謝の研究をしている)を発信するため、自分のホームページを作ろうと思い至った。ただ作るだけではつまらんと思い、物理演算をhtmlサイト上で動かすのを勉強した。HPのメインページをブロックにして、それぞれインスタやTwitterなどのリンクをひも付けた。それぞれのブロックをスマホなどでも指で動かせるインターラクティブなサイトを作った。(作ったのに満足して運用できていない)

6. 音の波形と音階の関係性を可視化する(2022年12月)

高校で物理の授業で音は波であるということを習っていたが、いまいちピンときていなかった。では、いろいろな音が混ざっている和音やそれらが連続する音楽はどうなっているのか。それを理解する手がかりがフーリエ変換という数学らしかった。色んな音楽をフーリエ変換していったところ、マライア・キャリーのAll I Want for Christmas is Youという曲でわかりやすい結果を得られた。

上段がいわゆる音波(横軸時間、縦軸強度)で、和音や連続する音というのが合成関数として出力されているらしい。下段はそれをフーリエ変換していて、横軸に音の周波数、縦軸に強度を取っている。下段では右に行くほど音階が高くなっていて、ピアノの鍵盤のように音階順に並べ替えられている。特に最初の方のトライアングル?の音はきれいに音階が取れている。これはたぶんサイン波の形に近い波形であるためだろう。人の声は倍音と言ってオクターブ違いのシグナルが同時に出てしまっていて少し複雑。打楽器はもっとカオス。この遊びで、身近な音楽というものとフーリエ変換を紐づけることができたのが個人的な発見だった。

7. KPOPグループaespaのメンバーの顔を自動ラベリング(2022年12月)

あるKPOPのグループに新しくハマったとき、メンバーの顔を認識するのが一番大変。特にダンス踊ってるときってフォーメーションが変わって誰がどこにいるのかわからなくなる。自動でラベリングする方法を考えてみた。よくあるような教師学習の後に誰の顔かを推論するではなくて、クラスタリング解析(k-means)で先に顔を分類してしまって、後でこの人はこの人というように一度紐づけしてしまえば、全部(大体)ラベリングできるというもの。当時めちゃめちゃハマっていたaespaのSavageの動画を使ってみた。

NiziUは9人もいてラベリングが難しいようだった。それにしてもPCAプロットは結構分離できるのが面白い。

8. ポケモンのお年玉袋をウェブスクレイピングで作る(2023年1月)

小学生のいとこがポケモンにハマっていると聞いたので、ポケモンのゲームの攻略サイトの画像をスクレイピングして印刷し、お年玉袋にした(当時の自分が欲しいものを作った)。いとこに渡したときに片っ端からポケモンの名前を読み上げてくれたのが嬉しかった。

9. KPOP歌詞の文法解説動画 with Chat-GPT(2023年5月)

KPOPに触れているとやはり韓国語を勉強してみたいと思う。特に韓国語の歌詞の意味から勉強と思う。でも新しい言語を学ぶときってどこからどこまでが1つの単語であるのか、さらに文の構造において何の品詞であるのかがわからないと作文の仕組みがわからない。紙の上で歌詞を訳していたときは、ひとまずセンテンスを全部google翻訳にいれて、一文字ずつ削って、どの単語がどの意味をなしているのかを理解し、もう一度その単語をgoogle検索して意味を確定していっていた。

この一連のプロセスは学びのためには重要だと思うが、結構時間がかかる。それを一気に自動化してみた。当時Chat-GPTが流行りはじめてたので彼(彼女?)も使った。ネットからまず歌詞を取得。センテンスを書く品詞に区切らせて、その品詞、単語の意味、単語の読みを表の形式で出力させた。あとは得意のOpenCVの動画編集できれいにまとめた。歌詞を表示するタイミングも音声認識でやってみたが、どうしてもずれるので、センテンスごとに出現のタイミングをマニュアルで記録するコードを作った。今だ!と思ったらenterボタンを押すという単純バカ(naive)な仕組みだったが、一曲文の時間で歌詞をラベリング出来るので十分だった。ここら辺から言語の違いをテーマに扱う面白さに気づきはじめたと思う。


10. 韓国語字幕to日本語字幕、韓国語音声to日本語字幕(2023年8月、11月)

Kpopのバラエティー系のコンテンツを見ていると、時々日本語翻訳がないことがあった。まず一つ目のパターンとしては、韓国語字幕はあるけど、日本語字幕がないという場合。この場合は韓国語の字幕をOCRで検出して、それを自動翻訳すればいい。全フレームについて、そのフレーム全体をOCRにかけるのでは計算量が多すぎるので、韓国語字幕のある下の部分を切り取って、数フレームに一回OCRしてgoogle translationするコードを書いて計算量を押さえた。

2つめのパターンは韓国語字幕もついておらず、音声しかない場合である。音声から韓国語をtranscribeするのをopenAIのWhisperというモジュールを用いて行い、google google translationするコードを書いた。Whisperでは言葉を認識したタイミングも出力してくれるので、そのタイミングとフレーム番号を同期して表示した。時々言葉の音声認識のミスがあるが、動画の内容を理解するのには十分だろう。

11.  KPOPグループLE SSERAFIMのメンバーのお顔のクラスタリング(2023年9月)

Kpopアイドルの顔の特徴量をとったときにクラスタリングしたらメンバーごとに分類されるのか、確認してみた実験。前回のkmeansを用いた手法と同様、face recognitionとよばれる学習済みのモデルを使って顔の特徴量を1×128の変数に落とし込み、その値を使ってクラスタリングしてみたところ、大方クラスタリングされた。一部、チェウォンとウンチェが分類できていないのが面白い。人間が見ても似ている。どのパラメータが重要だとか調べることも出来そう。

12. トスジャグリングの物理を可視化する(2023年10月)

ジャグリングの物理を可視化してみたいと思ってやってみた。まず箱の位置をとってその点の移動速度と加速度を計算して可視化した。箱の位置はマニュアルで取得する便利ツールを作って取得しており、自動検出はしていない(自動検出では加速度の計算がきれいにできない)。重力や遠心力などを可視化できた。

13. ジャグリングシミュレーションChaotic Poi Spinner(2024年6月)

ジャグリングのポイという道具は二重振り子みたいだなって思った。二重振り子は初期の位置や速度の条件の違いによって挙動が大きく異なるChaoticな挙動を示す。ポイスピナーの両手で異なる初期値を与えてあげて、その性質を表現した。人間のポイスピナーでは見たことがない、狂ったChaoticな動きを見れるのが面白い。こういったシミュレーションベースで新しい技が見いだされたら面白いだろう。

14. 自分なりにPerfumeのデジタルな演出を考えてみたい(2024年7月)

15. ジャグリングの軌道をデコレートする(2024年10月)

ジャグリングのオブジェクトの認識を機械学習でやるにしても、その後に面白いアウトプットがないとやる意義がない。今回はジャグリングの軌道をとったときにどんなアートが考えられるか、考えてみたいと思った。

まずはクラブという道具で検討してみた。ひとまずはマニュアルで特定のフレームのクラブのエッジの位置を取得した。クラブのいた位置を残していくようなデザインを試みたら面白い軌跡がとれた。クラブの中心は放物線を描いているが、クラブの中心がクラブ自体のど真ん中にないために、クラブ自体の軌跡は異なる輪郭を示す。高校数学で習うサイクロイドのようだ(重心だからセントロイドか)。

次に試したのがボールジャグリング。これもマニュアルで点をとった。それぞれのボールに私の名前のアルファベットを割り当てた。どこかテクノロジー感があって面白い。

でもこれ以上アイデアはあまり思いつかなかった。機械学習の物体認識をやるほどの苦労は要らなかった。面白い映像を作ることが目標であるならマニュアルでいいのかもしれない。

おわりに

以上がここ数年で私が取り組んだ自由研究である。子供の頃は自由研究なんてやりたいこと思いつかないし億劫であったが、大人になってからやりたいことがポンポン思い付く。今回はプログラミングベースの話をまとめたけれども、noteにあげている記事一つ一つが私にとっては自由研究である。自分が見たいものは自分で作るしかない。自分で自分は何が面白いと思ってるのか考え、思いついたとき、実行できたときがとにかく楽しい。それを面白がってくれる仲間がいたらなお嬉しい。たぶん一生そうやって生きていくんだと思う。


いいなと思ったら応援しよう!

この記事が参加している募集