Device 34 カメラに映る物体を自動認識する機械学習パッチ

基礎的な機能ブロックをつなぎ合わせることで独自のソフトウェアを構築できるCYCLING '74 Max。現在ネット上では数え切れないほどのパッチがシェアされており、それらのプレーヤーとしても活用が可能です。ここでは最先端のプロフェッショナルが作成したクールなパッチを紹介。パッチのサウンドを試聴できるほかファイルをWebよりダウンロードして、新しい音楽の制作に役立ててください。

Device 34 カメラに映る物体を自動認識する機械学習パッチ

▲プレゼンテーション・モード ▲プレゼンテーション・モード
▲パッチング・モード ▲パッチング・モード

ファイルをダウンロードする→https://github.com/yuichkun/n4m-feature-extractor

大きな可能性を秘めたNode.js

2018年にリリースされたMax 8には、さまざまな新機能が搭載されました。その中でも目玉の機能として注目を集めたのが“Node for Max”。今年の4月に開催されたCYCLING '74の公式イベントであるExpo ’74 2019では、Node for Maxのワークショップが満員になるほどの人気ぶりを見せていました。一方で、Node for Maxが内包しているNode.jsについてよく知らず、使い方が分からないという声も多く聞きます。今回はNode for Maxについての簡単な説明と、それを使って作った機械学習パッチを紹介しましょう。

Node for Maxとは、今最も人気のあるプログラミング言語の一つであるNode.jsをMax上で動かせるようにしたランタイム環境です。Maxにも以前から[js]オブジェクトがありますが、これは新しい[node.script]オブジェクトとは役割もできることも全く違いますので注意してください。

もともとJavaScriptはWebブラウザー上でのみ動作する言語でした。これをサーバー側で動作するようにし、さらにコンピューターのファイル・システムのI/O処理を加えることで約10年前に誕生したのがNode.jsです。Node.jsの大きなアドバンテージの一つが、“世の中に存在するさまざまなAPIを簡単に使用できる”ということ。APIとは、いろいろなサービス・プロバイダーが開発者向けにそのサービスの部分的な使用を可能にするインターフェースです。例えば、SoundCloudやSpotifyのAPIを使えば音楽の検索や再生ができますし、GOOGLEやMICROSOFTのAPIを使えば音声認識や画像認識が簡単に行えます。また、Node.jsにはnpmという強力なパッケージ管理システムが付いています。他人からもらったMaxパッチを動かそうとしたときに、そのパッチが依存しているエクスターナル・オブジェクトが自分のコンピューターに入っていなくて動かせない、というような状況に私は以前から大きなフラストレーションを感じていました。Node.jsでは、基本的にこういうことは起こりません。Node.jsは“npm install”というコマンド一つで、プロジェクトに必要なパッケージを確実にそれぞれのユーザー環境でインストールします。

さらに、もう一つ。Node.jsにはElectronという強力なフレームワークがあります。Electronは、Google Chromeに使われているChromiumというエンジンを内包したNode.jsライブラリーで、これを使うことで簡単にデスクトップ・アプリケーションを作れます。Electronは通常のWeb制作の技術(HTML/CSS/WebGLなど)がすべて使えるので、Maxのオブジェクトでは難しいような、多様なユーザー・インターフェースをデザインできます。作った高度なアプリケーションは、先述したnpmのおかげで、配布したどのコンピューターでもMax 8(Node.js)が入っている限り、確実に必要なライブラリーをインストールして動作します。

出力をフィルタリングした活用も可能

今回のパッチでは、ユーザーがコンピューターに覚えさせたい物体をカメラを通して提示して機械に“教える”ことで、オリジナルの物体識別器を作ることができます。なお、コンピューターに何らかのカメラ・デバイスが搭載/接続されていることが必須ですのでご注意ください。

main.maxpatを開いたら、まずは右上のボタンを押します。すると、Node for Max付属のnpmが必要なライブラリーをすべてインストールします。ボタンの下のメッセージ・オブジェクトに“completed”と表示されればインストール完了。このインストールは初回のみ必要なことなので、2回目以降はスキップして大丈夫です。左上のボタンを押すと、Electronで作られたウィンドウを開閉することができます。Electronのウィンドウを立ち上げたら、まずは覚えさせたいラベルの数をプルダウンから選択してください。今回は、“ペン”か“ペットボトル”を識別させるために、ラベルの数を2にして、入力フォームからそれぞれのラベルに名前を付けました。ラベルの右側の“学習開始”というボタンを押すと、カメラ・デバイスが毎秒4回程度の速度で連続写真を撮り始めるので、覚えさせたい対象物をさまざまな角度に動かしてみましょう。100枚程度撮ったら“学習終了”を押して、同様の動作をすべてのラベルに対して継続してください。すべての学習が終わったら、一番下の“訓練、分類開始”を押すと、訓練をして生成したモデルに基づいて、現在カメラに写っているものがどのラベルであるか識別することができます。

識別されたラベルは[node.script]のアウトレットから出力されるので、[route]オブジェクトなどでフィルタリングすることで、自在にこの識別器を活用することができます。Node.jsのデモ向けの試作なので音楽での使用を意図したパッチではありませんが、例えば自分の右腕と左腕に違うリストバンドを巻いて、それぞれをカメラにかざして識別させることでトラックや楽器、エフェクトを切り替えるキューとして使う……というようなことが考えられるかと思います。

このパッチはオープンソースなので、誰でも自由に改変/再頒布できます。GitHubでも公開中です (https://github.com/yuichkun/n4m-feature-extractor)。

余湖雄一

icon_retouched 【Profile】音楽家/エンジニア。幼少期にピアノを始め、高校時代にシカゴへの留学を経て、東京藝術大学音楽学部作曲科を卒業。現在はフリーランス・エンジニアとして仕事をする傍ら、同大学院美術研究科先端芸術表現専攻に在籍し、アートを研究している。近年は主に自動演奏ピアノを用いたアルゴリズミックな音楽を制作。
Twitterアカウント:@yuichi_yogo_ja

max_logo CYCLING '74 MaxはMI7 STOREでオーダー可能

問合せ:エムアイセブンジャパン
http://www.mi7.co.jp/