学習して公開する
Teachable Machine で各クラスに jump、card、clap などのわかりやすい名前を付けます。モデルをエクスポートし、共有 URL をコピーします。
TurboWarp 拡張機能 · 利用者ガイド
この拡張機能は Teachable Machine Pose、Image、Audioモデルを TurboWarp に接続します。カメラ映像またはマイク音声がラベルごとの確率になり、ラベル、スコア、真偽値としてスクリプトから利用できます。
紙芝居DSL 4.0集約ランタイム
Teachable Machine見出し直下のドキュメントボタンを押します。集約されたブロックも、
ここで説明するモデルURL、認識、プレビュー、ラベル、スコア、しきい値、ライフサイクルの
動作を保ちます。TurboWarp TM 2.0.0のパッケージ系列では公開ライフサイクルopcodeをstartRecognition、
stopRecognition、isRecognizingへ統一し、旧名は残していません。
設定可能なSVGポーズオーバーレイブロックはポーズモードで引き続き利用でき、画像モードではキーポイントなしでラベルスコアを扱います。
latest-neededモデル初期化とキャンセル制御は引き続きhost向けAPIとしてComposition APIの章で説明します。
クイックスタート
公開済みの Teachable Machine Pose、Image、Audioモデル、対応するカメラまたはマイク権限、ネットワーク接続が必要です。この拡張機能をカスタム拡張機能として読み込み、サンドボックス化せずに拡張機能を実行するを有効にしてから、次の順番でブロックを置きます。
Teachable Machine で各クラスに jump、card、clap などのわかりやすい名前を付けます。モデルをエクスポートし、共有 URL をコピーします。
モデルフォルダーの URL を貼り付けます。末尾のスラッシュがなくても自動で追加されます。
カメラまたはマイクの利用を許可します。必要なら拡張機能が必要な入力を起動し、モデルも自動で読み込みます。
最上位のラベルを読む、特定のクラスを判定する、信頼度でプロジェクトを制御する、といった使い方ができます。
動作のしくみ
認識中、この拡張機能は選択したカメラまたはマイク入力を繰り返し取得し、ブラウザー内でモデルを実行します。そして、モデルに含まれるすべてのクラスについて確率を保存します。
current label は確率が最も高いクラスです。confidence はそのクラスのスコアを小数第2位に丸めた値です。confidence of [NAME] は指定したクラスの値を返します。
カメラのキャンバスを TurboWarp のステージ上に重ねて表示します。スプライトにはなりません。また、非表示にしてもモデルへの入力は変わりません。既定は左右反転表示です。カメラの動作中でも mirrored と unmirrored を切り替えられ、認識入力の向きは変わりません。
1.11.0では、認識したPoseNetの17関節と標準12ボーンを既定でSVG表示します。表示、関節ごとの色・透明度・半径、ボーン共通の色・透明度・太さ、最小信頼度、各表示属性の信頼度連動をブロックで設定できます。
この拡張機能は、所有するカメラCanvasに通常のCanvas2D contextを使います。物理カメラによる320x240の「1回描画・1回readback」測定では、willReadFrequentlyによるend-to-endの性能向上を再現できませんでした。このhintは「1回描画・4回以上readback」という別のread-heavy条件では改善しましたが、video描画を遅くする場合があります。そのためCPU推論時にChromeのCanvas2D readback警告が表示されることがあります。他のTurboWarp Canvasは変更せず、host側の全体Canvas patchやConsole patchも不要です。
start camera はカメラを起動してプレビューを表示します。start recognition は、必要なら入力起動とモデル読込も行います。stop recognition は認識結果を消して音声リスニングを止めますが、カメラはそのまま利用できます。stop camera は認識を止め、メディアトラックを解放し、プレビューも取り除きます。hide camera preview は表示だけを変えます。認識は続けられます。Composition host
Composition APIでは、application hostが不要になったモデル要求をキャンセルしても、カメラ起動は独立して継続できます。最初の推論は、入力と登録済みモデルの両方を待ちます。
PoseNetの別々のfileに対するSHA検証は並行です。共通記述子の検証と分類器loadは重ねて進みますが、未検証byteをTensorFlowへ渡しません。カメラのgetUserMedia()とvideo.play()はモデル準備全体と並行できます。
modelInitializationPolicy: 'latest-needed'でCompositionを作り、registerPoseModel()へAbortSignalを渡します。重い要求は実行中1件と最新待機1件までです。キャンセルしたモデルはregistryへ公開しません。
結果の選び方
通常のビルドでは、現在フレームの確率を利用できます。オプションの temporalPoseScoring 機能が有効なビルドでは、より安定した判定に使える蓄積スコアも利用できます。
素早いジェスチャー向けです。フレームごとに答えが変わるため反応は速い一方、判定の境界付近では値が揺れることがあります。
label is [NAME] with confidence at least [THRESHOLD]? を使います。しきい値は 0〜1 の範囲に収まり、0.75 が試しやすい初期値です。
一定時間続けるポーズ向けです。経過時間に応じて根拠を加え、古い根拠を減衰させるため、1フレームだけの変化を抑えられます。
最も高い正のスコアがしきい値に届くまで、ポーズ名は空文字です。非表示タブでの経過時間は計算に含まれません。認識を停止するかリセットすると、蓄積値はすべて消去されます。
ブロックガイド
最初の有効な認識結果が出る前と、認識を停止した後のレポーターブロックは、空文字または 0 を返します。起動処理の調整には状態確認の真偽値ブロックが便利です。
Teachable Machine モデルを設定して、準備状態を確認します。
set model URL to [URL] はモデルを切り替え、以前読み込んだモデルを解除します。load model は model.json と metadata.json を取得します。model is loaded? は準備できているかを返します。Teachable Machine version は拡張機能のビルド情報を返します。映像の取得と認識を分けて制御できます。
start camera · stop camera · camera is running?refresh camera list で利用可能な映像入力を検出します。set camera to [CAMERA] · 既定、前面、背面、または検出済みカメラcamera count · camera device ID · camera device nameshow camera preview · hide camera previewcamera preview is visible?set camera preview opacity to [OPACITY] は透明度を 0〜1 に収めます。set camera preview position to [POSITION]set camera preview to [MIRRORING] · mirrored(左右反転、既定)または unmirrored(そのまま)camera preview mirroring は現在の設定値を返します。set pose overlay [VISIBILITY] · pose overlay is visible?set [PART] joint color [COLOR] opacity [OPACITY] radius [RADIUS]set pose bone color [COLOR] opacity [OPACITY] width [WIDTH]set pose overlay minimum confidence to [CONFIDENCE]set pose [PROPERTY] confidence scaling [STATE]カメラ名は利用許可後に初めて表示される場合があります。device ID はブラウザーと端末に固有です。動作中の切り替えでもモデル、認識状態、プレビュー設定を維持し、失敗時は以前のカメラへの復旧を試みます。
認識ループを開始し、スコアを読んで条件を判定します。
start recognition · stop recognition · recognition is running?current label · confidence · confidence of [NAME]label is [NAME]? のしきい値は 0.75 固定です。label is [NAME] with confidence at least [THRESHOLD]?起動時間を測り、失敗の理由を表示できます。
camera startup time (ms)model load time (ms)first recognition time (ms)last error は最後に発生した実行時エラーのメッセージを保持します。次のブロックは、拡張機能のビルドで temporalPoseScoring が有効な場合だけ表示されます:set accumulated pose accumulation [ACCUMULATION] decay [DECAY]、set accumulated pose threshold [THRESHOLD]、reset accumulated pose scores、accumulated pose、accumulated score、accumulated score of [NAME]。減衰係数は1秒後に残る割合(0〜1)で、認識中に変更した減衰係数は次回の認識開始時から有効になります。
トラブルシューティング
まず last error を確認してください。設定時の失敗は、権限、間違ったモデル URL、ネットワーク制限、サンドボックス内での読み込みが主な原因です。
TurboWarp ページにカメラの利用を許可し、ほかのアプリがカメラを占有していないことを確認します。ページは安全なコンテキスト(HTTPS または localhost)で実行する必要があります。その後、もう一度 start camera を実行してください。
Teachable Machine の編集画面や個別の JSON ファイルではなく、公開したモデルフォルダーの URL を使います。この拡張機能はその URL に model.json と metadata.json を追加します。jsDelivr と Teachable Machine のモデル配信先への通信が許可されていることも確認してください。
学習例の種類を増やす、全身をカメラ内に入れる、明るさを改善する、0.75 などのしきい値を試す、といった調整が有効です。蓄積ポーズブロックが表示されるビルドなら、少しの間維持するポーズに利用できます。
show camera preview を実行し、透明度を 0 より大きくして、対応する表示位置を選びます。ステージの DOM を変更したパッケージ版では、プレビューを取り付けられない場合があります。ステージ検出の失敗理由は last error で確認できます。