Навигация по сайту

Популярные статьи

Облако меток

Linux Webcam Server

  1. Оглавление
  2. Защита веб-камеры и фотоаппарата
  3. Первые тесты
  4. Приспособление случая
  5. Финальная сборка
  6. конфигурация
  7. Прямая трансляция с ffmpeg
  8. Прямая трансляция с MJPEG-стримером
  9. Захват неподвижного изображения
  10. конфигурация

На этой странице описан сервер камеры, изготовленный из запасных частей и дешевых компонентов. Цель проекта - собрать коробку Linux, заключенную в соответствующий корпус, чтобы ее можно было устанавливать на улице; ПК управляет веб-камерой и / или цифровой фотокамерой. К системе можно получить доступ и управлять с помощью веб-интерфейса.

Этому проекту уже несколько лет , о чем свидетельствует тот факт, что упоминаются древние дистрибутивы Linux (например, Ubuntu 8.04), а сервер веб-камеры представляет собой обычный громоздкий настольный ПК вместо, скажем, Raspberry Pi что я бы использовал сегодня. Я планирую обновить инструкции, но пока у меня не было времени на это. Надеемся, что основные понятия все еще должны быть полезными.

Оглавление

Мой серверный блок - это дешевая машина Intel PIII / 450 с 128 МБ оперативной памяти, работающая Linux Ubuntu 8.04 , У машины очень маленький диск (4,3 ГБ Maxtor), этого достаточно, учитывая, что мы не собираемся устанавливать графический интерфейс пользователя с приложениями и библиотеками. Чтобы сократить энергопотребление, я удалил дискету и CD / DVD-блок. Я добавил дешевую сетевую карту 10/100 fast Ethernet PCI и видеокарту, которая пригодится в случае проблем, хотя мы не собираемся подключать монитор к этой машине.

Беспроводная связь обеспечивается беспроводным USB-адаптером D-Link DWL-G122, который поддерживается в Linux с открытым исходным кодом. модуль RT73 , Если вы устанавливаете Ubuntu 8.04, вам не нужно выполнять дальнейшую настройку, поскольку модуль rt73 уже находится в ядре, и адаптер DWL-G122 будет автоматически распознаваться, как только он будет подключен. Жаль, что DWL-G122 больше не производится D-Link.

Я использую Logitech Quickcam E3500 , которое является UVC-совместимым устройством, поддерживаемым в Linux Linux UVC модули , Веб-камера имеет физическое разрешение 640 × 480 пикселей; он также включает в себя микрофон (он выглядит как устройство захвата ALSA). Опять же, Ubuntu 8.04 поставляется с модулем uvcvideo, уже встроенным в ядро, поэтому эта камера работает без дополнительных настроек.

Quickcam E3500 обеспечивает приемлемое разрешение (640 × 480) с хорошим качеством, учитывая его стоимость (я заплатил за него 29,90 евро, теперь это может быть даже дешевле), но для получения более качественных фотографий вам нужна цифровая фотокамера. Я купил подержанный 4Mpx Canon PowerShot A80 , которая имеет важную особенность удаленного управления в Linux с помощью gphoto2 , Вы можете проверить документацию gphoto2 для список камер с дистанционным управлением ,

Вы должны питать камеру от внешнего источника питания, так как внутренние батареи не будут работать долго. К сожалению, некоторые цифровые камеры довольно требовательны к напряжению и току, подаваемому внешним адаптером питания, поэтому может случиться так, что «общий» источник питания не обеспечивает соответствующий ток (и / или напряжение) для работы. Для Canon PowerShot A80 в руководстве пользователя указано, что для него требуется 4,3 В при 1,5 А (комплект сетевого адаптера Canon ACK600). Однако мне удалось использовать универсальный адаптер питания, который питает 4,5 В при 800 мА - обратите внимание, что в разъеме питания PowerShot A80 центральный контакт является положительным. Этого адаптера недостаточно для питания ЖК-дисплея камеры (который мне в любом случае не нужен, поскольку камера управляется ПК), но его достаточно для съемки даже с использованием внутренней вспышки. Если я пытаюсь использовать ЖК-дисплей, камера жалуется на низкий заряд батареи и немедленно отключается. Будьте внимательны при питании камеры от внешнего источника питания: у меня это сработало, но используйте вышеуказанную информацию на свой страх и риск. Я не несу ответственности за любой ущерб, который вы можете нанести своему оборудованию .

Наконец, учитывая, что старая материнская плата, которую я использую, имеет только два порта USB1.0, я купил D-Link DUB-A2 Плата PCI с 2 дополнительными портами USB2.0. Само собой разумеется, эта плата автоматически распознается Linux, и никакой специальной настройки не требуется.

Это список компонентов, которые я использовал:

  • Материнская плата, процессор PIII, 128 МБ ОЗУ
  • AT блок питания
  • Чехол для ПК
  • Жесткий диск 4,3 ГБ Maxtor EIDE
  • D-Link DUB-A2 двухпортовая карта USB2.0 PCI
  • PCI-адаптер Intel 10/100 PCI (полезен только при первоначальной установке системы, может быть удален после окончательного развертывания сервера)
  • Графическая карта на основе S3 (полезна только для целей установки и отладки, может быть удалена после окончательного развертывания сервера)
  • D-Link DWL-G122 Беспроводной USB-адаптер
  • Logitech Quickcam E3500 USB веб-камера
  • Canon PowerShot A80 4Mpx цифровая фотокамера
  • Деревянный ящик
  • Лист оргстекла
  • Белый пластиковый лист

Вот несколько изображений процесса сборки. Корпус представляет собой типичную среднюю башню, которая устанавливается в горизонтальном положении. Отсек для CD / DVD предлагает достаточно места для размещения как веб-камеры, так и Canon A80.

Защита веб-камеры и фотоаппарата

Для крепления веб-камеры и фотоаппарата к деревянной пластине используются резиновые ленты.

Первые тесты

Это первые тесты собранного корпуса, когда фотоаппарат и веб-камера находятся в своем окончательном положении. Деревянная плоскость, в которой находятся камеры, крепится к одной стороне отсека для CD / DVD с помощью пары винтов.

Приспособление случая

Внешний корпус сервера веб-камеры выполнен из старого деревянного ящика. Небольшое окно было вырезано, чтобы веб-камера и фотоаппарат выглядели наружу; окно было покрыто оргстеклом, герметизировано силиконом по краю.

Две пары отверстий (два отверстия снизу и два сверху на противоположной стороне) способствуют циркуляции воздуха снаружи. Отверстия были закрыты очень тонкой сеткой, чтобы держать насекомых вне коробки.

Наконец, коробка была окрашена в белый цвет, чтобы отражать немного света и, следовательно, избежать перегрева внутри. «Крыша» корпуса изготавливается путем приклеивания белого пластикового листа на деревянную основу.

Для покрытия переднего окна я использовал маленький кусочек оргстекла. Этот кусок был вырезан из большего листа оргстекла.

Финальная сборка

Это финальная сборка. Обратите внимание на три маленьких куска дерева, которые были прикреплены к нижней части корпуса: они необходимы для того, чтобы удерживать внутренний корпус ПК на месте.

Вот коробка с ПК внутри. Обратите внимание на маленький пластиковый шарик с зеленым верхом: он содержит гигроскопичный материал, который способен впитывать влагу, которая может образовываться внутри коробки. Также обратите внимание на большой вентилятор на задней панели корпуса ПК: он используется для принудительной циркуляции воздуха внутри коробки, что позволяет избежать образования влаги внутри окна.

Я настроил беспроводной адаптер со статическим (частным) IP-адресом. Адаптер автоматически подключается к моей точке доступа с использованием аутентификации WPA-PSK. Чтобы включить аутентификацию WPA, вам необходимо установить пакет wpasupplicant:

sudo apt-get установить wpasupplicant

Теперь создайте файл конфигурации для wpa-supplicant с помощью команды wpa_passphrase, например:

$ wpa_passphrase my_network # чтение парольной фразы из stdin my_password network = {ssid = "my_network" # psk = "my_password" psk = a4ea383f2d8e77c45ec859de70b9ea37b30d79153d049cbc88fe6bc86d2cba

где my_network - это ESSID вашей точки доступа, а my_password - ваша парольная фраза WPA. Вам нужно вставить вывод команды wpa_passphrase в файл /etc/wpa_supplicant.conf. На этом этапе предположим, что вы хотите автоматически подключиться к точке доступа при загрузке системы. Кроме того, давайте предположим, что (статический) IP-адрес сервера вашей веб-камеры будет 192.168.0.50, а IP-адрес шлюза - 192.168.0.71. Вам нужно добавить что-то вроде следующего в ваш файл конфигурации / etc / network / interfaces:

auto wlan0 iface wlan0 статический адрес inet 192.168.0.50 маска сети 255.255.255.0 шлюз 192.168.0.71 wpa-драйвер wext wpa-conf /etc/wpa_supplicant.conf

Обратите внимание, что если у вас также есть проводной интерфейс, подключенный к вашей системе (как и я), необходимо также запретить его активацию при загрузке, иначе вы не сможете правильно маршрутизировать пакеты. Если у вас есть что-то подобное в / etc / network / interfaces

auto eth0 iface eth0 inet статический адрес ... маска сети ... шлюз ...

Вам необходимо удалить из комментария строку auto eth0, как показано ниже:

# auto eth0 iface eth0 inet статический адрес ... маска сети ... шлюз ...

Мы можем назначить более подходящее имя для сервера веб-камеры, например, sacam-wlan.localdomain. Чтобы использовать это имя на других компьютерах, нет необходимости устанавливать где-либо полный сервер имен. Клиентские Linux-блоки можно настроить, просто добавив следующую строку в / etc / hosts:

192.168.0.50 sacam-wlan sacam-wlan.localdomain

Проверить Wireless HOWTO а также Linux Networking HOWTO для дополнительной информации.

конфигурация

Если ваша веб-камера является устройством UVC, поддерживаемым модулем uvcvideo (проверьте список устройств, поддерживаемых UVC ), и вы используете новейшее ядро, веб-камера должна автоматически распознаваться при подключении ее к системе. Проверьте вывод dmesg на что-то вроде этого:

... [77.970315] Интерфейс захвата видео в Linux: v2.00 [78.319026] uvcvideo: Найдено устройство UVC 1.00 <безымянный> (046d: 09a4) [78.364309] usbcore: зарегистрирован новый драйвер интерфейса uvcvideo [78.364347] Драйвер USB Video Class (v0) .1.0) ...

Если модуль uvcvideo успешно загружен, вы должны найти устройство / dev / video0, соответствующее веб-камере. Чтобы проверить, все ли в порядке, вы можете попробовать следующую команду:

mplayer tv: // -frames 10 -tv fps = 5: driver = v4l2: ширина = 640: высота = 480: устройство = / dev / video0 -vo null

Приведенный выше комментарий захватывает (и сразу удаляет) 10 кадров с устройства / dev / video0 со скоростью 5 кадров в секунду.

Прямая трансляция с ffmpeg

Теперь мы опишем, как настроить веб-камеру для потоковой передачи. Чтобы включить потоковую передачу с веб-камеры, вы можете использовать ffmpeg и ffserver , Установите пакет ffmpeg (под Ubuntu вы просто делаете sudo apt-get install ffmpeg) и создайте файл конфигурации ~ / Ffserver.conf для ffserver. Файл конфигурации определяет три потока, которые доступны с других компьютеров в качестве следующих URI:

http: // sacam-wlan: 8090 / webcam.mjpeg (формат MJPEG, может использоваться для прямой трансляции в любой браузер без необходимости дополнительного плагина на принимающей стороне); http: // sacam-wlan: 8090 / webcam.flv (формат видео Flash, хорошего качества, требуется плагин на принимающей стороне); http: // sacam-wlan: 8090 / webcam.asf (формат ASF, может передавать как аудио, так и видео, хорошего качества, требуется плагин или вы можете использовать MPlayer или же VideoLAN для отображения потока)

Выполните эти команды для запуска потоков:

ffserver -f ~ / ffserver.conf & ffmpeg -v 2 -r 5 -s 640x480 -f video4linux2 -i / dev / video0 http: // localhost: 8090 / webcam.ffm

Если вы хотите передавать потоковое аудио с помощью Quickcam E3500, вам необходимо установить модули совместимости oss:

sudo modprobe snd-mixer-oss snd-pcm-oss snd-seq-oss

Кроме того, вам нужно добавить -f audio_device -i / dev / dsp в командную строку ffmpeg; наконец, вам нужно настроить файл конфигурации ffserver.conf для добавления захвата звука (то есть вы должны удалить директивы Noaudio).

На этом этапе вы можете подключиться с другого компьютера для просмотра видеопотока:

mplayer http: // sacam-wlan: 8090 / webcam.asf

На следующем рисунке показано окно MPlayer на принимающей стороне (изображение слева было сделано с помощью Canon PowerShot A80, изображение справа - это прямой эфир в формате ASF, снятый Logitech Quickcam E3500):

соответствующая ссылка

Прямая трансляция с MJPEG-стримером

MJPEG-стример это программное обеспечение, которое позволяет вам передавать живые изображения в формате M-JPEG с любого устройства, совместимого с UVC. M-JPEG в основном представляет собой последовательность изображений JPEG, и большинство веб-браузеров могут отображать поток M-JPEG без использования какого-либо плагина. Кроме того, по моему опыту, MJPEG-streamer более надежен, чем ffmpeg, поэтому настоятельно рекомендуется.

Захват неподвижного изображения

Вы можете использовать веб-камеру для захвата отдельных изображений. Обратите внимание, что на момент написания, модуль uvcvideo не поддерживает захват неподвижных изображений с устройств UVC. Таким образом, в настоящее время вы не можете использовать преимущества более высоких разрешений, которые некоторые устройства допускают захват неподвижных изображений, но вы должны извлечь один кадр из видеопотока. Однако необходимо соблюдать осторожность, так как многие программы захвата изображений инициализируют и закрывают видеоустройство перед / после каждого захвата. Возможно, что изображение захватывается до того, как веб-камера установится, что приводит к появлению черных или очень темных кадров.

Существует много способов надежного захвата отдельных кадров с видеоустройства UVC. Я предлагаю вам рассмотреть uvccapture , Этот инструмент передает потоковое видео с веб-камеры и может сохранять выбранные кадры в виде изображений JPEG. Например, предположим, что мы хотим захватывать один кадр каждые 10 секунд с разрешением 640 × 480 с видеоустройства / dev / video0 и сохранять кадр в файл webcam.jpg в формате JPEG с качеством 95%. Мы можем использовать следующую команду на сервере веб-камеры

uvccapture -d / dev / video0 -x640 -y480 -t10 -owebcam.jpg -q95

Убедитесь, что ни одна другая программа не обращается к веб-камере во время работы uvccapture, иначе она будет жаловаться на невозможность доступа к видеоустройству. Вы также можете получить один кадр из потока ffmpeg с помощью mplayer. Если вы настроили видеопоток на серверном компьютере в соответствии с инструкциями в разделе выше, вы можете использовать эту команду, чтобы извлечь из нее один кадр:

mplayer -frames 1 http: // sacam-wlan: 8090 / webcam.asf -vo jpeg

В условиях низкой освещенности каждый датчик CCD производит шум. Однако возможно улучшить качество захваченного изображения путем усреднения нескольких кадров. Вы можете использовать эту команду на сервере веб-камеры (убедитесь, что вы не используете потоковую передачу с помощью ffmpeg, иначе mplayer не сможет получить доступ к видеоустройству):

mplayer tv: // -frames 10 -tv fps = 5: driver = v4l2: ширина = 640: высота = 480: устройство = / dev / video0 -vo jpeg

Эта команда получает 10 кадров (-frames 10) с устройства / dev / video0 и сохраняет их как изображения в формате jpeg с именами от 00000001.jpg до 00000010.jpg.

Вы также можете получить кадры из потока ffmpeg следующим образом:

mplayer -frames 10 http: // sacam-wlan: 8090 / webcam.asf -vo jpeg

Кадры могут быть объединены и усреднены с помощью следующей команды (из ImageMagick упаковка):

конвертировать 000000 ??. jpg -average frame.jpg

конфигурация

Я предлагаю получить последнюю версию пакетов gphoto2 и libgphoto2 от домашняя страница gphoto2 , Сначала скомпилируйте и установите libgphoto2, а gphoto2. Для доступа к камере вам необходимо настроить udev для получения соответствующих разрешений на устройстве USB: см. инструкции gphoto2 о том, как это сделать. Помните, что селектор на верхней части камеры должен быть установлен на Авто, а селектор на задней панели камеры должен быть установлен на «Воспроизведение» , иначе вы не сможете управлять камерой.

Чтобы попробовать камеру, сначала убедитесь, что режим камеры установлен на Авто с помощью верхнего диска, затем включите камеру. Теперь дайте следующую команду:

gphoto2 - set-config capture = 1 --set-config capturetarget = 0 --capture-image-and-download --set-config capture = 0

Команда --set-config capture = 1 используется для извлечения объектива и включения съемки изображения. --set-config capturetarget = 0 позволяет камере сохранять изображение во внутренней памяти, а не на карте памяти. Фактический снимок делается с помощью ключа --capture-image-and-download, а окончательный параметр --set-config capture = 0 используется для втягивания объектива.

Если вы используете другую фотокамеру, вы можете изменить настройки, используемые для захвата изображения. Чтобы запросить список доступных элементов управления, введите следующую команду:

gphoto2 --set-config capture = 1 --list-config

Чтобы запросить конкретный элемент управления, используйте параметр --get -config control_name следующим образом:

gphoto2 --get-config capturetarget

Обратите внимание, что может случиться так, что камера захватывает внутреннюю карту памяти, даже если она сообщает, что использует внутреннюю память. В такой ситуации время захвата больше и могут возникать ошибки, когда камера внутренне переключает папку. Чтобы убедиться, что вы действительно захватываете внутреннюю память, сделайте следующее:

gphoto2 --set-config capturetarget = 1 --set-config capturetarget = 0

то есть сначала установите захват на карту памяти, а затем переключитесь на захват в ОЗУ. На этом этапе настройки должны быть сохранены как на вашем компьютере, так и на камере, поэтому вам не нужно вводить эту команду снова.

Это полная команда захвата:

gphoto2 --set-config capture = 1 # Включить захват \ --set-config capturetarget = 0 # Захват во внутреннюю память \ --set-config canonimgsize = 2 # Захват при 1024x768 \ --set-config assistlight = 0 # Отключить подсветка автофокусировки \ -F 1680 -I 30 # Захватить одно изображение каждые 30 с, 1680 изображений \ --capture-image-and-download # Захват и загрузка \ --filename "% Y% m% d% H% M% S.jpg " # Файлы будут называться YYYYMMDDhhmmss.jpg

Более подробная информация на отдельной странице ,

Работа в процессе...