ラズパイ pythonでwebカメラを動かしてみた
こんにちは。電子工作おじさんのmokomichiです。
webカメラ「BSW200MBK(Buffalo)」を買ったので、ラズパイで動かしてみました。
BSW200MBKとは
amazonで2500円ぐらいでした。
USB端子ですので、パソコンなどに接続できます。
今回はラズパイに接続して動かしてみます。
ラズパイが認識してくれるかを確認してみる
ラズパイにwebカメラを接続し、ターミナルで以下コマンドを入力して確認します。
$ lsusb # *** WideCam F100 $ls /dev/video # /dev/video0
確認ができたら、ターミナルでアップデートしてリブートします。
$ sudo rpi-update $ reboot
撮影してみる
ターミナルでwebカメラアプリのfswebcamを入手し、撮影してみます。
$ sudo apt-get install fswebcam
#撮影してみる
$ fswebcam /tmp/test.jpg
/tmpにtest.jpgが生成されていれば成功です。
mjpg-streamerを入れてみる
必要かどうかわかりませんが、ネットの記事では入れている方が多かったので、入れてみました。
カメラ映像のストリーミング配信時に必要らしい。
以下の流れで導入できます。
$ sudo mkdir mjpg-streamer $ sudo cd mjpg-streamer $ sudo apt-get install cmake libjpeg8-dev $ sudo git clone https://github.com/jacksonliam/mjpg-streamer.git $cd mjpg-streamer/mjpg-streamer-experimental $sudo make $ sudo make install
opencvを入れてみる
画像処理ライブライであるopencvを入れます。
以下の流れで導入できます。
$ sudo pip3 install opencv-python $ sudo apt-get install libjasper-dev $ sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig libqt4-test $ sudo apt-get install libatlas-base-dev
プログラムを書いて、動かしてみる
今回書いたプログラムは以下です。
# -*- coding: utf-8 -* import os import time #時刻モジュールのインポート import cv2 # OpenCV のインポート os.system('cls') #時刻取得 CaptureTime = time.ctime() CaptureTime_Year = time.gmtime().tm_year CaptureTime_Month = time.gmtime().tm_mon CaptureTime_Day = time.gmtime().tm_mday CaptureTime_Hour = time.gmtime().tm_hour CaptureTime_Min = time.gmtime().tm_min cap = cv2.VideoCapture(1) # VideoCaptureのインスタンスを作成 while True: # VideoCaptureから1フレーム読み込む ret, frame = cap.read() #---------------- #----確認画面---- #---------------- # 確認画面は1/4サイズに縮小 Viewframe = cv2.resize(frame, (int(frame.shape[1]/4), int(frame.shape[0]/4))) # 加工なし画像を表示する cv2.imshow('Raw Frame', Viewframe) #---------------- #----保存画面---- #---------------- # 時刻をイメージに追加 Saveframe = frame cv2.putText(Saveframe, CaptureTime, (180,470), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 1, cv2.LINE_AA) # cv2.imshow('Edited Frame', Saveframe) # キー入力を1ms待って、key が27(ESC) key = cv2.waitKey(1) #キー入力を1msec待機 if key == 27: # Esc : 終了 break if key == 32: #SPACE : フレームを保存 cv2.imwrite("image.png", Saveframe) #image.pngで保存 os.rename("image.png",str(CaptureTime_Year)+"_"+str(CaptureTime_Month)+"_"+str(CaptureTime_Day)+"_"+str(CaptureTime_Hour)+"_"+str(CaptureTime_Min)+".png")#リネーム(時刻.png) # キャプチャをリリースして、ウィンドウをすべて閉じる cap.release() cv2.destroyAllWindows()
キーボードの「スペース」を入力すると撮影し、
「Esc」を入力すると終了します。
おまけ
webカメラ自体は昔使ったことがありました・・・
職場でよく仕事中に寝ている先輩がおり、後輩と「カメラで撮って保存しときたいですね!!」ってことで、webカメラを買って、勉強がてらpythonで動かして撮影したりしてました。
たぶん先輩は、「俺が寝てるぞ!後輩たちよ!技術的に面白いことをしてレベルアップするがいい!」と思っていたことでしょう。
mokomichiメモでした。