Делаем захват картинок с 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...
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@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 не работает.