Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> настройка —> freebsd + webcamera

Настройка вебкамеры для работы с freebsd

Автор: vp.


Задача - подключить камеру к freebsd. Для начала нам необходимо просто подключить камеру к freebsd и заставить ее работать.

Итак, на сервере используется freebsd 7.0.
После подключения камеры:
# usbdevs -v
Controller /dev/usb4:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x0000), rev 1.00
port 1 addr 2: full speed, power 100 mA, config 1, product 0x08d7(0x08d7), vendor 0x046d(0x046d), rev 1.00

# dmesg | grep 0x046d
ugen0: <vendor 0x046d product 0x08d7, class 0/0, rev 1.10/1.00, addr 2> on uhub4

vendor 0x046d - говорит о производителе камеры(Logitech)
product 0x08d7 - это модель камеры

Поиск в сети решения для работы с камерой дало следующие результаты,
* существует порт graphics/spcaview, который позволяет без лишних наворотов и зависимостей снимать с камеры jpeg изображения, а так же работать с mjpeg форматом(потоковый jpgeg)
* graphics/qcamview - не подошел по причине отсутствия драйвера для конкретной модели и привязки к X11
* multimedia/pwcbsd - требует video4linux и совместимости с linux'ом

Из-за того, что qcamview и pwcbsd требую слишком много стороннего софта(в частности X11 и/или поддержки linux на бинарном уровне) для всего-лишь снятия изображения с камеры, решено было использовать graphics/spcaview

Т.к. мы поставили целью избавиться от зависимости от X11, перед установкой порта необходимо убедиться, что в /etc/make.conf содержиться строка вида "WITHOUT_X11=yes", что позволит собирать программы без библиотек X11(например, полезно для GD)
# cat /etc/make.conf | grep 'WITHOUT_X11=yes' || echo "WITHOUT_X11=yes" >> /etc/make.conf

Устанавливаем порт, но не через
# pkg_add -r graphics/spcaview

т.к. как выяснилось в последствии, поддержки текущей камеры нет в программе, а компилируем порт из исходников:
# cd /usr/ports/graphics/spcaview
# make && make install && rehash

При работе freebsd с камерами создается специальное устройство ugenX(например, /dev/ugen0)
Проверяем поддержку камеры
# spca5shot -d /dev/ugen0 -i
Not found SPCA50x based usb camera, or Permission denied

Поддержки камеры нет, увы. Но мы ее добавим! Находим файл с данными о камерах и просматриваем его на предмет наличия поддержки камеры производителя 0x046d:
# less /usr/ports/graphics/spcaview/work/spca5xx-20060402/drivers/usb/spca5xx.c | grep 0x046d
{USB_DEVICE(0x046d, 0x0960)}, /* Logitech Inc. ClickSmart 420 */
{USB_DEVICE(0x046d, 0x0901)}, /* Logitech Inc. ClickSmart 510 */
{USB_DEVICE(0x046d, 0x0890)}, /* Logitech QuickCam traveler */
{USB_DEVICE(0x046d, 0x0900)}, /* Logitech Inc. ClickSmart 310 */
{USB_DEVICE(0x046d, 0x0905)}, /* Logitech ClickSmart820 */
{USB_DEVICE(0x046d, 0x08a2)}, /* Labtec Webcam Pro */
{USB_DEVICE(0x046d, 0x0921)}, /* Labtec Webcam */
{USB_DEVICE(0x046d, 0x0920)}, /* QC Express */
{USB_DEVICE(0x046d, 0x0928)}, /* Logitech QC Express Etch2 */
{USB_DEVICE(0x046d, 0x092a)}, /* Logitech QC for Notebook */
{USB_DEVICE(0x046d, 0x08a0)}, /* Logitech QC IM */
{USB_DEVICE(0x046d, 0x08a1)}, /* Logitech QC IM 0x08A1 +sound */
{USB_DEVICE(0x046d, 0x08a3)}, /* Logitech QC Chat */
{USB_DEVICE(0x046d, 0x08b9)}, /* Logitech QC IM ??? */
{USB_DEVICE(0x046d, 0x0929)}, /* Labtec Webcam Elch2 */
{USB_DEVICE(0x046d, 0x092c)}, /* Logitech QC chat Elch2 */
{USB_DEVICE(0x046d, 0x08ae)}, /* Logitech QuickCam for Notebooks */
{USB_DEVICE(0x046d, 0x092b)}, /* Labtec Webcam Plus */
{USB_DEVICE(0x046d, 0x08ad)}, /* Logitech QCCommunicate STX */
{USB_DEVICE(0x046d, 0x08a9)}, /* Logitech Notebook Deluxe */
{USB_DEVICE(0x046d, 0x08aa)}, /* Labtec Webcam Notebook */
{USB_DEVICE(0x046d, 0x08a6)}, /* Logitech QCim */
case 0x046d: /* Logitech Labtec */

Как можно заметить, поддержки нашей камеры нет в файле
Поиск в сети по 0x08d7 модели камеры показал, что такая поддержка имеется в драйвере Logitech видеокамер gspcav1(http://mxhaard.free.fr/spca5xx.html). gspcav1 - это общий файл поддержки видеокамер для *nix систем, однако в скомпилированном виде он требует бинарной совместимости с linux, что нам не подходит.

Т.к. порт graphics/spcaview основан именно на этом драйвере, скачиваем исходники драйвера для анализа http://mxhaard.free.fr/spca50x/Download/gspcav1-20071224.tar.gz. Нас интересует файлы gspca_core.c и gspca.h

Анализ исходника gspca_core.c дает следующий код по модели 0x08d7:
    {USB_DEVICE(0x046d, 0x08d7)},	/* Logitech QCam STX */

и далее
    case 0x08d7:
        spca50x->desc = LogitechQCCommunicateSTX;
        spca50x->bridge = BRIDGE_ZC3XX;
        spca50x->sensor = SENSOR_HV7131C;
        break;

Осталось добавить эти данные в драйвер spca5xx.c из нашего порта graphics/spcaview и, возможно, появиться поддержка камеры. Но прежде, нужно не забыть стереть уже скомпилированные данные:
# cd /usr/ports/graphics/spcaview
# make clean

Теперь наша задача внести изменения в исходник драйвера и откомпилировать его.
Применяем патчи но не компилируем исходник
# make patch

Далее редактируем /usr/ports/graphics/spcaview/work/spca5xx-20060402/drivers/usb/spca5xx.c любимым редактором и вносим следующие изменения:
Добавляем в секцию устройства 0x046d
    {USB_DEVICE(0x046d, 0x08d7)},       /* Logitech QCam STX */

После чего исходный текст будет выглядеть примерно так:
    {USB_DEVICE(0x046d, 0x08ad)},       /* Logitech QCCommunicate STX */
    {USB_DEVICE(0x046d, 0x08a9)},       /* Logitech Notebook Deluxe */
    {USB_DEVICE(0x046d, 0x08d7)},       /* Logitech QCam STX */
    {USB_DEVICE(0x046d, 0x08aa)},       /* Labtec Webcam  Notebook */

Теперь нам необходимо добавить конфигурацию камеры, находим в исходном файле секцию камер Logitech:
    case 0x046d:		/* Logitech Labtec */
    case 0x041E:		/* Creative cameras */
	switch (product) {

Далее идет перечисление всех известных камер Logitech, нам необходимо создать новую секцию и добавить в spca5xx.c данные из драйвера gspca_core.c:
	case 0x08d7:
	    spca50x->desc = LogitechQCCommunicateSTX;
	    spca50x->bridge = BRIDGE_ZC3XX;
	    spca50x->sensor = SENSOR_HV7131C;
	    break;

Но это еще не все. Исходный текст spca5xx.c показывает, что для freebsd используются более расширенные настройки! Для добавления необходимой информации ищем какую-нибудь запись с сенсором SENSOR_HV7131C, например:
	case 0x08a6:
	    spca50x->desc = LogitechQCim;
	    spca50x->bridge = BRIDGE_ZC3XX;
	    spca50x->sensor = SENSOR_HV7131C;
	    spca50x->header_len = SPCA50X_OFFSET_DATA;
	    spca50x->i2c_ctrl_reg = SPCA50X_REG_I2C_CTRL;
	    spca50x->i2c_base = 0;
	    spca50x->i2c_trigger_on_write = 0;
	    spca50x->cameratype = JPGH;
	    info("USB SPCA5XX camera found. Logitech QC IM ");
	    break;

И копируем недостающие данные в нашу секцию, внеся небольшие изменения в название:
	case 0x08d7:
	    spca50x->desc = LogitechQCCommunicateSTX;
	    spca50x->bridge = BRIDGE_ZC3XX;
	    spca50x->sensor = SENSOR_HV7131C;
            spca50x->header_len = SPCA50X_OFFSET_DATA;
	    spca50x->i2c_ctrl_reg = SPCA50X_REG_I2C_CTRL;
	    spca50x->i2c_base = 0;
	    spca50x->i2c_trigger_on_write = 0;
	    spca50x->cameratype = JPGH;
	    info("USB SPCA5XX camera found. Logitech QCam STX ");
	    break;

       
Все! Осталось скомпилировать и установить драйвер:
# cd /usr/ports/graphics/spcaview
# make && make install && rehash

   
Теперь проверим работу нашего драйвера
# spca5shot -i -d /dev/ugen0
USB SPCA5XX camera found. Logitech QCam STX


[spca5xx_probe:8279] Camera type JPEG
[zc3xx_config:530] Find Sensor HV7131R(c)
[spca5xx_getcapability:2242] maxw 640 maxh 480 minw 176 minh 144
--- video capability ---
name: Logitech QuickCam Communicate Stype: 1
channels: 1
maxwidth: 640
maxheight: 480
minwidth: 176
minheight: 144
--- size and format ---
size: 640x480 352x288 320x240 176x144 160x120
native input format: JPEG
output format: 24bit RGB
--- video picture (initial value) ---
brightness: 32768
hue: 0
colour: 0
contrast: 32768
whiteness: 0
depth: 24
palette: 4

Done.

Ура! Работает! Теперь можно делать снимки с камеры используя команду spca5shot, так же можно настроить доступ к устройству /dev/ugen0 не из-под рута и модифицировать программу онлайн-просмотра камеры, но об этом в другой раз.
PS Так же можно подключить отдельные камеры, которых нет в исходниках, однако, возможно, потребуется эксперементировать с настройками.
PPS Моя первая статья, просьба указать на недостатки! )



размещено: 2009-01-26,
последнее обновление: 2009-01-30,
автор: vp


Le1, 2009-01-27 в 13:47:48

Сам с кмерой не работал, но статья хорошая, да и много чел трудился, в поисках и в редактировании сорсов, уважуха !!!
Только одно не пойму, чем мешала совместимость с Linux Binaries, поставил бы ее сразуже и все ?

vp, 2009-01-27 в 14:39:34

Там не только linux binaries, а еще и весь x! Какой смысл собирать и тратить место в системе на кучу ненужных библиотек, ради одной функции? А при обновлении системы сколько сил и нервов и траффика уйдет на x11? К тому же, не факт, что там бы заработало без особых ухищерений типа последующей конвертации видео в jpeg и т.п. )
Кстати, времени потрачено не много. 1 день.
Ну и смысл статьи - показать, что не надо боятся эксперементировать! ) И что все проще, чем кажется.

maper, 2009-01-27 в 15:13:15

Из комплекта pwcbsd очень рекомендую pwcview. Работает с    /dev/video, имеет встроенный детектор движения, пишет видео.
У меня motion, spook и др. c драйвером камеры (A4TECH) не пошли.
А здесь почти никаких настроек, только коммандная строка!

GR, 2009-01-27 в 17:48:31

Молодец! Есть ещё нормальные юниксоиды в России - те которых интересует что внутри а не какого цвета блестки на обертке (это к примеру все бубунтоиды :)
При этом не перебрал со слэнгом и статья получилась даже увлекательной - я вон нашел какую то логитечную камеру вечером буду прикручивать :)
Вобщем -  1) Удачи! 2) Если по ангельски умеешь - отправь патч авторам софта. Мы же BSD-шники а не каие ляпиксоиды жадные :)

buryanov, 2009-01-27 в 21:25:28

Поправь cd /usr/ports/graphics/spcawiew
на /usr/ports/graphics/spcaview/ и graphics/spcawiew
на graphics/spcaview/

arksu, 2009-01-28 в 10:47:36

правильная статья! так держать!

vp, 2009-01-28 в 11:11:50

Спасибо за положительные отзывы, значит, не зря старался ) Будут еще интересные статьи, время бы найти.
К сожалению, мэйнтейнер проекта больше не занимается развитием драйвера, все должны пользоваться линуксовым драйвером если хотят поддержки видеокамеры.
Однако, у нас теперь есть простой способ обойтись и без мэйнтейнера )

гигиенишвили, 2009-01-28 в 18:21:47

вот уж действительно суровые бсдшники, которым ненужны лёгкие пути=) и такую удобную ось юниты вроде федорчуга с citforum.ru предлагают юзать на десктопе.

кстати, начал повторять этот эксперимент, дыг при сборке эта софтинка потянула за собой штук 10 зависимостей, включая почему-то gtk1, может потому-что нашла х11 в системе, ещё не смотрел..

Arch, 2009-01-28 в 22:53:49

Во геморрой то!И это некоторые сватают на десктоп?Кошмар.А в линуксе такая же задница с этими камерами и все так же убого?

nikll, 2009-01-29 в 10:41:05

>Во геморрой то!И это некоторые сватают на десктоп?Кошмар.А в линуксе такая же задница
>с этими камерами и все так же убого?

Кто для чего десктоп юзает, мне для работы кроме браузера и консоли ничо больше не надо.....

MixUp, 2009-01-29 в 13:37:58

Поставил всё по описанию
у меня FreeBSD 7.1 RELEASE вебкамеру Logitech увидела сразу
ugen0: <Pixart Imaging Inc. CIF Single Chip, class 255/255, rev 1.10/1.00, addr 2> on uhub0
далее поставил netpbm и портов
/usr/ports/graphics/netpbm
оттуда была взята утилитка ppm2jpeg
/usr/local/bin/spca5shot -s 352x288 -e 5 -c 15000 -b 20000 -D 0 | /usr/local/bin/ppmtojpeg > /tmp/webcam.jpg

vp, 2009-01-29 в 14:26:36

Arch, гигиенишвили: я полагаю freebsd - это 99% серверное решение. Монолитное и нерушимое. Смысл ставить графику, когда раз настроил сервер и забыл про него вообще.
MixUp: spca5shot умеет в jpeg. В man spca5shot написано, ключ -j. По-крайней мере у меня сразу собралась с поддержкой jpeg.

Arch, 2009-01-29 в 18:30:05

Что-то мне не очень понятно - а зачем именно web-камера нужна на сервере?Да еще с выдачей результата в jpeg?А что с ней делать потом?Как видеонаблюдение и регистрация вебкамеры дрянь - плохо видят в темноте и jpeg для видеорегистрации - несколько не то что надо.

E-Wind, 2009-01-30 в 10:07:38

В man spca5shot написано, ключ -j

http://forum.lissyara.su/viewtopic.php?f=8&t=9066&p=135600#p135600

vp, 2009-01-30 в 13:21:11

Внес важное дополение насчет сборки пакета без X11.
Arch: у нас используется для контроля сотрудников. Всегда можно посмотреть, есть кто на месте, или нет. 1 снимок в jpeg делается порядка 2-3 секунд. Так что позволяет. Ну и камеры поддерживают mjpeg передачу. Что практически в реальном времени показывает ситуацию.
К тому же не всем нужна навороченная истема видеонаблюдения. Многим достаточно и 1 камеры за $100 прямо на рутере дома или в главной и единственной офисной комнате :)

opt1k, 2009-02-04 в 15:28:31

автору спасибо, ещё бы написать про железо на котором всё было поднято

pm, 2009-02-11 в 23:53:11

Статья класс! мало текста и всё по делу и с пояснениями...
у меня вопрос, как ещё видео с камеры в реалтайме в сеть передавать и чем это принимать?

vp, 2009-02-12 в 11:34:53

pm нужно смотреть в сторону mjpeg передачи. В мануале(man spca5shot) написано как на определенный порт повесить поток данных. Можно подключиться прямо к этому порту плеером, или же использовать специализированый плеер(поискать в гугле на предмет mjpeg), но, к сожалению, этот вопрос я не изучал. Если есть вопросы, обращайтесь на аську или по почте, подскажу чем смогу.

pm, 2009-02-14 в 2:15:16

/home/pm/webcam# spca5shot -d /dev/ugen1 -s 160x120 -S > test.ppm
USB SPCA5XX camera found.Genius GF112 (PAC207-BCA)


[spca5xx_probe:8263] Camera type GBRG
[spca5xx_getcapability:2241] maxw 352 maxh 288 minw 160 minh 120
VIDIOCMCAPTURE: invalid format (21)

Done.
/home/pm/webcam#

:( кто знает как видео сделать?
и ещё...
spca5shot -d /dev/ugen1 -s 352x288 -t > test.ppm
...
frame rate: 2.24(fps)
...

это что? типо 2.24 кадра в секунду? О_о

nice, 2009-04-09 в 18:29:14

прикольно

yurka, 2009-04-11 в 16:40:04

Так и не завел эту (фром чайна виз лав):(

port 1 addr 2: full speed, power 250 mA, config 1, USB Web Camera(0x3000), SiGma Micro(0x1c4f), rev 1.00

vp, 2009-04-13 в 11:39:56

В статье описано как можно написать драйвер для в/к. При должном усилии вполне возможно подключить любую видеокамеру. Однако, это может быть сложно, если даже класса подобных устройств нет в описании... Если драйвера нет в линукс версии драйвера и/или в интернете нет ссылок на аналоги, то тут пока только 2 варианта: подключать к виндос или обратиться к разработчикам за спецификациями(чип матрицы и параметры передачи данных).

crsd, 2009-04-30 в 4:00:08

а можно ли указанные действия оформить в виде патча, и сделать ему send-pr? :) или хотя бы выложить тут, чтобы не приходилось всем править руками файлы

al_vin, 2009-05-16 в 14:42:16

Хорошая статейка. Пошаговая. Прикрутил камеру. Только я бы добавил еще один шаг отсутствие которого приводит к  
...
spca5xx.c: In function `spcaDetectCamera':
spca5xx.c:6969: error: `LogitechQCCool' undeclared (first use in this function)
spca5xx.c:6969: error: (Each undeclared identifier is reported only once
spca5xx.c:6969: error: for each function it appears in.)
*** Error code 1
...
А так все ок!

nero777, 2009-08-17 в 11:54:56

отличная статья,как всегда.прикрутил на 7.0 Genius LookUp 312.но немогу,пока,прикрутить видео.xawtv не собирается из портов.

nero777, 2009-08-27 в 18:52:15

продолжение в студию

ufs, 2010-01-12 в 20:30:48

Отлично! Заработало все... только код модели был другой.

Роман, 2010-03-25 в 0:42:14

мда, действительно жопа
вот так вдруг понадобится срочно какой-нибудь девайс подключить, а фря его не видит. До сих пор не могу заставить, чтоб она мой плеер приконектила, нихера.
Нах такое дело, беру второй комп и ставлю на неё винду.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0559 секунд
Из них PHP: 27%; SQL: 73%; Число SQL-запросов: 77 шт.
Исходный размер: 48737; Сжатая: 12268