mokomichi go go

mokomichiからの報告です

ラズパイ pythonでwebカメラを動かしてみた

こんにちは。電子工作おじさんのmokomichiです。

webカメラ「BSW200MBK(Buffalo)」を買ったので、ラズパイで動かしてみました。

BSW200MBKとは

f:id:mokomichi70:20191214205340j:plain
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メモでした。