前回はものを集めてSDカードにRaspberry Pi OSを書き込み、リモートデスクトップまでやりました。

今回はカメラを繋いで起動までしてみます(^^)

今回からはmacよりリモートデスクトップして作業します(余談あり)

WEBカメラの認識

まずはじめに、カメラ(USBデバイス)を認識しているかチェックします

ラズパイが起動した状態で、空いているUSBポートに差し込んでいます

使っているWEBカメラはこちら

だいぶ古いですねw

最大解像度 2048 × 1536 なので 4:3 ですね

ラズパイでターミナルを開き、以下を入力してUSBデバイスをチェックします

lsusb

一番上に Elecom Co., Ltd とあるので認識してるっぽい おk

使っているミニディスプレイはこちら

制御にはOpenCVを使う

ググってみると、webカメラの制御にはOpenCVを使っている事例が多かったので真似します

OpenCVはPythonで書くので、まずはラズパイに入っているPythonのバージョンを確認します

Python2と3が入っていますが、Python3を使います

ターミナルで以下を入力してPython3のバージョン確認します

python3 -VV

Python 3.7.3 でした

忘れてましたが、パッケージをインストールする前に以下を脳死で実行してラズパイを最新にします

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo rpi-update
sudo reboot

OpenCVをインストールする

こちらを参考にさせていただきました(^^)

非公式のビルド済パッケージ(opencv-python)をインストールします

上から順に実行します

sudo pip install --upgrade pip
sudo apt install libavutil56 libcairo-gobject2 libgtk-3-0 libqtgui4 libpango-1.0-0 libqtcore4 libavcodec58 libcairo2 libswscale5 libtiff5 libqt4-test libatk1.0-0 libavformat58 libgdk-pixbuf2.0-0 libilmbase23 libjasper1 libopenexr23 libpangocairo-1.0-0 libwebp6
sudo pip3 install opencv-python

このときには opencv-python-4.5.3.56 が入りました

しかし参考にもあるように、私の場合もimportできませんでした

そこでこちらを参考にさせていただき、バージョンを下げ、ライブラリを追加でインストールしたらimportできました

バージョンも合わせてあります

sudo pip3 install opencv-python==4.5.1.48
sudo apt-get install libatlas-base-dev

今回みたいにOpenCVの別のバージョンをインストールし直したいときは、続けてインストールして大丈夫です

先にインストールされたバージョンはアンインストールされます

WEBカメラを起動する

それではWEBカメラをテストするためのpythonファイルを用意します

エディタはラズパイにもともと入っている Thonny Python IDE を使いました

IDEなので、すぐに実行できて便利(^^)

ラズパイマーク ー プログラミング ー Thonny Python IDE で開きます

サンプルプログラムは以下を拝借させていただきました

これを.pyの拡張子で保存します

私はopencv-test.pyとしてデスクトップに保存しました

import cv2

# VideoCapture オブジェクトを取得します
capture = cv2.VideoCapture(0)

while(True):
  ret, frame = capture.read()
  # resize the window
  windowsize = (800, 600)
  frame = cv2.resize(frame, windowsize)

  cv2.imshow('title',frame)
  if cv2.waitKey(1) & 0xFF == ord('q'): # control + qが押されたら
    cv2.imwrite('test.tif', frame) # save
    break

capture.release()
cv2.destroyAllWindows()

そのままではカメラが起動しなかったのですが、capture = cv2.VideoCapture(0)の引数を0としたら起動しました

カメラはUSB接続のWEBカメラのみです

起動中はwhile中で絶えずcaptureしているため、動画となります

cv2.imwrite('test.tif', frame) # save

で、control + qでwhileから抜けてカメラウィンドを閉じる際にtest.tifとして画像を保存します(サンプルプログラムから追加した部分です)

Thonnyだと.pyファイルの保存された場所でコードを実行するため同じ場所に保存されます。ここでは.pyファイルはデスクトップにあるので、画像もデスクトップに保存されます。

とりあえず動作してよかった(^^)

10年前のWEBカメラにしては画質はまずまずですな!

余談 iPhoneテザリングだとipアドレスがわからん

今回はiPhoneをテザリング親機にしてmacとラズパイを繋いでいます

iPhoneは接続デバイスのipアドレスを確認する方法が無いので困りましたが、ラズパイにミニディスプレイを付けているので、USBマウスを操作してラズパイ上のVNCアプリを開いてラズパイに割り振られているipアドレスを確認しました(前回はAndroidを親機にしていました(ipアドレスとmacアドレスが表示されて便利))

ですので、最初だけディスプレイ、キーボード、マウスが必要です

そもそも、iPhoneに接続するためにラズパイに直接キーボードからパスワードを入力する必要があるんですけどね\(^o^)/

あとはmacよりリモートデスクトップして作業します

ちなみに、Fingアプリでは確認できず(Wi-Fiに接続していないと無理ぽ)

ipアドレスは172.20.10.2 でした

それか、macとiPhoneを繋いでいるのなら、以下の方法でターミナルからも確認できました