[ Домой ] [ О себе ] [ Мое резюме ] [ Мои проекты ] [ Рассказки ] [ Форум ] [ Фото ] [ Написать ]

Делаем захват картинок с USB Web камеры с просмотром через браузер. Версия 2.0

Есть Web камера с USB интерфейсом, сервер под Linux. Надо обеспечить захват картинки с камеры и просмотр этих картинок через браузер.

Решение:
Забираем тут программу fswebcam. Все опыты ставились на версии 20061210.
Собираем fswebcam:

./configure && make && make install

Диагностика:

Сначала убедимся в том, что ядро видит камеру на USB порту:

[root@service hdc5]# lsusb
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 002: ID 0c45:6028 Microdia
Bus 001 Device 001: ID 0000:0000
Строчка "Bus 001 Device 002: ID 0c45:6028 Microdia" говорит как раз о том, что ядро наше USB устройство увидело.

Двигаемся далее. Посмотрим, а видит ли fswebcam нашу камеру:

[root@service hdc5]# fswebcam -d /dev/video0 --list-inputs --verbose
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
src_v4l2_get_capability,80: /dev/video0 information:
src_v4l2_get_capability,81: cap.driver: "sn9c102"
src_v4l2_get_capability,82: cap.card: "SN9C10[12] PC Camera"
src_v4l2_get_capability,83: cap.bus_info: "1-2"
src_v4l2_get_capability,84: cap.capabilities=0x05000001
src_v4l2_get_capability,85: - VIDEO_CAPTURE
src_v4l2_get_capability,94: - READWRITE
src_v4l2_get_capability,96: - STREAMING
--- Avaliable inputs:
0: USB
No input was specified, using the first.
src_v4l2_set_input,172: /dev/video0: Input 0 information:
src_v4l2_set_input,173: name = "USB"
src_v4l2_set_input,174: type = 00000000
src_v4l2_set_input,177: audioset = 00000000
src_v4l2_set_input,178: tuner = 00000000
src_v4l2_set_input,179: status = 00000000
src_v4l2_set_pix_format,529: Device offers the following V4L2 pixel formats:
src_v4l2_set_pix_format,541: 0: BA81 (bayer rgb)
Using palette JPEG
src_v4l2_set_mmap,649: mmap information:
src_v4l2_set_mmap,650: frames=4
src_v4l2_set_mmap,695: 0 length=110592
src_v4l2_set_mmap,695: 1 length=110592
src_v4l2_set_mmap,695: 2 length=110592
src_v4l2_set_mmap,695: 3 length=110592
--- Capturing frame...
fswc_verify_jpeg_dht,306: Inserting DHT segment into JPEG frame.
gd-jpeg: JPEG library reports unrecoverable error: Not a JPEG file: starts with 0x41 0x4b
Captured frame in 0.00 seconds.
fd = 3
--- Processing captured image...

Строчка "/dev/video0 opened" говорит о том, что видит.
Строчки, начинающиеся на src_v4l2_get_capability - возможности нашей камеры. Обратим внимание на строчки:
src_v4l2_set_pix_format,529: Device offers the following V4L2 pixel formats:
src_v4l2_set_pix_format,541: 0: BA81 (bayer rgb)
В них содержится информация о палитре. Посмотрите в man fswebcam какую палитру выбрать (ключик --palette).


Скрипт для автозапуска берем тут.
Конфиг для этого скрипта (класть в /etc/sysconfig/fswebcam):

OPTIONS="-c /etc/sysconfig/fswebcam.conf"
WEBCAM_USER="fswebcam"

В скрипте предполагается, что демон стартует не от пользователя root, если в Вашем случае это не так - исправьте скрипт.

Рисуем конфиг:

[root@service sysconfig]# cat fswebcam.conf
#
# Config file for fswebcam
#
background
pid /usr/local/www/htdocs/webcam/fswebcam.pid
quiet
loop 5
device /dev/video0
input 0
palette BAYER
frames 1

no-banner
log syslog
save /usr/local/www/htdocs/webcam/webcam-01.jpg

Описание параметров читаем в man fswebcam.

Делаем веб страничку типа вот этой

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r" />
<meta http-equiv=refresh content="5; url=/webcam/">
<meta http-equiv=pragma content=no-cache>
<style type="text/css">
/* Cleaned CSS: */

body {
    background-color:  #ffffff;
    color:             #000000;
    font:              normal normal 10pt Verdana, Arial, Helvetica, sans-serif;
}
</style>
<title>Камера в офисе</title>
</head>
<body>
<div align="center">
<p>Камера в офисе</p>
<img src="/webcam/webcam-01.jpg">
</div>
</body></html>

Для рефреша в IE и Opera надо в Апач добавить mod_expire и в конфиге для виртуального хоста:

<Directory "/usr/local/www/htdocs/webcam/">
    ExpiresActive on
    ExpiresByType image/jpeg "now"
</Directory>
Также сделал скриптик для Nagios. Проверяет время последней модификации картинки и если оно больше положенного, то считаем что fswebcam не работает.
Брать тут. Если будет желание - пишите, объясню как привинтить его к Nagios.
[ Домой ] [ О себе ] [ Мое резюме ] [ Мои проекты ] [ Рассказки ] [ Форум ] [ Написать ]