AITCシニア勉強会 OpenCV入門 ~ラズパイでOpenCVを動かしてみよう~ 2018年4月21日 # 全てまとめてインストール sudo apt update sudo apt install libopencv-dev python-opencv xvfb imagemagick apache2 php # 参照するサンプルをダウンロード&解凍 cd /home/pi wget http://aramoto.sakura.ne.jp/20180421/opencv-2.4.13.zip unzip opencv-2.4.13.zip wget http://aramoto.sakura.ne.jp/20180421/html.tar tar xvf html.tar ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ラズパイの画面をブラウザで確認 # Webサーバを起動(OSを起動するたび) sudo service apache2 start # Webコンテンツを準備 sudo cp -rp /home/pi/html/viewx /var/www/html/ # PCのブラウザからアクセス http://ラズパイのIPアドレス/viewx/ # 仮想X-Windowを起動(OSを起動するたび) # 最後の「&」は、裏で実行し続ける、という意味 Xvfb :1 -screen 0 800x600x24 & # 画面保存の動作テスト export DISPLAY=:1 import -window root /var/www/html/viewx/img/capture.jpeg # ブラウザに真っ黒な画像が表示されたら、成功 # ずっと連続実行する(OSを起動するたび) export DISPLAY=:1 while true; do import -window root /tmp/capture.jpeg ; mv /tmp/capture.jpeg /var/www/html/viewx/img; done & # おかしくなったら、「ps -x」で見て、killする。もしくはラズパイを再起動 # カメラの画像を表示 cd /home/pi/opencv-2.4.13/samples/python2 export DISPLAY=:1 python video.py # 顔認識 export DISPLAY=:1 python facedetect.py ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 顔画像をひらすら収集 # 元ファイルをコピー cd /home/pi/opencv-2.4.13/samples/python2 cp facedetect.py facesave.py # Webコンテンツを準備 sudo cp -rp /home/pi/html/faces /var/www/html/ ----- facesave.py 追加用 ------------------------------------------------- import datetime now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S"); cv2.imwrite("/var/www/html/faces/img/" + now +".jpg", vis[y1:y2, x1:x2]); -------------------------------------------------------------------------- ----- /var/www/html/faces/index.php -------------------------------------- $value){ if (is_dir($dir . $value)) continue; print ""; } ?> -------------------------------------------------------------------------- # Apacheを起動 sudo service apache2 start # 実行 export DISPLAY=:1 python facesave.py ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 顔認識した数をクラウドに通知 # 元ファイルをコピー cd /home/pi/opencv-2.4.13/samples/python2 cp facedetect.py facecount.py ----- facecount.py 追加用 ------------------------------------------------- draw_rects(vis, rects, (0, 255, 0)) count = 0 for x1, y1, x2, y2 in rects: count += 1 roi = gray[y1:y2, x1:x2] vis_roi = vis[y1:y2, x1:x2] subrects = detect(roi.copy(), nested) draw_rects(vis_roi, subrects, (255, 0, 0)) print count url = "http://aramoto.sakura.ne.jp/aitc/?id=aramoto&val=" + str(count) print url import urllib result = urllib.urlopen( url ).read() dt = clock() - t -------------------------------------------------------------------------- # 実行 export DISPLAY=:1 python facecount.py ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ # 漫画風に変換 # 参考URL https://algorithm.joho.info/programming/python/opencv-manga-camera-py/ # 元ファイルをコピー cd /home/pi/opencv-2.4.13/samples/python2 cp facedetect.py manga.py # スクリーントーンをダウンロード wget https://algorithm.joho.info/wp-content/sample/Python/opencv/work/manga-camera/screen.jpg ----- manga.py 追加用 ------------------------------------------------- # -*- coding: utf-8 -*- -------------------------------------------------------------------------- ----- manga.py 追加用 ------------------------------------------------- screen = cv2.imread("screen.jpg") img = manga_filter(img, screen, 60, 150) -------------------------------------------------------------------------- # 実行 export DISPLAY=:1 python manga.py ----- manga.py 追加用 ------------------------------------------------- import datetime now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S"); cv2.imwrite("/var/www/html/faces/img/" + now +".jpg", vis); --------------------------------------------------------------------------