画像処理(RasPiカメラ編)

画像処理ロボットのメインCPUにRaspbrryPi 3 を使用します。
大半の機能を画像処理エンジンとして使用するので、この中にOpenCVもインストールします。

まずは RasPi に画像処理エンジンとしての環境構築を行います。

 1. Linux(UbuntuMATE16.04LTS) をインストールします。
 2.WiFi設定
 3.日本語化
 4.SSHを有効化
 5.RasPiカメラ使用の有効化
 6.google Chromeium(Chromではない)をインストール

以上は基本的な設定&インストールの為、別資料を参考にしてください。

上記設定ですぐにRasPiカメラは使用できます。
以下の内容は、https://www.pc-koubou.jp/magazine/17276 に詳細が紹介されています。

スタッフ情報から、UbuntuではPasPiカメラは簡単には動作しないという事なので時間があれば確認
したいと思います。(UbuntuとUbuntuMATEは細部で動作が異なる)

このページを参考にさせて頂き進めます。(ポイントのみ下記に記載しておきます)
早速試してみましょう。端末を開いてください。一応お決まりのアップデート、グレードアップをしておきます。

 1.sudo apt-get update
 2.sudo apt-get upgrade -y
 3.vcgencmd get_camera
   これの応答で「supported=1 detected=1」と返ればカメラが認識されています。
   「supported=1 detected=0」の場合はカメラが認識されていません。


カメラが認識されているので、撮影と画像ファイルを保存してみます。

 1.sudo raspistill -o image.jpg    静止画撮影コマンド
   撮影画像が5秒程度表示され消える瞬間の画像が保存されます。
   保存先は「/home/user/image.jpg」として保存されています。
   user 部分は、使用する環境で変わります。


 2.sudo raspistill -t 3000-o image.jpg    静止画撮影コマンド(時間指定付き)
   上記コマンドは、1番目のコマンドと同じですが「-t *****」とシャッタータイマー機能がつきます。
   (上の場合:3秒後にシャッターが切れます)

この様にRasPiカメラは簡単に使用することができます。


ここでのユーザー名 user : robocar となっています。


それでは、次に撮影した画像をUSBメモリーに保存する手順を説明します。

 1.sudo nano camera.sh
   エディタが開いたら
    #!/bin/sh
    raspistill -o image.jpg
   と2行書いて保存します。

 2.sh camera.sh <上記の camera.sh を実行する>
   画像保存先をチェックしてみましょう。「/home/user/image.jpg」
   image.jpg 画像が保存されているはずです。
   このままだと撮像画像は、「image.jpg」で上書きされ最新の画像が常に1枚しか保存されません。
   これでは都合が悪いので撮像画像をすべて保存する内容に変更します。

 3.「camera.sh」の内容を以下の様に変更します。
   エディタ(nano)を開き下記の様に変更します。
    #!/bin/sh
    fn=$(date +%Y%m%d%H%M%S) date の後はスペースが必要(大文字小文字注意)
    raspistill -o ${fn}.jpg


 /home/user/ 内のフォルダーに年月日時間がファイル名になった jpg 画像が保存されている。
 ここでのユーザー名 user : robocar となっています。

  4.USBメモリーに保存するための準備   USBメモリーを RasPi にさしてください。


USBメモリーが認識されると上記の様にUSBメモリーがデスクトップに表示される。

   端末から下記をキー入力します。
     cd デスクトップ
   デスクトップに移動します。移動を確認後、下記のコマンドを入力します。
     sudo mkdir usb1
     sudo mount /dev/sda1 /home/user/デスクトップ/usb1

   camera.sh を修正します。(usbメモリーへパスを通します。)
       #!/bin/sh
       fn=$(date +%Y%m%d%H%M%S)
       raspistill -o /home/user/デスクトップ/usb1/${fn}.jpg

 5.一定時間ごとに自動撮影させる設定
   この機能は、「cron」を使います。
   cron は、スクリプトや実行ファイルを定期的に起動させる機能を持っています。
   端末から下記コマンド入力
     crontab -e
   実行すると使用するエディターを選択するよう様に促されます。
   ここでは「2」を選択し、nano を使用します。


選択後、下記のような設定ファイルが開きます。


今回は、1分おきに撮影することとします。
  */1****/home/user/camera.sh
上記コマンドを最下段に追記します。
< cron の使い方は、別のサイトで調べてください。>


user:robocar の場合です。

書込み、終了して再度上記内容を確認すると追加する以前の状態となっていて正常に書込みが 行われていない。
cron が無いというエラーが出るので、「sudoapt-get install cron」を実行しても別のエラーが でるので
一定時間ごとの自動撮影機能は中断します。(本ページとは直接関連しないので)


動画を撮像する。

RaspbrryPi Pi カメラで動画を撮影するには、以下のコマンドを使用します。
-t 以降の数値が動画の撮影時間です。以下ですと10秒撮影します。

  raspivid -o jrobo.h264 -t 10000


10秒撮影後、/home/robocar/ に jroboh264 で保存できています。
撮影した動画をRaspberry Pi 上で再生したい場合は、以下のコマンドで再生します。

  omxplayer jrobo.h264

h264 形式の動画は、他のPCで再生することが出来ないのでフォーマット変換が必要です。
例えば「mp4」に変換してみます。RasPi 上で「mp4」形式に変換するには以下のソフトが必要となり
ダウンロードします。

  sudo apt-get update
  sudo apt-get install -y gpac

インストールが終われば、以下のコマンドで変換ができます。

  MP4Box -fps 30 -add jrobo.h264 jrobo.mp4


/home/robocar/ のフォルダー内に「jrobo.mp4」で変換ファイルが出来ています。


ここまでで基本的な静止画撮影、動画撮影を行うコマンドと機能確認が出来ました。
次回からは、いよいよ画像処理するための環境作りをしていきます。
画像処理は「openCV」を使用し、基本ソフトは「python」&「C++」を使っていきます。
最終的には言語の絞り込みを行います。


【追記】
スタッフの人から RasPi 用 Ubuntu では RasPi カメラが使えないという事を聞き調査します。
ここまでの説明は、UbuntuMATEで、Ubuntuとは異なるとのことです。
ただ RasPi の Ubuntu にGUIタイプは無いのでサーバー用で検証。

RasPi サイトより Ubuntu Server 64Bit 版をダウンロードします。
  ubuntu-18.04.3-preinstalled-server-arm64+raspi3.img.xz

SDカードをフォーマット後、上記ファイルをイメージファイルとして書込みます。(圧縮のまま) 書込みソフト
<Rufus 3.8.15書込み終了後、同SDカードをRasPiに挿入しPowerONすると新たな立ち上げ時は有線LANが必要
だと気が付きました。WiFi環境では GUI 環境が必要だった。<実験中止>

新たな情報でUbuntuMATE18.04でもRasPiカメラが使えないとのことなのでこれも確認します。
  ubuntu-mate-18.04.2-beta1-desktop-armhf-raspi-ext4.img.xz (32Bit版:推奨)
再度SDフォーマット後、Rufus 3.8.15 で書込み
RasPiに挿入、電源ONで初期設定ー>問題なく日本語、WiFi設定完了。
以下のコマンドでRasPiカメラテストです。

  1.sudo apt-get update
  2.sudo apt-get upgrade -y
  3.vcgencmd get_camera

これの応答で「supported=1 detected=1」と返ればカメラが認識されています。
「supported=1 detected=0」の場合はカメラが認識されていません。
「supported=0 detected=0」となりカメラは認識していません。
upgrade 時、数か所エラーが発生していました。

一点設定で忘れていました。初期設定だけでは「カメラ」「SSH」等は使用出来ない設定になっている事を
思い出しました。
使用可能にするためには以下の設定が必要です。
<RasPi Config 表示>
 sudo raspi-config

下記画面が表示されます。
<3>を選択します。


<P1>のカメラを選択


当初は<No>となっているので、<Yes>の変更します。


今回とは直接関係ないですが、GPIOもいずれ使用するので使用できるようにしておきます。
<P6>を選択します。


これも当初は、<No>となっているので<Yes>に変更しておきます。


ここで今までSSHを使用できるように設定メニューがあったのが、UbuntuMATE18.04 では無い。
もしかするとデフォルトで使用可能かもしれないので検証が必要です。<後記>

ここで改めてPiカメラが使用できるか確認してみます。

 1.sudo apt-get update
 2.sudo apt-get upgrade -y
 3.vcgencmd get_camera

これの応答で「supported=1 detected=1」と無事カメラが認識されています。


 sudo raspistill -o image.jpg


 /home/jun/ フォルダーに「image.jpg」が出来ている。


作業場所が撮影されています。


ServerはともかくUbuntuMATEでは、Verに関係なくPiカメラは使用できます。