Raspberry Pi Camera Module V2 の使い方 (Python 3)
Raspberry pi 公式が販売しているカメラモジュール Camera Module V2 を使ってみたメモ
https://www.raspberrypi.org/products/camera-module-v2/
参考にしたもの
公式の情報
Getting started with the Camera Module - Introduction | Raspberry Pi Projects
先人の情報
PythonでRaspberry Pi カメラを制御する
【Raspberry Pi】Camera Module V2を接続する
環境
- Raspberry Pi 3 model B+
- Python 3.7.0
モジュールの準備
何はともあれ、Raspberry Pi 3 と カメラモジュールを接続します
こちらが詳しいです。向きなどに注意しましょう
次に、raspi-config > 5. Iterfacing Options > P1. Cameraからカメラを有効にしましょう
Pythonからの操作方法
picameraパッケージのインストール
% pip install --upgrade pip % pip install picamera
写真を撮影する
from picamera import PiCamera from time import sleep camera = PiCamera() camera.resolution = (800, 600) camera.start_preview() sleep(2) camera.capture("./image.jpg") camera.stop_preview()
camera.resolution(width, height)
で撮影する写真のサイズを指定camera.start_preview()
でカメラを起動(ラズパイがディスプレイに接続されていると確認できる)cmera.capture([保存したい場所])
で写真を撮影できるcamera.stop_preview()
でカメラを終了する
基本的な使い方はこれだけ。
こんな感じで撮影できましたか?
動画の録画
動画も撮影できます。
from picamera import PiCamera from time import sleep camera = PiCamera() camera.resolution = (800,600) camera.start_preview() camera.start_recording("./movie.h264") sleep(10) camera.stop_recording() camera.stop_preview()
動画も写真とほぼ同様の手順で録画できます。異なるのは、
camera.start_recording([保存する場所])
で録画開始sleep([秒数])
で何秒間録画するかを指定camera.stop_recording()
で録画停止
の部分だけ。
エフェクト
なぜか多種類のエフェクトが用意されています。ぜひ活用してみましょう。
使用できるエフェクトは以下の通りです。
>>> camera.IMAGE_EFFECTS {'none': 0, 'negative': 1, 'solarize': 2, 'sketch': 6, 'denoise': 7, 'emboss': 8, 'oilpaint': 9, 'hatch': 10, 'gpen': 11, 'pastel': 12, 'watercolor': 13, 'film': 14, 'blur': 15, 'saturation': 16, 'colorswap': 17, 'washedout': 18, 'posterise': 19, 'colorpoint': 20, 'colorbalance': 21, 'cartoon': 22, 'deinterlace1': 23, 'deinterlace2': 24}
使用する場合は次のように指定します。
camera.image_effect = "[エフェクト名]"
具体例
テキストを挿入する
以下のようにすることで、写真や動画にテキストを表示できます。
camera.annotate_text_size = [フォントサイズ] camera.annotate_text = [表示したいテキスト]
注意すること
サイズの限度
写真の場合は2592 x 1944で、動画の場合は1920 x 1080までです。
また、最大解像度での撮影を行う際は、
camera.framerate = 15
でフレームレートを15
に設定する必要があります。
ファイルフォーマット
写真のフォーマットを変更することもできます。
変更したいときは以下のように指定する。
camera.capture("[ファイルパス]", format="[フォーマット名]")
利用できるフォーマットは以下の通り。
jpeg, png, gif, bmp, yuv, rgb (24-bit RGB), rgba (32-bit RGBA), bgr (24-bit BGR), bgra (32-bit BGRA), raw
動画も同様にフォーマットを変更できます。
camera.start_recording("[ファイルパス]",format="[フォーマット名]")
利用できるフォーマットは以下の通り
h264, mjpeg, yuv (YUV420), rgb (24-bit RGB), rgba (32-bit RGBA), bgr (24-bit BGR), bgra (32-bit BGRA)
カメラを起動してからの待ち時間
公式には、カメラを起動してから最低2秒間は明るさの調整のために待てと書いてあります
試しに0秒から1秒おきに撮影してみました。
0秒時点
1秒時点
2秒時点
確かに0秒時点での写真は全体的に暗く青みがかって見えます。1秒時点と2秒時点の画像もよーく見ると違いますが、そこまで大きな違いは無さそうです。
この辺りは目的に合わせて調整しよう。
画像が180度回転していたら
今回の環境では問題なかったが、上下逆さに撮影されてしまう場合は以下のように指定することで画像を回転できます
camera.rotation = 180
とりあえず主要な機能はこんなところでしょう
詳しい内容は以下で確認できます
10. API - picamera.camera Module — Picamera 1.10 documentation
将棋ウォーズの棋譜をまとめてローカルに保存する方法
続編は以下の記事。
後から調べたら...
すでに有識者がフリーウェアを開発してくださっていたので、
Mac でもやりたいよという人限定の話になってしまった
成果物
棋譜をダウンロードするPython スクリプトを作成し、一括DLできた!
環境
Webスクレイピングの準備
selenium
今回は 将棋ウォーズ棋譜検索β で検索した結果を一括でダウンロードする方針でいく
このようにWebサイトから情報を一括でダウンロードすることを Webスクレイピングと呼び、
プログラムからブラウザを操作したいときには、selenium というソフトが使われる
今回はPython から操作したいので 以下のコマンドでパッケージを入れておく
% pip install selenium
ブラウザ
今回は Google Chrome をヘッドレスモードで使う。
ヘッドレスとは、実際にブラウザを起動して画面を描画したりしないモードと捉えておけば問題ないだろう
webスクレイピングは大量のデータにアクセスしたいので、いちいち画面を描画させると重くなってしまうのだ
(有名なヘッドレスブラウザとしてPhantomJS があったが、開発が終了してしまった)
selenium からブラウザを操作するためには、操作したいブラウザに対応するドライバが必要なので、以下からダウンロードしておく
Downloads - ChromeDriver - WebDriver for Chrome
具体的なコード
from selenium import webdriver from bs4 import BeautifulSoup import requests from tqdm import tqdm from time import sleep # 操作するブラウザの準備 option = webdriver.ChromeOptions() option.add_argument('--headless') driver = webdriver.Chrome(executable_path='./chromedriver', options=option) url = 'http://swks.sakura.ne.jp/wars/kifusearch/' u_name = '取得したいユーザ名' sleep(1) driver.get(url) driver.find_element_by_id('id_name1').send_keys(u_name) driver.find_element_by_id('searchBtn').click() # ページのソースを取得 soup = BeautifulSoup(driver.page_source, 'lxml') driver.quit() lis = soup.find_all(class_='btn1') kif = [] for i in lis: if 'kif' in i.get('href'): kif.append(i.get('href')) kif = ['http://swks.sakura.ne.jp/wars' + x[2:] for x in kif] for i in tqdm(kif): sleep(1) r = requests.get(i) r.encoding = 'Shift_JIS' f_name = i.split('/')[-1] # ユーザ名のディレクトリ以下にファイルを保存するようにしている # あらかじめディレクトリを作成しておく with open(u_name + '/' + f_name, mode='w') as f: f.write(r.text)
流れは以下の通り
Tips
実際のwebページがどのように記述されているかによってコードが変わるので、
(Chrome の場合)右クリック -> 検証 からコードを表示しながらプログラムすることになる
今回の場合、検索ボックスに 属性id_name1
、検索ボタンに属性searchBtn
が付与されていたので、
それらを検索し、文字列を入力 > 検索 という流れで結果を取得した
また、今回は 10分切れ負けに絞ったが、もし他の対局ルールでの棋譜が欲しい場合は
ラジオボタンを選択する処理が必要となる
raspberry piの初期設定
とりあえず自分が行った設定のメモ
基本的にSSH接続して、操作することを想定している
環境
- Raspberry Pi 3モデルB
- TOSHIBA SDHCカード 16GB Class10
Raspbian 起動以前
ラズパイの標準OSであるRaspbianをインストールする
イメージファイルを用意する
公式サイト
Raspberry Pi Downloads - Software for the Raspberry Pi
過去のバージョン
Index of /raspbian/images
SDカードをフォーマットする
windows10なら右クリック -> フォーマットでできる
専用のソフト(SDFormatterなど)を使ったらもっと分かりやすいかもしれない
Mac OSならディスクユーティリティを使って可能
Raspberry Pi 3にRaspbianをインストール(Mac OS X を使用) - Qiita
OSをSDカードに書き込む
Windows
Win32 Disk Imager が簡単か
Win32 Disk Imager download | SourceForge.net
Mac OS
Raspberry Pi 3 初期セットアップ(Mac 用) - Qiita
*df -h
でSDカードを確認(仮に/dev/disk2s1とする)
% sudo diskutil unmount /dev/disk2 % sudo dd bs=1m if=2017-01-11-raspbian-jessie-lite.zip of=/dev/rdisk2 % sudo diskutil eject /dev/disk2
Raspbian で直接やること
キーボード、マウスなしで最初からやれるらしいが、持ってるならそれでやって問題ない
Raspberry Pi モニタなしキーボードなしマウスなし パソコンのみでRaspberry Piのデスクトップにアクセスする。 - Qiita
インターネットに接続する
raspberry pi 3はwifiが使えるので楽ですね
ファイルシステムの最適化
大きな容量のSDカードを入れても正しく認識してくれなかったりするらしい
新しいバージョンだと大丈夫なこともあるらしいが、一応確認した方がいいかも
% df -h
を実行し、/dev/root
のサイズを確認する
このサイズがSDカードの容量とほぼ一致していればOK
もし小さく表示されているようなら以下を実行
% sudo raspi-config
から Expand Filesystemを選択
raspi-configからやること
- Change Password
- Interfacing Options - SSH
ここまでやったらあとはリモートから操作可能。
SSHでログインする
% ssh -p [ポート番号] pi@[IPアドレス]
アカウント名を変えている場合はpiの部分を変更する
ファイルの転送を行いたい場合は
% scp -P [ポート番号] [送りたいファイル] pi@[IPアドレス]:[送りたい場所(/home/pi/...)]
SSHのポート番号を変更する
% sudo apt-get install vim % cd /etc/ssh % sudo vim sshd_config
ここでPort 22
をコメントアウトし、他の番号に変更しておく
色々更新する
% sudo apt-get update % sudo apt-get upgrade % sudo apt-get dist-upgrade # ディストリビューションを最新に % sudo rpi-update # ファームウェアを最新に
Tpis
.bashrc
.bashrc
ファイルをカスタマイズすると快適になる。
alias ls='ls -F --color=auto' alias ll='ls -l -1'
を追加しておいた