FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Raspberry-Pi3でOpenCVを動作させて顔検出するチュートリアル

ちょっと久しぶりにRaspberry-Pi3を立ち上げた。やりたいことは組み込み機器でOpenCVとか、OpenVXをどのようにして動かせばよいのかの調査だ。 まずは、Raspberry-Pi3を使ってOpenCVを動作させたい。 これは既に先人によって手法が確立されていることで、Qiitaにも記事が上がっている。

qiita.com

これと同じ手法で、OpenCVの環境を構築することが出来た。当該記事ではOpenCVのバージョンが3.2.0で、調べてみると今は3.3.0だったけど、一応3.2.0でやってみた。

ちなみに、ビルド中にJava関連でビルドエラーが出た場合は、JAVA_HOMEを設定してやるとうまくビルドできるようだ。

export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/

顔検出プログラムを動作させる。

個人的には、OpenCVの環境としてはC++ではなく、Pythonが主流になっていることに驚いてしまった。時代は進んでるなあ。

下記も上記参考リンクのほぼそのまま。

import cv2
import numpy as np

faceCascade = cv2.CascadeClassifier('../opencv/opencv/data/haarcascades/haarcascade_frontalface_default.xml')

img = cv2.imread('<imagefile.jpg>', cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = faceCascade.detectMultiScale(gray, 1.1, 3)

if len(face) > 0:
    for rect in face:
        cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0,255), thickness=2)
else:
    print ("no face")

cv2.imwrite('detected.jpg', img)

画像まで一緒だと芸が無いので、大好きなスターウォーズのポスターでやってみる。この画像自体は http://starwars.disney.co.jp/movie/force.html より拝借。

f:id:msyksphinz:20170926225407p:plain

なんか変なの認識してる。でもまあ主人公級はみんな認識できたので良しとしよう。あとドロイドまで顔として認識しちゃった。