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);
--------------------------------------------------------------------------