RaspberryPi
python3
picamera
ComputeModule3
RaspbianJessie

Raspberry Pi Compute Module 3 2つのカメラを認識、操作してみる(ソフト側)

More than 1 year has passed since last update.

はじめに

Compute Module 3 は2つのカメラを使えるのですね。
ソフト側のみ ですが、 2つのカメラモジュール を認識させ、簡単な操作をさせてみます。

使用するもの

前提

  • Raspberry Pi Compute Module3
    • 評価ボードなどに繋がっている
    • OSインストール済み(今回は Raspbian Jessie Lite を使用してます)
    • ボードに CSI CAMERA CONNECTOR 2つがついている
    • CSI CAMERA CONNECTOR にカメラモジュールが接続されている
      • 今回は、基板の CAMERA0 に可視光、 CAMERA1 に赤外線が接続されている

カメラモジュールの認識

参考URL

  1. ATTACHING A RASPBERRY PI CAMERA MODULE TO THE COMPUTE MODULE IO BOARD
  2. COMPUTE MODULE ATTACHING AND ENABLING PERIPHERALS GUIDE

カメラモジュールの有効化

pi@raspberrypi:~ $ sudo raspi-config
  1. 「5 Interfacing Options」選択
  2. 「P1 Camera 」を選択
  3. 「Would you like the camera interface to be enabled?」→「Yes」選択
  4. reboot

カーネル等のアップデート

一応、アップデート

pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get upgrade
pi@raspberrypi:~ $ sudo rpi-update

ブロブファイルを作成

参考URL 1. 「Quickstart」のブロブファイルでは、2つのカメラモジュールを認識できないため、
ページ下部にあるEnable both camerasファイルから作成します

Enable both camerasをダウンロード

pi@raspberrypi:~/camera $ wget https://www.raspberrypi.org/documentation/hardware/computemodule/dt-blob-dualcam.dts
--2017-11-10 06:14:27--  https://www.raspberrypi.org/documentation/hardware/computemodule/dt-blob-dualcam.dts
Resolving www.raspberrypi.org (www.raspberrypi.org)... 46.235.227.11, 93.93.128.133, 93.93.130.214, ...
Connecting to www.raspberrypi.org (www.raspberrypi.org)|46.235.227.11|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12421 (12K) [application/octet-stream]
Saving to: ‘dt-blob-dualcam.dts’

dt-blob-dualcam.dts                       100%[==================================================================================>]  12.13K  --.-KB/s    in 0.006s  

2017-11-10 06:14:36 (2.07 MB/s) - ‘dt-blob-dualcam.dts’ saved [12421/12421]

pi@raspberrypi:~/camera $

参考URL 2.を参考にdts→binに変換し「/boot」配下に配置

pi@raspberrypi:~/camera $ 
pi@raspberrypi:~/camera $ ls
dt-blob.dts  dt-blob-dualcam.dts
pi@raspberrypi:~/camera $ 
dt-blob.dts          dt-blob.dts.back     dt-blob-dualcam.dts  
pi@raspberrypi:~/camera $ sudo dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-dualcam.dts 
/boot/dt-blob.bin: Warning (unit_address_vs_reg): Node /videocore/pins_cm/pin_config/pin@default has a unit name, but no reg property
/boot/dt-blob.bin: Warning (unit_address_vs_reg): Node /videocore/pins_cm/pin_config/pin@p0 has a unit name, but no reg property
/boot/dt-blob.bin: Warning (unit_address_vs_reg): Node /videocore/pins_cm/pin_config/pin@p1 has a unit name, but no reg property
・
・
・
pi@raspberrypi:~/camera $ 
# 再起動
pi@raspberrypi:~/camera $ sudo shutdown -r now

※ 定義されているが、実際にpinなどがないため、Warningがでていると思われます

再起動後、2つのカメラモジュールが認識されています

カメラモジュールを操作

コマンド

pi@raspberrypi:~ $ 
# 普通のカメラ
pi@raspberrypi:~ $ raspistill -o firstpic.jpg -cs 1
pi@raspberrypi:~ $
# 赤外線カメラ 
pi@raspberrypi:~ $ raspistill -o firstpic_noir.jpg -cs 0
pi@raspberrypi:~ $ 

Python3 で操作

pi@raspberrypi:~ $ sudo apt-get install python3-venv
・
・
・
pi@raspberrypi:~ $ mkdir test
pi@raspberrypi:~ $ cd test
pi@raspberrypi:~/test $ 
pi@raspberrypi:~/test $ python3 -m venv env
pi@raspberrypi:~/test $ source env/bin/activate
(env) pi@raspberrypi:~/test $ 
(env) pi@raspberrypi:~/test $ pip install picamera
Collecting picamera
  Downloading https://www.piwheels.hostedpi.com/simple/picamera/picamera-1.13-py3-none-any.whl (154kB)
    100% |████████████████████████████████| 163kB 148kB/s 
Installing collected packages: picamera
Successfully installed picamera-1.13
(env) pi@raspberrypi:~/test $ 
(env) pi@raspberrypi:~/test $ 
(env) pi@raspberrypi:~/test $ python
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from picamera import PiCamera
>>> 
# 赤外線カメラ
>>> camera = PiCamera(camera_num=0)
>>> camera.start_preview()
<picamera.renderers.PiPreviewRenderer object at 0x744c7df0>
>>> camera.stop_preview()
>>> camera.close()
>>> 
# 普通のカメラ
>>> camera = PiCamera(camera_num=1)
>>> camera.start_preview()
<picamera.renderers.PiPreviewRenderer object at 0x744c7fd0>
>>> camera.stop_preview()
>>> camera.close()
>>> 

picameraの参考URLはこちら