忍者ブログ

設備のマニアどっとこむ

IoT開発、設備・DIYのブログ!

OpenCV ×顔認証×Lチカ

 先日raspberry piでウワサのOpenCVをインストールしてみた。インテルが開発したオープンソースの画像処理らしいけど、気軽な気持ちでやれるシロモノではなかった。

まずインストールする前のビルド?で大苦戦した。こちらの記事を参考にさせて頂いたのだが、ビルド用のディレクトリを作った後ハマってしまった

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules -D BUILD_EXAMPLES=ON ..

この後ビルド5%~12%ぐらいで以下のエラーが出て中断。

/usr/include/c++/6/cstdlib:75:25: fatal error: stdlib.h: そのようなファイルやディレクトリはありません
#include_next <stdlib.h>
arduinoでC言語っぽいもの?は勉強していたもののさっぱりわからず。

いろいろ調べると -D ENABLE_PRECOMPILED_HEADERS=OFF というのを加えると解決した。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D 
INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules -D
BUILD_EXAMPLES=ON -D ENABLE_PRECOMPILED_HEADERS=OFF ..

これでなんとかビルドできたのだがインストール後にサンプルのpythonコードを使って確認しようとすると

ImportError: No module named cv2 と出てインポートできず・・

とりあえずpythonのシェルモードで確認するとバージョン2.7のみimportが反応した。どうやら
ラズパイのコンソールThonnyがpython3.5.2だったためエラーになったみたいだ。

LXターミナルから sudo python ファイル名でたたくとなんとか動作した。(python2.7で起動)
 
長かった・・。 ついでなのでサンプルコードを少しいじって顔を認識するとLEDが光る様にしてみた。(GPIO18ピン使用)
# -*- coding: utf-8 -*-
import sys
import cv2  
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
if _name_ == '_main_':
    try:
      
        cascade_path = "haarcascade_frontalface_alt.xml"
        cascade = cv2.CascadeClassifier(cascade_path)
        capture = cv2.VideoCapture(0)
        if capture.isOpened() is False:
            raise IOError("VideoCapture could not open.")
       
        while True:
           
            ret, image = capture.read()
            if ret == False:
                continue
           
            facerect = cascade.detectMultiScale(image, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
           
            color = (255, 255, 255)     
            for rect in facerect:
                cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=2)
                GPIO.output(18, True)
                time.sleep(1)
                GPIO.output(18, False)
                
                
            
            cv2.imshow("FaceDetection", image)
            #wait[ms]
            cv2.waitKey(10)
    except KeyboardInterrupt  :         
        print("\nCtl+C")
    except Exception as e:
        print(str(e))                   
    finally:
        capture.release()              
        cv2.destroyAllWindows()         
        for i in range (1,5):
            cv2.waitKey(10)             
        print("\nexit program")         
    GPIO.cleanup(18)
今回はハマるポイントが多くてキツかったです!!





拍手[0回]

PR

コメント

翻訳(Translate)

プロフィール

HN:
佐々木 雅史
性別:
男性
自己紹介:
2021年 ラズパイ、M5stackを用いたIoT開発を専門で受注するアルティメンテを設立。代表を務める。
・2020年ラズパイコンテスト優良賞受賞
・設備系資格多数(電験3種、消防設備士甲4、2級ボイラー技士、危険物乙4、電工2種、技術士補(電気・電子)、エネ電、フォークリフトなど)

AD

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30