JavaScript チュートリアル: Web アプリケーションに顔検出機能を追加する

JavaScript チュートリアル: Web アプリケーションに顔検出機能を追加する

[51CTO.com クイック翻訳] 先週、annyang を使用してマップ インターフェースに音声コマンドを追加しました (https://www.infoworld.com/article/3400658/javascript-tutorial-add-speech-recognition-to-your-web-app.html)。今週は、pico.js を使用してシンプルなヘッド トラッキング機能を追加することで、マルチモーダル インターフェイスをさらに強化します。 pico.js は、実稼働グレードのライブラリというよりは概念実証に近い、シンプルな JavaScript ライブラリですが、私が調査した顔検出ライブラリの中で最もよく機能するようです。

[[269281]]

この記事の目的は、ユーザーの頭の位置を地図上に重ねて表示するシンプルな赤い点から始めることです。

図1

まず、ユーザーの顔の位置の更新を取得するために使用できる pico.js 機能をラップするシンプルな React クラスを作成しましょう。

  1. <ReactPico onFaceFound={(face) => {this.setState({face})}} />

顔が検出された場合は、顔の位置の詳細を含むコンポーネントをレンダリングできます。

  1. {face && <FaceIndicator x={face.totalX} y={face.totalY} />}}

pico.js で最初に直面した課題は、それが JavaScript で実装された研究プロジェクトであり、必ずしも最新の JavaScript 標準に準拠した製品レベルのライブラリではなかったことです。とりわけ、これは yarn add picojs を実行できないことを意味します。 pico.js の紹介ではオブジェクト検出について詳しく説明されていますが、API ドキュメントというよりは研究論文のような内容になっています。ただし、実際にコードを使用するには、添付の例で十分です。数時間かけて、添付のサンプルを、コードを最大限に活用できる比較的シンプルな React クラスに組み込みました。

pico.js が最初に行うことは、カスケード モデルを読み込むことです。これには、顔に対して事前トレーニングされたモデルのバイナリ表現を取得するために AJAX 呼び出しが必要です。 (同じライブラリを使用して他の種類のオブジェクトを追跡することもできますが、カスタム モデルをトレーニングするには公式の pico 実装を使用する必要があります。) このモデル読み込みコードを componentDidMount ライフサイクル メソッドに配置できます。わかりやすくするために、サンプル コードをさらに抽象化して、loadFaceFinder という別のメソッドにしました。

  1. コンポーネントマウント() {
  2. FaceFinder をロードします。
  3. }
  4. フェイスファインダーをロードする(){
  5. const cascadeurl = 'https://raw.githubusercontent.com/nenadmarkus/pico/c2e81f9d23cc11d1a612fd21e4f9de0921a5d0d9/rnt/cascades/facefinder' ;
  6. fetch (cascadeurl).then ( (response) => {
  7. response.arrayBuffer(). then ((buffer) => {
  8. var bytes = new Int8Array(バッファ);
  9. this.setState({
  10. フェイスファインダー: pico.unpack_cascade(バイト)
  11. });
  12. 新しい camvas(this.canvasRef. current .getContext( '2d' ), this.processVideo);
  13. });
  14. });
  15. }

顔検出モデルのバイナリ表現を取得して解析し、状態を設定することに加えて、<canvas> コンテキストとコールバック ハンドラーを参照する新しい camvas も作成します。 camvas ライブラリは、ユーザーのウェブカメラからのビデオをキャンバスに読み込み、レンダリングされるフレームごとにハンドラーを呼び出します。 loadFaceFinder の内容は、pico.js が提供する参照プロジェクトのほぼ正確なコピーです。状態からアクセスできるように、モデルの保存場所を変更しました。ブラウザが提供する DOM API を使用する代わりに、 react Ref を通じてキャンバス コンテキストを参照します。

this.processVideo も、リファレンス プロジェクトで提供されているコードとほぼ同じです。いくつかの変更を加えるだけで済みます。モデルがロードされたときにのみコードを実行するため、コード本体全体にチェックを追加します。また、ユーザーが渡すと予想されるコールバック ハンドラーを使用してこの React クラスを作成し、そのハンドラーを定義した後でのみ処理コードを実行するようにしました。

  1. プロセスビデオ = (ビデオ、dt) => {
  2. if(this.state.faceFinder && this.props.onFaceFound) {
  3. /*すべてのコード */
  4. }
  5. }

私が行った他の唯一の変更は、顔が見つかったときに実行するアクションです。 pico.js の例ではキャンバス上にいくつかの円を描画しますが、代わりにそのコールバック ハンドラーにデータを渡す必要があります。コールバック ハンドラーがこれらの値を処理しやすくなるように、コードを少し変更してみましょう。

  1. this.props.onFaceFound({
  2. x: 640 - 結果[i][1],
  3. y: 日付[i][0],
  4. 半径: dets[i][2],
  5. x比率: (640 - dets[i][1]) / 640,
  6. y比率: dets[i][0] / 480,
  7. 合計X: (640 - dets[i][1]) / 640 * window.innerWidth、
  8. 合計Y: dets[i][0] / 480 * window.innerHeight、
  9. });

この形式を使用すると、キャプチャされたキャンバス要素内の顔の絶対位置と半径、キャンバス要素内の顔の相対位置、キャンバス要素内の顔の位置を返すことができます。弊社のカスタマイズコースは基本的に完了です。また、最新の構文を使用するために、pico.js と pico バージョンの camvas.js にいくつかの小さな変更を加える必要がありましたが、これらはロジックよりもキーワードに重点を置いたものでした。

これで、カスタム ReactPico クラスをアプリにインポートしてレンダリングし、顔が検出された場合に FaceIndicator クラスを条件付きでレンダリングできるようになりました。私は他の顔検出ライブラリをいくつか使用しましたが、pico.js はフル機能のライブラリではないにもかかわらず、その正確性と使いやすさに驚きました。

元のタイトル: JavaScript チュートリアル: Web アプリに顔検出機能を追加する、著者: Jonathan Freeman

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  何?ニューラルネットワークは新しい知識も生み出せるのでしょうか?

>>:  Zhuiyi Technology AI Lab: ビジネスとテクノロジーの両方を推進し、新しいレベルのインテリジェントなインタラクティブアプリケーションを創造

推薦する

ロボット兵士はもはやSFではない

ロボット兵士はまもなく現実のものとなり、戦争作戦の遂行において人間の兵士を支援し、負傷した兵士に医療...

Microsoft は、全二重音声インタラクションにおいて画期的な進歩を達成しました。ロボットは本当に「人間」になる

マイクロソフト(アジア)インターネットエンジニアリングアカデミーは、新世代の音声インタラクション技術...

ジェネレーティブAIは企業にとって新たなリスクとなっているが、重要な問題を放置すべきではない

2023年、生成AI技術が繭から現れ、世界的なデジタル革命を引き起こしました。初期のチャットやチェス...

ニッチから人気へ: 世界的な AI イノベーションが「ソフト」になった理由

この人工知能の波が出現したとき、世界中の AI 研究所が競争を重視していたことを今でも覚えています。...

人工知能はサーバーを冷却するために大量の水を必要とする

あらゆる計算集約型のアクティビティと同様に、ChatGPT のような AI システムでは大量の処理と...

ボストン・ダイナミクスの二輪ロボット「ハンドル」がデビューします!物流ロボットOTTOと連携して商品を配送

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

...

機械学習がゲーム・オブ・スローンズの結末を「ネタバレ」:3人の愚か者が最初に死に、ドラゴン・マザーとティリオンが最後に笑う

制作:ビッグデータダイジェスト編集部長い間待ち望まれていた『ゲーム・オブ・スローンズ』の最終シーズン...

シングルチッププロセッサの終焉?アップルとNVIDIAはマルチチップパッケージングに興味を持っており、相互接続技術が鍵となる

3月10日、Appleは2022年春のカンファレンスで、M1 Maxチップのアップグレード版であるM...

感情分析に NLP を使用する理由は何ですか?

私を含め、ほとんどの人は人間の感情の変化を正確に把握することはできませんが、コンピューターはそれがで...

この論文では、688件の大規模モデル論文を分析し、LLMの現在の課題と応用について検討する。

まったく知られていなかった状態から誰もが話題にする状態へと、大規模言語モデル (LLM) の状況はこ...

...