Домашняя страничка Стефурак П.Б. Простая web камера.
 
 
  
  
 
Промзона \ Простая web камера.
Простая web камера, не требовательная к ресурсам
 
Есть у меня дома выделенная линия интернет, старенький компьютер (PIII 850мГц) и USB камера - почему бы не сделать web камеру!
Проблема в том, что имеющееся в изобилии ПО для web трансляции картинки с USB камеры требовательно к ресурсам.
В частности, все мною испробованное или не работает, или грузит машинку на 100%, так что даже курсор мыши не сдвинуть, или
"глючит", по этому решил написать свое простое ПО для этого дела.
В итоге родилось следующее решение:
специальной программой картинка из USB камеры пишется в файл по определенному алгоритму: если есть движение в кадре, то каждые 20сек, если нет, то каждую минуту.
полученные картинки помещаются в каталог, доступный web серверу, в моем случае IIS.
при обращении к адресу модуля сервера, за картинкой, модуль ищет в каталоге последнюю сохраненную картинку и отдает ее пользователю по стандартному HTTP протоколу.
выполняется много других необходимых действий, таких как очистка каталога от старых файлов, перезапуск сервера IIS, и т.д.
программа стартует и выгружается по расписанию, при запуске запускает web сервер, при выгрузке останавливает web сервер.
программа начинает работать, как только выбрано устройство и размеры картинки, но автоматически эти настройки не запоминает (Use Save!).
Внешний вид окна программы получения изображения из USB камеры (Re_host):
Часть настроек программы выполняется из главного окна (см. выше), часть - в INI файле программы: VideoDevice= - выбранное устройство VideoSize= - выбранные размеры изображения VideoRender=6 - если 0 - то предпросмотр включен, если 6, то выключен - отключение предпросмотра существенно разгружает CPU. Max_log_length=100 - количество строк отчета Storage_path=C:\Inetpub\wwwroot\re_cam\ - путь, для сохранения картинок.
Если не задан, то в том же каталоге, что и программа. Тут указан путь к модулю IIS, отвечающему
за показ картинок через HTTP. run_on_new_image= - если задано, путь и имя программы, выполняющейся при получении очередной картинки. run_on_start=run_on_start.bat - если задано, путь и имя программы, выполняющейся при запуске программы, в частности - старт IIS. run_on_close=run_on_close.bat - если задано, путь и имя программы, выполняющейся при остановке программы, в частности - остановка IIS.
Модуль IIS (re_cam.dll) должен располагаться в каталоге IIS, настроенном на выполнение приложений, например:
Команды web модуля:
вызов по умолчанию: http://.../re_cam/re_cam.dll - где ... имя или ip сервера и путь к модулю re_cam - будет возвращена картинка в
формате jpeg из находящихся в том же каталоге сервера, что и re_cam.dll, имеющая наивысшую дату и время создания.
Естественно, в такой конфигурации можно запрашивать у IIS непосредственно конкретную картинку, и без модуля, но как узнать ее имя?
Если на web сервере есть поддержка например PHP или похожего - можно сделать и на нем. Для этого в архиве для примера приведены исходники web модуля.
ToDo: правильнее было бы не картинку в ответ передавать, а делать редирект на нее и пусть ее уже сам web сервер
клиенту отдает - так в общем то и было задумано, для этого несколько файлов и хранятся.
вызов страницы отчета: http://.../re_cam/re_cam.dll/Log - где ... имя или ip сервера и путь к модулю re_cam - будет возвращена
страница отчета.
Для того чтобы избежать кеширования картинок и данных можно добавлять доп поля к запросу, например:
http://.../re_cam/re_cam.dll?rnd=случайное значение или http://.../re_cam/re_cam.dll/log?rnd=случайное значение
Примеры картинок (камера установлена на кухне, на шкафу):