JavaScript(描画周りでp5.js使ってます)でPC内蔵カメラではなく、USB接続のWebカメラから映像を取得する方法を備忘録としてメモ。MediaDevices.enumeratedDevices()というWeb APIを使ってデバイスのIDを取得することができます。リンク先にもサンプルコードがありますが一応こちらにも抜粋させていただきます。
navigator.mediaDevices.enumerateDevices() .then(function(devices) { devices.forEach(function(device) { console.log(device.kind + ": " + device.label + " id = " + device.deviceId); }); }) .catch(function(err) { console.log(err.name + ": " + err.message); });
上記コードでコンソールにデバイス一覧が表示されるので、使いたいデバイスのIDを以下にようにp5.jsのcreateCapture()呼び出し時に指定してあげるとOKです。
var options = { video: { optional: [{ sourceId: 'hogehoge' // put device id }] } }; capture = createCapture(options);
……と思って久しぶりに該当箇所を動かしたらダメだったので以下に修正(すみません)。
var options = { video: { deviceId: 'hogehoge' // put device id } }; capture = createCapture(options);
ただし、私の場合は接続しているUSBカメラがMediaDevices.enumeratedDevices()でも表示されませんでした。そもそもPC側にデバイスが認識されていないようです。原因はよく分かりませんでしたが、PC再起動したり以下の手順を試したりしながらカメラを抜き差ししているうちに認識されました。
dandashokai.com
とりあえずUSBカメラ使えてよかったです。ml5.jsを試したりしています。
#ml5js × #p5js を試してみる。USBカメラをインプットとして認識してくれなくてまあまあ手こずった。お試し機械学習としては超便利。
— hahTD (@eatora22) 2019年10月24日
恐らくSOFB BOYが車のラジエーターグリルやハーモニカとして識別されていて面白かったw
ベースは @tadokoro 先生の資料を参考にしております。 pic.twitter.com/pxJJTW694Z