#RaspberryPi4を立ち上げる
クラス10を購入する
Gigastone 2枚セットで1480円でした(2020年8月11日)
Amazon売り場
購入品はすでにFAT32でフォーマットされていてWindows10 PCでディスクとして認識されます。
###NOOBSをダウンロードする
「NOOBS」の「Download ZIP」のラベルをクリックしてZIPファイルをダウンロードする。
ダウンロードされたファイル「NOOBS_v3_4_0.zip (2,379,232KB)」を解凍して中のファイルとホルダをSDカードのリムーバルディスクへ移動する。
###RaspberryPi4の設定
1.SDカードを挿す
2.小型HDMIコネクタのケーブルでディスプレイを接続する
3.無線マウス&キーボードのUSBドングルをUSBポートに挿入する
4.5V電源をマイクロUSBコネクタに接続する(スイッチをONにする)
「日本語」を選択し、OSを「Raspbian」選んでインストールを進めるとRasbianが立ち上がります。
###SSHとVNCの設定
参考ページ
Raspberry Pi 4にSSHとVNCで接続してみた
詳細は電子書籍を参照ください
本のAmazon売り場
Windows10 PCのWiFi経由で
1.SSHでコマンド操作する方法
2.VNCでディスプレイをつながないで画面表示させる方法
を優しく図入りで解説してます。
###OpenCVの組み込み
2019年12月11日掲載のQiita
Raspberry Pi4 に OpenCV を楽に入れる
の通りにします。
2020年8月15日にインストールを行いましたが準備されてるバージョンは上記Qiitaと同じだったので
Ver 4.1.0.25をインストールしました。
pip3 install opencv-contrib-python==4.1.0.25
###pythonプログラムの実行
Raspbianの最新にはMuエディタが組み込まれてるのでこのエディタでpythonプログラムを実行させる
muアイコンをクリックするとエディタが立ち上がります
Muエディタの操作方法は次のHPを参照してください
https://codewith.mu/
###USBカメラを2台接続する
手持ちのUSBカメラ2種類2台をUSBコネクタに接続した
単純に2台のキャプチャーはエラーが発生しました。そこで画面サイズやFPSを変えることにしました。
参考にさせてもらったHPはここ
https://dev.classmethod.jp/articles/opencv-webcam-setting/
画面サイズを800×600画素にし
15FPSはエラーが発生したりマウスが動かなかったりしてRasPi4の能力を超えてる感じです
10Fpsでカスカス連続運転できてます
5FPSで2台のカメラ画面表示は10時間してもエラーが発生しませんでした
最終的に長時間画面表示できたコードです
#===============================
# Raspi4 conect to two USBCam
#
# Ver1 2020/08/16 T.F.
#===============================
# -*- coding: utf-8 -*-
import cv2
#-------------------------------
# Webカメラ
#-------------------------------
WIDTH = 800
HEIGHT = 600
#ID:0 FPS:5,7.5,10,15 //20
#ID:2 FPS:5 ,10,15 //20
FPS = 5
#-------------------------------
#
#-------------------------------
def cam_set(DEVICE_ID,WIDTH,HEIGHT,FPS):
# video capture
cap = cv2.VideoCapture(DEVICE_ID)
# フォーマット・解像度・FPSの設定
#cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G'))
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('Y','U','Y','V'))
cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)
cap.set(cv2.CAP_PROP_FPS, FPS)
# フォーマット・解像度・FPSの取得
fourcc = decode_fourcc(cap.get(cv2.CAP_PROP_FOURCC))
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
print("ID:{} fourcc:{} fps:{} width:{} height:{}".format(DEVICE_ID, fourcc, fps, width, height))
return cap
#-------------------------------
#
#-------------------------------
def decode_fourcc(v):
v = int(v)
return "".join([chr((v >> 8 * i) & 0xFF) for i in range(4)])
#-------------------------------
#
#-------------------------------
def main():
#--------------------------------------
DEVICE_ID = 0
cap1=cam_set(DEVICE_ID,WIDTH,HEIGHT,FPS)
#--------------------------------------
DEVICE_ID = 2
cap2=cam_set(DEVICE_ID,WIDTH,HEIGHT,FPS)
#--------------------------------------
while True:
#-----------------------
# カメラ画像取得
ret1, frame1 = cap1.read()
if(frame1 is None):
continue
#-----------------------
# カメラ画像取得
ret2, frame2 = cap2.read()
if(frame2 is None):
continue
#---------------------------
im_h=cv2.hconcat([frame1,frame2])
#---------------------------
# 画像表示
cv2.imshow('frame1', im_h)
#--------------------------------------
# キュー入力判定(1msの待機)
# waitKeyがないと、imshow()は表示できない
# 'q'をタイプされたらループから抜ける
if cv2.waitKey(1) & 0xFF == ord('q'):
break
#------------------------------
# VideoCaptureオブジェクト破棄
cap1.release()
cap2.release()
cv2.destroyAllWindows()
#-------------------------------
if __name__ == '__main__':
main()
表示された画面
次のコードでカメラ画像を水平に並べて合成しひとつのフレームに表示しました
im_h=cv2.hconcat([frame1,frame2])
###今後の発展
安価なUSBカメラ2台を使ってステレオカメラを構成し、「物体検出」した位置のずれから物体までの距離を計算してロボットアームの制御の目として使います。
次は、RasPi4に載る、軽い「物体検出」プログラムを検討します