見出し画像

Electron で face-api.js を使う

Webブラウザ と Electron で「face-api.js」の使い方に違いがあったのでまとめました。

1. Webブラウザ版の顔検出

Webブラウザ版の顔検出のコードは、次のとおり。
詳しくは「face-api.js - ブラウザでの顔認識を行うJavaScript API」で解説。

<!-- face-api.js -->
<script src="js/face-api.min.js"></script>

<!-- テストに使用する画像 -->
<img id="img" src="face.jpg"></img>

<script>
  // 画像の取得
  const img = document.getElementById('img')

  const app = async () => {
    // モデルの読み込み
    await faceapi.nets.tinyFaceDetector.load("models/")

    // 顔検出の実行
    const detections = await faceapi.detectAllFaces(img, new faceapi.TinyFaceDetectorOptions())
   
    // 結果の出力
    console.log(detections)
  }
  app()
</script>

2. Electron版の顔検出

Electron版の顔検出のコードは、次のとおり。

$ npm install @tensorflow/tfjs-node
$ npm install face-api.js
$ npm install canvas
(async () => {
  // パッケージのインポート
  require('@tensorflow/tfjs-node')
  const faceapi = require('face-api.js')
  const path = require('path')
  const { Canvas, Image, ImageData, loadImage } = require('canvas')

  // Node.js環境のパッチ適用
  faceapi.env.monkeyPatch({ Canvas, Image, ImageData })

  // 画像の読み込み
  const img = await loadImage('face.jpg')

  // モデルの読み込み
  await faceapi.nets.tinyFaceDetector.loadFromDisk(path.join(__dirname, 'models'))

  // 顔検出の実行
  const detections = await faceapi.detectAllFaces(img, new faceapi.TinyFaceDetectorOptions())

  // 結果の出力
  console.log(detections)
})().catch((err) => console.error(err))

ブラウザ版との違いは、次のとおり。

・monkeyPatch()でNode.js環境のパッチ適用が必要。
・loadFromDisk()でローカルから画像の読み込みを行う。
・モデルの読み込みのパスもローカルパスを指定。


この記事が気に入ったらサポートをしてみませんか?