🐈

opencv4nodejsで画像ファイルから顔検出するメモ

2021/08/21に公開

はじめに

画像処理で有名なOpenCVの npm ライブラリopencv4nodejsを使って、画像ファイルの「顔検出」を行ってみます。

https://opencv.org/

https://github.com/justadudewhohacks/opencv4nodejs

インストール

npm install --save opencv4nodejs

コード

トップレベルawaitを使うために、package.jsonに以下のプロパティを追加します。

"type": "module"
import cv from 'opencv4nodejs';

const classifier = new cv.CascadeClassifier(cv.HAAR_FRONTALFACE_ALT2);

try {
    const img = await cv.imreadAsync('./lenna.jpg');
    const grayImg = await img.bgrToGrayAsync();
    const result = await classifier.detectMultiScaleAsync(grayImg);

    if (!result.objects.length) {
        throw new Error('failed to detect faces');
    }

    const minDetections = 10;
    result.objects.forEach((faceRect, i) => {
        if (result.numDetections[i] < minDetections) {
            return;
        }
        const rect = cv.drawDetection(
            img,
            faceRect,
            { color: new cv.Vec(255, 0, 0), segmentFraction: 4 }
        );

        cv.imwrite(`member${i}.jpg`, img.getRegion(faceRect));
    });
    cv.imshowWait('result', img);   
} catch (e) {
    console.error(e);
}

動作確認

node index.js

Image from Gyazo

顔検出できました。

GitHubで編集を提案

Discussion