ラズパイでWEBカメラを使う

LOGICOOLのウエブカメラC270を使ってみる

ラズパイにはカメラモジュール専用のカメラが存在する。
今回は、それより一般的に出回っているUSBに接続するWEBカメラを購入して見た。
千円台で買える非常に安価なもので、通常はディスプレイの上にポン置きしてチャットとかに使用するのであろうか。
チャットの相手が居ない独居老人には本来縁のないものであるが。

接続は、上の写真のようにUSBポートにポンと刺すだけ。
今は被写体(?)である時計を向いている。
(それにしても乱雑だな、ま、独りもんだしそんなもの)
あとはラズパイでの設定、操作、プログラムになる。

まずは、WEBカメラが認識されているかどうか。
カメラを差し込んでいるのを確認してラズパイのターミナルから
$ lsusb  と打ち込んでみる。

と”WebCam C270″が確認されているのが分かる。因みにその下はキーボードの無線のレシーバー、その下はSonyのマウスのことだろう。
ところで、RaspberryPiは基本的にOSはLinuxである。
昔に比べれば遙かにグラフィカルになり、この黒い画面を見ずに色んなことができる様になっているが、まだまだこのコンソール画面からCUIで打ち込み、インストールしたり、コンパイルしたりという作業が必要となる。
実はWindowsプログラムを作る上で8割(あるいはそれ以上)はGUIのためにに力を注いでいるといってもいいだろう。

WEBカメラを使うにはそれなりのプログラムが必要で、今回はfswebcamを使用する。

fswebcamをインストール

sudo apt-get install fswebcam

これで、fswebcamが使えるようになります。
コンソールからではなく、GUIでできるのかもしれませんが・・・

では、撮影

$fswebcam image.jpg

これで現在のフォルダーに”image.jpg”という画像が写真として保存されます。

九時って朝の九時か夜の九時か、そんな話では無いんです。
これはさっきのコマンドで作成された写真画像です。
この画面では分かりませんが、タイトルのところに”image.jpg(352×288)100%”と表示されています。
そう、デフォルトではこのサイズなんです。(10万画素)

これでは小さすぎて写真にはなりませんね。

$fswebcam -r 1280*960 image2.jpg

とすることで、サイズ指定ができます。

アレ!時計が変わってる。
良いんです。そんな問題じゃないんです。
ご飯を食べたり、お風呂に入ってる間に時計も変わってしまったんです。
タイトルは、”image2.jpg(1280×960)45%”となっています。
画像が大きくなって、100%表示はできないからですね。(123万画素)
千円ちょっとのWEBカメラですからね。こんなもんでしょう。

無事に撮影できました。
めでたしめでたし、後は何をとるかの問題・・・・?

Pythonを忘れていた。

ラズパイと市販のWEBカメラを使って写真を撮る、というのは目的を果たしたのですが、それだけでは仏作って魂入れずですね。
Pyhtonを使ってプログラムで写真を撮るようにしてみましょう。

じつはカメラの撮影用のライブラリ(表現はこれでいいのかな)にはOpenCVというのがあり、広く(?)使われているようです。
今回もそれを使おうとインストールして、Pythonからimportしてみたのですが、エラーが発生。
OpenCVが内部でnumpy(ROTO6で使ったあれ)を使用しているようですが、今自分が使っているnumpyとバージョンが違う(というような)エラーで、そのあといろいろググりながら丸一日格闘したのですが、エラーを脱出できませんでした。

本当はそのことはひた隠しにして別の逃げ道だけを書こうとしたのですが、ま、辿った道のりを正直に・・・。

迂回路

RaspiでもWindowsでも、PythonでもDelphiでも、今のプログラムの中から他のプロセスを呼ぶということができます。
Pythonではsubprocessになります。
OpenCvが通らないので、仕方なし、subprocessで行きましょう。

import sys
import subprocess
import datetime
import time

today = datetime.datetime.today()
now = today.strftime("%y%m%d%H%M")
cmd = "fswebcam /home/pi/camera/%s.jpg" % now

def webcam():
    boolean = subprocess.call(cmd, shell=True)
    if boolean == 0:
        pass
    else:
        subprocess.call(cmd, shell = True)

webcam()

コンソールから打ち込んで写真にする場合、画像のファイル名はその都度入力できますが、プログラムの場合いちいちファイル名を変えるのはおかしいですから、日付と時間でファイル名を自動につけるようにしました。

$ fsweb /home/pi/camera/20197141342.jpg

と打ち込んだのと同じことをプログラムにさせただけ、という蓋を開ければな~んだということですが。

結果はこんな感じ。
これは352×288のデフォルトですね。

import sys
import subprocess
import datetime
import time

today = datetime.datetime.today()
now = today.strftime("%y%m%d%H%M")
cmd = "fswebcam -r 1280x960 /home/pi/camera/%s.jpg" % now

def webcam():
    boolean = subprocess.call(cmd, shell=True)
    if boolean == 0:
        pass
    else:
        subprocess.call(cmd, shell = True)

webcam()

とすることで

これでフルサイズ。
あまりピンとがあってないような気もしますが。

自分も初心者の域を出ていないので、シニアだって、初心者だってと思ってプログラムカテゴリを始めていますが、ラズパイはLinuxであり、コマンド入力も多くWindowsでは陰でやってくれていることを自分がやらなければならない場合が多く発生します。
ここまで来た感想では、嘗めてかかるとしっぺ返しを食うな、という感じですね。

ラズパイに限らずプログラムを作るということは辛抱すると置き換えても良いくらい辛抱が大事だと思います。
特に凡夫には。
エラーが出てどうしても解らない、それをググりながら追いかけて追い詰めていく。
途中で投げ出したくなることもたくさん。

シニアに沢山あるのは時間、そして目に見えて不足してきたのが辛抱する気持ち。年を取ると辛抱することができなくなる。我慢が出来なくなる。
そんな時に、プログラムを始めて、クソ!クソ!と思いながら、辛抱のトレーニングを兼ねてやってみるのはどうでしょうか。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です