Top / トップSoftware / ソフトウェアWebsite / サイトBusiness / ビジネスDownload / ダウンロードMALON / マロンTrash / ゴミ箱Scope / スコープLink / リンク SCOPE online
Linuxウェブカメラの指南書
JUMP

当サイトはとても古い情報で放置サイトとなっております。注意願います

ホームページで小遣い稼ぎLinkShareアフィリエイト











 

 


USB周りのソースコード


ここが怪しい。

 







 

このページは、更新が止まっています。

最近の記事 ブログ:[Linux] ウェブカメラのコマンドとか
http://blog.scopesd.jp/MT3/archives/2005/10/linux.html 2005/10

2003年5月初稿
2004年1月更新

 「ウェブカメラ」 大昔に流行ったものですので、既にいまさらですが、新しめの情報がなかなかウェブ上になかったので、覚え書き程度に追記していきます。

 以前に挑戦していて、飽きては止め・・の繰り返しでした。それも、実用性がないからでしょうねぇ。犯罪用?監視用?っていったって常時このためだけに、電気や資材をまじめに投資しなきゃならない・・という観念がないし。
 ちょうど余り物のUSBカメラがあったので、それで再度やってみようと思ったのがきっかけです。

 Yahoo auction(ヤフオク)でも、たまーに、500位で出品されますので、お店で購入できないものもありますので、安いし逆にいいかもしれません。ただ、ケースを開けるまでは、チップがなんなのか分からないので、バクチです。
 一番の稼働実績は、CreativeやLogicool系のUSBカメラです。

動作環境

ハードウェア

CPU
VIA C3プロセッサ(128KB/セカンド64KBキャッシュ) 800Mhz
チップセット
VIA 8601A NorthBridge、VIA 8231 SouthBridge
グラフィック
Trident Blade3D(メモリシェア)
オーディオ
VT1612A AC97 Codec (ラインIN、ラインOUT、マイク、CDROM)
メモリ
PC133 SD-DIMM 256MB + 256MB
LAN
VIA VT6103 EthernetPHY(10/100Mb)
USB
2ポート(USB1.1/Universal HCI v1.1互換)
ビデオアウト
VIA VT1621(640*480/800*600 NTSC/PAL出力、S端子/RCA)

カメラ

1.メーカー不詳 STV680 USB1タイプ VGA(35万画素) CMOSカメラ
詳細はこちら

2.CENTURY お目付役 USB1タイプ VGA CMOSカメラ
3.Creative WEBCAM3 USB1タイプ VGA CMOSカメラ
(チップ OmniVision ov511)
この2機種は、別追加更新

ソフトウェア

OS
Redhat 8.0
キャプチャソウトウェア(現時点最新)
xawtv-3.88.tar.gz
ドライバー(現時点最新)
stv680-0.25.tar.gz

やることは?

 USBやIEEE1394などに接続できるカメラを用いて、定点観測や犯罪や監視用として用います。常時電源が入っている自宅サーバ(Linux)を持っている方向けです。
 標準ソフト或いはフリーで手に入るソフトを使って構築します。

 ここでは、STV680チップを内蔵した安いカメラを用います。

クリエイティブのPCカメラ
http://japan.creative.com/products/pc_cameras/

logicoolのPCカメラ
http://www.logicool.jp/products/videocamera/main.html

エレコムのPCカメラ
http://www2.elecom.co.jp/peripheral/pc-camera/index.asp

カメラの認識

 安物(一般的におもちゃカメラ)なので、特に何の問題もなく認識する。まず大抵のUSBカメラなら、指せば認識してくれる(でも当方で持っているケイアン製のUSBカメラ、ZSMCチップだけはダメだった)

dmesgの抜粋

usb-uhci.c: USB UHCI at I/O 0xd800, IRQ 3
usb-uhci.c: Detected 2 ports
usb.c: new USB bus registered, assigned bus number 2
hub.c: USB hub found
hub.c: 2 ports detected
usb-uhci.c: v1.275:USB Universal Host Controller Interface driver
hub.c: USB new device connect on bus1/1, assigned device number 2
usb.c: USB device 2 (vend/prod 0x553/0x202) is not claimed by any active driver.
Linux video capture interface: v1.00
usb.c: registered new driver stv680
stv680.c: [stv680_probe:1575] STV(i): STV0680 camera found.
stv680.c: [stv680_probe:1603] STV(i): registered new video device: video0
stv680.c: [usb_stv680_init:1676] STV(i): usb camera driver version v0.25 registe
ring
stv680.c: STV0680 USB Camera Driver v0.25

 上記のようにメッセージが表示されれば認識されている。
 あとはおもむろに、startxしてXから、xawtvでキャプチャ画像を見ることができるはずだ。

 ※大昔のCPiA、ov51、bt878やbt848などの安いキャプチャーカードには必ず入ってるチップもほぼ同じ手順です。こちらは、ビデオ/NTSC信号ですけどね。

ウェブカメラの実現

 ウェブカメラには、xawtvソフトウェアに含まれるwebcamというソフトが便利だ。
 しなしながら、標準で入ってなかったので、公式サイトからいただいてくる。

xawtv homepage
http://bytesex.org/xawtv/

 tar xzvf xawtv-3.88.tar.gzとして解凍したら、READMEにかかれている通りにインストールを行う。./configureして、makeして、make installだ。大体、5分くらい。
 manも入るので、気になったらman webcamなどとしてみればいい。
 目的のファイルは、/usr/local/binに入っているので、これを使えばいい。(xawtvも新しくなったしね)

 まずは、webcam用の設定ファイルを用意しなくてばいけない。以下を参考にしてほしい。

[root@server root]# cat webcamrc
[FTP]
#host=192.168.61.10    <FTP転送する場合
#user=nabe
#pass=password
#passive=1
dir=/home/user/webcam/  <書き出すディレクトリ
file=mtv99.jpeg       <書き出しファイル名
tmp=tmp.jpeg        <テンポラリファイル名(適当に)
auto=0
local=1            <ここでFTPかローカル保存かを選択
ssh=0
debug=0

[grab]
device=/dev/video0    <デバイス選択
text=20%y/%m/%d %H:%M MTV    <文字情報の書き出しをする場合
#infofile=           <文字情報をファイルから行う場合
fg_red=255          <色微調整
fg_green=255
fg_blue=255
width=160           <出力画像サイズ
height=120
delay=10            <次撮影までの待機時間(秒)
#input=Camera
#norm=ntsc
rotate=0            <回転(90度単位)
top=0              <トリミングサイズ
left=6
bottom=-1
right=-1
quality=90           <JPEG圧縮率(100:無圧縮)
trigger=0            <画像変化時、自動保存
once=0             <一度きりの撮影の場合

※使わない機能は"#"を付けてコメント化すること(重要)

 ここで注意しなくてはいけないのが、triggerである。
 あまり英語力がないので適当にななめ読みしかやらないんだけど、この項目は0か1かといった指定ではなく、画像変化率の指定でもある。
 0の場合は、そのままdelay秒ごとに撮影するだけなんだけど、triggerが0以上の時は、指定値分だけの画像変化があった時にファイルを生成する。
 この数値は、大体感覚で、100~120程度でセコムの防犯センサー程度(天井についてるやつ)ではないだろうか。150くらいだと、人が大きく通り過ぎる感じで反応する。
 この変化をチェックするタイミングは、常時行われるので、CPUリソースを消費する。triggerが有効でもdelayは有効です。ファイル保存後に待機に入るだけです。

 textで文字やアイコンを入れてカスタムしたいけど、そういった機能は無い。テキストは、改行されずそのまま一行で表示される。日付のマクロがいくつかあるだけだ。
 時間さえあれば自分で作りたいが。どうしようかな・・。

 ここまでできれば、あとは実行してみよう。
 とりあえずX画面ターミナル上で、/usr/local/bin/webcam (webcamrcの場所)として実行する。デバイスの初期化を行った後、ファイルが生成されはじめる。
 ログがそのまま画面に表示されるので、状況が把握できる。終了は、ctrl+cで行う。


こんな感じだ(真っ黒なサンプルしかないが)

 Nautilus(GNOME版ファイルマネージャ??)を立ち上げて、ファイル生成先を参照しておこう。ファイルが生成されるごとに自動で、更新されるので、確認に便利だ。
 JPEG圧縮率や生成タイミングなどをここで微調整しておこう。

 あとは、勝手に動作するように、/etc/rc.d/r.localに追記して完成だ!

 なぜかうちのカメラでは、「赤」と「青」の色要素が反転されてしまっている。つまり、みんな、デスラー総督っぽくなってしまう。同じような問題を掲示しているサイトがあって、そこでは、真っ青なリンゴが映し出されていた。うおーマズそう・・。(笑)
 ソースコードを書き換えてコンパイルしなおせば治るそうだ。

自宅サーバでLiveカメラ(2)
http://physics.omosiro.tripod.com/server/livecam2.html

カメラのフリーズ

 しばらくすると以下のようなエラーが発生して止まってしまう。あとは、USB抜き差ししてもまったくウンともスンとも言わない。

 ここでソースコードを追ってみましたが、Linuxでの開発経験は皆無、途中で断念。viだけじゃ辛い。

/var/log/messageの抜粋
usb_control/bulk_msg: timeout
usb_control/bulk_msg: timeout
usb_control/bulk_msg: timeout
usb_control/bulk_msg: timeout
stv680.c: [stv_stop_video:307] STV(e): Stop_video: problem setting original mode
usb_control/bulk_msg: timeout
stv680.c: [stv_stop_video:312] STV(e): Stop_video: Set_Camera_Mode failed
usb_control/bulk_msg: timeout
stv680.c: [stv_stop_video:318] STV(e): camera NOT set to original resolution.

webcamのログ抜粋
v4l: timeout (got SIGALRM), hardware/driver problems?
ioctl: VIDIOCSYNC(int=1): Input/output error
capturing image failed

 

 これが発生する度にリセットするのでは死んでしまうので、別な方法で回避。手動でモジュールをリリースして登録し直せばいい。lsmodで登録モジュールを見ることができる。
 以下の強調部分が、関係するものだ。

[root@server root]# lsmod
bash: lsmod: command not found
[root@ssd root]# /sbin/lsmod
Module Size Used by Not tainted
stv680 25844 0
videodev 7776 1 [stv680]
usb-uhci 24524 0 (unused)
via82cxxx_audio 21304 0 (autoclean)
uart401 8068 0 (autoclean) [via82cxxx_audio]
ac97_codec 12136 0 (autoclean) [via82cxxx_audio]
sound 70196 0 (autoclean) [via82cxxx_audio uart401]
soundcore 6180 4 (autoclean) [via82cxxx_audio sound]
autofs 12228 0 (autoclean) (unused)
via-rhine 14668 1
mii 1996 0 [via-rhine]
iptable_filter 2316 0 (autoclean) (unused)
ip_tables 14456 1 [iptable_filter]
mousedev 5236 1
keybdev 2688 0 (unused)
hid 20836 0 (unused)
input 5664 0 [mousedev keybdev hid]
usbcore 71680 1 [stv680 usb-uhci hid]
ext3 64224 2
jbd 48180 2 [ext3]

モジュールの切り離し
/sbin/modprobe -r stv680
/sbin/modprobe -r usb-uhci

USBモジュールの再登録
/sbin/modprobe usb-uhci

 後は勝手にUSBカメラが自動認識されるので、初期状態に戻る。

STV680ドライバのインストール

 特別な事がない限りドライバを入れることは滅多にないんですが、うちのカメラは必ずといって、フリーズする。原因が分からないので、とりあえず新しいドライバを入れることにした。
 以下のSourceForgeで活動を行っている。

linux-stv680-usb-sapport
http://sourceforge.net/projects/stv0680-usb/

 しかしながら、RADMEの手順通りにしてもコンパイルエラーが発生してしまう。
 よくよく見ると、makeファイルの記述がちょっとおかしい。コンパイルに必要なファイルの参照先が違うところを指しているようです。
 以下のようにして、makeファイルを直せば無事、stv680.oモジュールファイルが出来上がります。

解凍すると以下のファイルが出てきます
root@server stv680-0.25]# ll
合計 76
-rw-rw-r-- 1 kengo users 1262 1月 18 2002 Makefile
-rw------- 1 kengo users 9483 2月 5 2002 README.stv680
-rw------- 1 kengo users 47513 2月 4 2002 stv680.c
-rw------- 1 kengo users 8328 1月 9 2002 stv680.h

こんなエラーが出ます。ふがっ
stv680.c: トップレベル:
stv680.c:1545: `stv680_template' の領域サイズがわかりません
stv680.c:1655: `stv680_driver' の領域サイズがわかりません
make: *** [stv680.o] エラー 1
[root@ssd stv680-0.25]#

makeファイルの中身(ここがおかしい)
# The location of the kernel headers:
LINUX_HEADERS=/usr/src/linux/include

# This is the directory into which the modules will be installed.
# The magic invocation will return something like this:
# /lib/modules/2.4.0/kernel/drivers/usb
#KVER = $(shell grep UTS_RELEASE $(LINUX_HEADERS)/linux/version.h|cut -f 2 -d'"')

ifeq ($(LINUXVERSION),)
LINUXVERSION = $(shell uname -r)
endif

MODDIR := /lib/modules/$(LINUXVERSION)/kernel/drivers/usb

CC = gcc

CFLAGS = -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes \
-O2 -fomit-frame-pointer -pipe -march=i586 -malig

makeファイルを直す
perl -pe 's|/usr/src/linux|/usr/src/linux-2.4.18-14|g' Makefile > makefile.new
make -f makefile.new

 それでは出来上がったモジュールファイルを以下のところにアップして試してみます。
 /lib/modules/2.4.18-14/kernel/drivers/usb/stv680.o
 ・・・ダメじゃん。
 まったく同じ感じでフリーズするので、違うところに問題があるのか?或いは、USBカメラ自体の問題なのか?はたして何が問題なんだろう。
 やはり動作実績のあるUSBカメラが必要なのかな・・。

 

つづく

参考リンク

Welcome to Webcam (USB カメラを使おう!!)
http://keiren-web.hp.infoseek.co.jp/webcam.html

自宅サーバでLiveカメラ
http://physics.omosiro.tripod.com/server/livecam.html
(CMOSとCCDカメラの比較など、参考になります)

USBの接続状況

[root@server nabe]# /sbin/lsusb

Bus 002 Device 001: ID 0000:0000 Virtual Hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0000 Virtual
idProduct 0x0000 Hub
bcdDevice 0.00
iManufacturer 0
iProduct 2 USB UHCI Root Hub
iSerial 1 d800
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x40
Self Powered
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type none
wMaxPacketSize 8
bInterval 255
Language IDs: (length=4)
0000 (null)((null))

Bus 001 Device 001: ID 0000:0000 Virtual Hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0000 Virtual
idProduct 0x0000 Hub
bcdDevice 0.00
iManufacturer 0
iProduct 2 USB UHCI Root Hub
iSerial 1 d400
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x40
Self Powered
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type none
wMaxPacketSize 8
bInterval 255
Language IDs: (length=4)
0000 (null)((null))

Bus 001 Device 002: ID 0553:0202 VLSI Vision Ltd.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0553 VLSI Vision Ltd.
idProduct 0x0202
bcdDevice 0.00
iManufacturer 1 STMicroelectronics
iProduct 2 USB Dual-mode Camera
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
Remote Wakeup
MaxPower 70mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type none
wMaxPacketSize 64
bInterval 0
Language IDs: (length=14)
0409 English(US)
040c French(French)
0407 German(German)
0410 Italian(Italian)
0c0a Spanish(Modern)
0416 Po rtugese(Portugese)

Creative Webcam3

もうすでに製造中止になっている、CreativeのWebcam3、OV511チップを搭載している35万画素VGAカメラで、Linuxでの多くの動作保証がされている製品。

偶然にアウトレットで手に入れることができたので早速試してみた。あと、もう一つ、CENTURYのお目付役という安い10万画素CMOSカメラを購入した。

Webcam3は、その動作実績のためか、なんの不自由もなく簡単に利用できた。ただ、問題は、お目付役の方だ。

メモるの忘れてしまいましたが、聞いたことのないチップ名で、認識されなかった。汎用的なものだろうとタカをくくってしまったのが仇になった。そのうちドライバを捜してきて、やってみよう。

著者 nabek

ホームページで小遣い稼ぎLinkShareアフィリエイト

Last modified
JUMP
use only. IE5.0/NN6.0 higher + Flash plugin.almost all Japanese EUC code pages.
Top / トップSoftware / ソフトウェアWebsite / サイトBusiness / ビジネスDownload / ダウンロードMALON / マロンTrash / ゴミ箱Scope / スコープLink / リンク
copyright (C)1996-2001 SCOPE