Подглядываем через веб-камеру

CUK77

Professional
Messages
1,192
Reputation
3
Reaction score
408
Points
83
Некоторые люди опасаются, что встроенная в их ноутбуки вебкамера может за ними подглядывать. Они опасаются этого настолько серьезно, что порой даже заклеивают изолентой ее недремлющее око. Делают они это не зря. Мы расскажем, как можно программно овладеть встроенной в ноутбук веб-камерой и использовать ее функционал как в мирных, так и не очень целях.

Начинаем реализацию: первые досадные огорчения

Я был очень удивлен и расстроен, когда узнал, что в великом и могучем .NET Framework напрочь отсутствует возможность простого взаимодействия с веб-камерами. В четвертой версии ситуация улучшилась (для SilverLight-проектов точно появились соответствующие классы), но протестировать я их не успел, поскольку пример для данной статьи я начал писать еще до официального выхода VS2010 и 4-го .NET’a.

Практически отчаявшись, я плотно засел в гугле. Результаты поиска по рунету меня не вдохновили – все, что я нашел – это ссылки на MSDN и технологию DirectDraw. Я даже попробовал набросать простенький примерчик, но из-за отсутствия опыта работы с DirectDraw меня постиг облом. У меня получилось собрать совсем простенькое приложение, но я так и не смог выловить в нем все глюки.

Еще больше отчаявшись, я принялся шерстить ресурсы наших западных товарищей. Проштудировав несколько десятков ссылок, я смог нарыть много вкусностей. Среди них были всевозможные примеры и небольшие статейки (американцы не любят много писать). Мне даже удалось найти рабочий пример на основе DirectDraw, но, когда я увидел код – ужаснулся. Разобраться в нем было тяжело. Поэтому я решил с ним не заморачиваться, а попытаться найти способ попроще. Не успел я распрощаться с примером на DirectDraw, как на глаза мне попался еще один. Автор примера закодил целую библиотеку для работы с веб-камерами и другими устройствами видеозахвата, используя технологию VFW (Video For Windows).

Жаль, что проект автора (я про библиотеку) был максимально кастрирован. Все, что позволяла сделать библиотека – вывести изображение с веб-камеры. Ни захвата отдельных кадров, ни записи видео и других полезных нам фич не было.

И тем не менее, мое подсознание решительно сказало мне, что этот проект и есть то, что я искал. Не успел я беглым взглядом пробежаться по его коду, как увидел имена знакомых win-сообщений и не менее знакомых названий WinAPI функций. Когда-то давным-давно мне приходилось писать приложение для работы с веб-камерой на Delphi. Тогда я и столкнулся с этими функциями впервые.

Посмотрев сорцы, я решил написать свою версию библиотеки и снабдить ее нужным функционалом.

Взвод, готовность №1

Вполне возможно, что в одном компе/ноуте может быть несколько веб-камер. За примером далеко ходить не надо. Мне по работе часто приходится организовывать простенькие видеоконференции. Обычно в них участвуют два человека. Каждого из участников снимает отдельная камера. Сами камеры подключены к моему компу. Когда я начинаю съемку, то выбираю в программе для работы с видеокамерами нужную в настоящий момент камеру. Раз уж мы решили взять камеру под контроль, то обязаны разобраться, как получать список установленных устройств видеозахвата и выбрать то, с которым будем работать в настоящий момент.

Для решения этой нехитрой задачи в WindowsAPI предусмотрена функция capGetDriverDescription(). Она принимает пять параметров:

wDriverIndex – индекс драйвера видеозахвата. Значение индекса может варьироваться от 0 до 9;
lpszName – указатель на буфер, содержащий соответствующее имя драйвера;
cbName – размер (в байтах) буфера lpszName;
lpszVer – указатель на буфер, содержащий описание определенного драйвера;
cbVer – размер буфера (в байтах), в котором хранится описание драйвера.
В случае успешного выполнения, функция вернет TRUE. Описание функции у нас есть, теперь посмотрим, как определить ее в C#. Делается это так:

Code:
[DllImport("avicap32.dll")]
protected static extern bool capGetDriverDescriptionA (short wDriverIndex, [MarshalAs(UnmanagedType.VBByRefStr)] ref String lpszName, int cbName, [MarshalAs(UnmanagedType.VBByRefStr)] ref String lpszVer, int cbVer);

Обрати внимание, что перед тем, как указать имя подключаемой функции, в обязательном порядке требуется написать имя DLL, в которой она определена. В нашем случае это avicap32.dll.

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

Code:
public static Device[] GetAllCapturesDevices()
{
String dName = "".PadRight(100);
String dVersion = "".PadRight(100);

for (short i = 0; i < 10; i++)
{
if (capGetDriverDescriptionA(i,
ref dName, 100, ref dVersion,
100))
{
Device d = new Device(i);
d.Name = dName.Trim();
d.Version = dVersion.Trim();

devices.Add(d);
}
}
return (Device[])devices.ToArray
(typeof(Device));
}

Код выглядит проще некуда. Самое интересное место в нем – цикл, в котором происходит вызов упомянутой выше функции capGetDriverDescription. Из MSDN мы знаем, что индекс (первый параметр функции capGetDriverDescription()) может варьироваться от 0 до 9, поэтому мы целенаправленно запускаем цикл в этом диапазоне. Результатом выполнения метода будет массив классов Device (этот класс я определил самостоятельно, смотри соответствующие исходники).

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

Немного забегая вперед, скажу, что дальнейшие действия с камерой будут происходить путем банальной отправки сообщений окну захвата. Да, именно так, придется воспользоваться до боли знакомой windows-программисту (и приколисту) функцией SendMessage().

Теперь присмотримся внимательнее к функции capCreateCaptureWindow(). Ей требуется передать шесть аргументов:

lpszWindowName – нуль-терминальная строка, содержащая имя окна захвата;
dwStyle – стиль окна;
x – координата X;
y – координата Y;
nWidth – ширина окна;
nHeight – высота окна;
hWnd – handle родительского окна;
nID – идентификатор окна.
Результатом выполнения функции будет handle созданного окна или NULL в случае ошибки. Поскольку эта функция также относится к WinAPI, то ее опять-таки нужно импортировать. Код импортирования приводить не буду, поскольку он практически идентичен тому, что я писал для функции capGetDriverDescription(). Лучше сразу взглянем на процесс инициализации камеры:

Code:
deviceHandle = capCreateCaptureWindowA (ref deviceIndex, WS_VISIBLE | WS_CHILD, 0, 0, windowWidth, windowHeight, handle, 0);

if (SendMessage(deviceHandle, WM_CAP_DRIVER_CONNECT, this.index, 0) > 0)
{
SendMessage(deviceHandle, WM_CAP_SET_SCALE, -1, 0);
SendMessage(deviceHandle, WM_CAP_SET_PREVIEWRATE, 0x42, 0);
SendMessage(deviceHandle, WM_CAP_SET_PREVIEW, -1, 0);

SetWindowPos(deviceHandle, 1, 0, 0, windowWidth, windowHeight, 6);
}

В этом коде сразу после создания окна производится попытка отправки сообщения WM_CAP_DRIVER_CONNECT. Отличный от нуля результат выполнения функции расскажет нам о ее успешности.

Теперь представим, что сегодня боги на нашей стороне и произведем незамедлительную отправку нескольких сообщений: WM_CAP_SET_SCALE, WM_CAP_SET_PREVIEWRATE, WM_CAP_SET_PREVIEW. Увы, как и в случае с функциями, C# ничего не знает о существовании этих констант. Тебе опять придется определять их самостоятельно. Список всех необходимых констант с комментариями я привел ниже.

Code:
//Пользовательское сообщение
private const int WM_CAP = 0x400;
//Соединение с драйвером устройства видеозахвата
private const int WM_CAP_DRIVER_CONNECT = 0x40a;
//Разрыв связи с драйвером видеозахвата
private const int WM_CAP_DRIVER_DISCONNECT = 0x40b;
//Копирование кадра в буффер обмена
private const int WM_CAP_EDIT_COPY = 0x41e;
//Включение/отключение режима предпосмотра
private const int WM_CAP_SET_PREVIEW = 0x432;
//Включение/отключение режима оверлей
private const int WM_CAP_SET_OVERLAY = 0x433;
//Скорость previewrate
private const int WM_CAP_SET_PREVIEWRATE = 0x434;
//Включение/отключение масштабирования
private const int WM_CAP_SET_SCALE = 0x435;
private const int WS_CHILD = 0x40000000;
private const int WS_VISIBLE = 0x10000000;
//Установка callback-функции для preview
private const int WM_CAP_SET_CALLBACK_FRAME = 0x405;
//Получение одиночного фрейма с драйвера видеозахвата
private const int WM_CAP_GRAB_FRAME = 0x43c;
//Сохранение кадра с камеры в файл
private const int WM_CAP_SAVEDIB = 0x419;

Дальнейшее описание класса для работы с веб-камерой я опущу. Каркас я рассмотрел, а со всем остальным ты легко разберешься путем раскуривания моего хорошо прокомментированного исходника. Единственное, что я не хотел бы оставлять за кадром – это пример использования библиотеки.

Всего в библиотеке я реализовал (точнее, дописал) пару методов: GetAllDevices (уже рассматривали), GetDevice (получение драйвера устройства видеозахвата по индексу), ShowWindow (отображение изображения с веб-камеры), GetFrame (захват отдельного кадра в графический файл) и GetCapture (захват видеопотока).

В качестве демонстрации работоспособности изготовленной либы я набросал небольшое приложение. На форме я расположил один компонент ComboBox (используется для хранения списка имеющихся устройств видеозахвата) и несколько кнопок – "Обновить", "Пуск", "Остановить" и "Скриншот". Ах да, еще на моей форме пестреет компонент Image. Его я применяю для отображения видео с камеры.

Разбор полетов начнем с кнопки "Обновить". По ее нажатию я получаю список всех установленных устройств видеозахвата. Начинка этого обработчика события:

Code:
Device[] devices = DeviceManager.GetAllDevices();
foreach (Device d in devices)
{
cmbDevices.Items.Add(d);
}

Правда, все просто? Разработанная нами библиотека берет на себя все черную работу и нам остается лишь наслаждаться объектно-ориентированным программированием. Еще проще выглядит код для включения отображения видеопотока с камеры:

Code:
Device selectedDevice = DeviceManager.GetDevice(cmbDevices.SelectedIndex);
selectedDevice.ShowWindow(this.picCapture);

Опять же, все проще пареной репы. Ну и теперь взглянем на код кнопки "Скриншот":

Code:
Device selectedDevice = DeviceManager.GetDevice(cmbDevices.SelectedIndex);
selectedDevice.FrameGrabber();

Я не стал уделять особого внимания методу FrameGrabber(). В моем исходнике вызов метода приводит к сохранению текущего кадра прямо в корень системного диска. Разумеется, это не очень корректно, поэтому перед боевым применением программы не забудь внести все необходимые поправки.

Готовность № 2
Теперь настало время поговорить о том, как соорудить простенькую, но надежную систему видеонаблюдения. Обычно такие системы базируются на двух алгоритмах: различие двух фреймов и простое моделирование фона. Их реализация (код) достаточно объемна, поэтому в самый последний момент я решил пойти по более простому пути. Под легким путем подразумевается использование мощного, но пока малоизвестного фреймворка для .NET – AForge.NET.

AForge.NET в первую очередь предназначен для разработчиков и исследователей. С его помощью, девелоперы могут существенно облегчить свой труд при разработке проектов для следующих областей: нейросети, работа с изображениями (наложение фильтров, редактирование изображений, попиксельная фильтрация, изменение размера, поворот изображения), генетика, робототехника, взаимодействие с видео устройствами и т.д. С фреймворком поставляется хорошая документация. В ней описаны абсолютно все возможности продукта. Не поленись хорошенько с ней ознакомиться. Особенно мне хочется отметить качество кода этого продукта. Все написано цивильно и копаться в коде – одно удовольствие.

Теперь вернемся к нашей непосредственной задаче. Скажу честно, средствами фреймворка она решается как дважды два. "Тогда зачем ты мне парил мозг WinAPI функциями?" – недовольно спросишь ты. А за тем, чтобы ты не был ни в чем ограничен. Сам ведь знаешь, что проекты бывают разные. Где-то удобнее применить махину .NET, а где-то проще обойтись старым добрым WinAPI.

Вернемся к нашей задачке. Для реализации детектора движений нам придется воспользоваться классом MotionDetector из вышеупомянутого фреймворка. Класс отлично оперирует объектами типа Bitmap и позволяет быстренько вычислить процент расхождения между двумя изображениями. В виде кода это будет выглядеть примерно так:

Code:
MotionDetector detector = new MotionDetector(
new TwoFramesDifferenceDetector( ),
new MotionAreaHighlighting( ) );

//Обработка очередного кадра
if ( detector != null )
{
float motionLevel = detector.ProcessFrame( image );

if ( motionLevel > motionAlarmLevel )
{
flash = (int) ( 2 * ( 1000 / alarmTimer.Interval ) );
}

if ( detector.MotionProcessingAlgorithm is BlobCountingObjectsProcessing )
{
BlobCountingObjectsProcessing countingDetector = (BlobCountingObjectsProcessing) detector.MotionProcessingAlgorithm;
objectsCountLabel.Text = "Objects: " + countingDetector.ObjectsCount.ToString( );
}
else
{
objectsCountLabel.Text = "";
}

}
}
Вышеприведенный код (не считая инициализацию класса MotionDetector) у меня выполняется при получении очередного кадра с веб-камеры. Получив кадр, я выполняю банальное сравнение (метод ProcessFrame): если значение переменной motionlevel больше motionLevelAlarm (0.015f), то значит, надо бить тревогу! Движение обнаружено. На одном из скришотов хорошо видна работа демонстрация детектора движений.

Готовность №3

Веб-камеру можно запросто приспособить для распознавания лиц и создания продвинутого способа лог-она в систему? Если переварив весь этот материал, ты думаешь, что это сложно, то ты ошибаешься! В конце марта на сайте http://codeplex.com (хостинг для OpenSource проектов от MS) появился пример (а затем и ссылка на статью), демонстрирующий реализацию программы для распознавания лиц с использованием веб-камеры. Сам пример основан на использовании новых возможностей .NET и SilverLight. Разобрать этот пример в рамках журнальной статьи нереально, так как автор исходника постарался и сделал все максимально шикарно. Тут тебе и алгоритмы для работы с изображениями (фильтр размытия, уменьшения шума, попиксельное сравнение, растяжка и т.д.) и демонстрация новинок SilverLight и много чего еще. Одним словом, must use! Ссылку на проект и статью ищи ниже.

Конец фильма

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

Вспомни статью про бэкап Skype-бесед. В ней я говорил, что времена клавиатурных шпионов уже прошли. Сейчас особенно актуальны аудио и видеоданные. Если учесть, что сегодня веб-камера – обязательный атрибут любого ноутбука, то нетрудно представить, сколько интересного видео ты сможешь заснять, подсунув жертве "полезную программку"… Однако я тебе этого не говорил :). Удачи в программировании, а будут вопросы – пиши.

WWW

http://blogs.msdn.com/ – Русская версия статьи "Silverlight 4 real-time Face Detection" (распознавание лиц в реальном времени при помощи SilverLight).

http://facelight.codeplex.com/ – здесь хостится проект "Facelight", позволяющий распознавать лица в реальном времени. Если ты собрался закодить серьезную софтину для определения лиц или логона в систему, то посмотреть на этот проект просто обязан.

http://www.aforgenet.com/framework/ – тут ты найдешь AForge .NET – отличный и простой в использовании фреймворк для работы с видео, изображениями и т.д.

http://vr-online.ru – все исходники примеров, а также кучу дополнительной информации ты можешь слить с сайта проекта VR-Online.


Хак и WEBкамера

Пять необычных применений для самой обыкновенной веб-камеры

Видеосигнализация. Система безопасности с распознаванием лица. Управление компьютером движением головы... Вот лишь некоторые результаты наших безобидных экспериментов. Кто тут говорил, что веб-камера – безделушка для мало кому нужных видеоконференций?

Веб-камера при всей своей простоте является девайсом продвинутым – позволяет получить картинку «в цифре» и в реальном времени. Мы решили проверить, на что она способна, и нашли несколько очень неожиданных применений.

1. Делаем беспроводную камеру из телефона или КПК

Для выполнения одного из заданий ночной игры DozoR (www.dzzzr.ru) мне срочно понадобилась беспроводная Wi-Fi камера. Игрушка оказалось не такой уж дешевой: Яндекс.Маркет однозначно указывал, что меньше, чем за 3000р. ее не найти. В поисках альтернативного решения пришла отличная идея, как можно самому изготовить беспроводную камеру. Раз уж в моем коммуникаторе есть Wi-Fi и двухмегапиксельная камера, почему бы не объединить их? Еще не начав копаться в документации Windows Mobile, быстро нашел готовый продукт. Утилита WebCamera Plus (www.ateksoft.com) написана как на заказ: снимая изображения с камеры смартфона или коммуникатора, она пересылает их на комп (на специальную серверную часть). Можно передавать картинку по Wi-Fi, Bluetooth или даже GPRS (не лучший вариант, мягко говоря) – в любом случае получается беспроводная веб-камера. Для передачи нужно лишь указать IP-адрес компьютера, на котором установлена серверная часть. Надо добавить, что вместе с самой программой на компьютер инсталлится специальный драйвер виртуальной камере. Таким образом, полученное изображение можно использовать в Skype, Virtual Dub – да в какой угодно программе, и ни одна из них не будет даже догадываться о том, что изображение ей передается с телефона! В последней версии WebCamera Plus помимо картинки стал передаваться еще и звук. Поэтому к «случайно» забытому у тебя дома смартфону я бы посоветовал отнестись со всей осторожностью :).

Даже если в мобильнике нет беспроводного модуля, ничего не мешает сделать из него обычную камеру (подключив телефон к компу по USB). По меньшей мере, это избавит тебя от необходимости покупать веб-камеру. И не спеши ругаться, если у тебя устройство на базе другой платформы. Специально для владельцев смартфонов с ОС Symbian мы нашли еще один продукт, предоставляющий схожую функциональность. Не умея передавать данные по Wi-Fi, Mobiola Webcam отлично работает по USB и Bluetooth, при этом существуют версии для Symbian S60 и UIQ. То есть работать будет и с большинством смартфонов Nokia, и новинками от Sony Ericcson. Владельцев обычных телефонов с поддержкой Java также не обделили: для них есть специальная версия Mobiola Webcam Lite. Последняя, правда, умеет передавать данные только по Bluetooth.

2. Сигнализация своими руками

Вдоволь наигравшись с радиоуправляемой машинкой и прикрепленной к ней камерой (чуть не убив и ту, и другую), можно было задуматься о более практичном ее применении. Беспроводная камера в этом плане дает огромный простор для деятельности. Как тебе идея сделать видеоглазок для квартиры или систему слежения за машиной, которую ты оставляешь на ночь во дворе? Да запросто! Поможет нам в этом специальная программа Webcam Zone Trigger (www.zonetrigger.com). Суть в том, что на любую часть изображения, передаваемого с веб-камеры (пусть, это будет окружность с некоторым радиусом), можно создать так называемый триггер. Скажем, если камера «смотрит» на автомобильную стоянку перед домом, то триггеры можно поставить на каждое автомобильное место.

Далее – все прозаично. Как только в заданной зоне происходит какая-то активность (чувствительность, продолжительность движения и прочие параметры, само собой, задаются в настройках), сработает соответствующий триггер. Задача программы – выполнить определенное для этого триггера действие. Скажем, включить на компьютере сирену или отобразить изображение с камеры в системном трейе. Отправить email/SMS-сообщение или выполнить какой-то HTTP-запрос. В конце концов, просто запустить некоторый сценарий. Словом, запрограммировать можно все, что угодно.

3. «Узнай меня», или система идентификации лица

А было бы здорово, если б компьютер тебя узнавал! В прямом смысле слова. Посмотрел и понял, что к монитору подошел именно ты, а не сотрудник соседнего отдела, норовящий стащить у тебя что-то ценное. В общем, это и было нашей следующей идеей – идентификация человека с помощью веб-камеры. Конечно, сканировать сетчатку глаза мы не собирались, но вот распознать лицо человека, можно было попробовать. Найти готовые реализации такой идеи было непросто. Зато результат превзошел все ожидания: найденная в итоге утилита LemonScreen (www.keylemon.com) оказалась именно тем, что нужно, и к тому же совершенно бесплатной.

Научить программу распознавать твое лицо несложно. Это называется Enrollment. Слева в окне настроек отображается изображение с камеры, причем твое лицо, в каком бы положении ты ни находился, выделяется специальным контуром. Можешь даже ради интереса подвигать головой – посмотри, что произойдет с контуром. Справа от изображения находятся две шкалы. Первая (Face detection confidence) показывает качество распознавания. Как только оно будет выше заданного порогового значения (шкала окрасится в зеленый цвет), можно нажимать на кнопку Update model – и таким образом сохранять образ в память программы. Вторая шкала показывает, насколько текущий образ в камере соответствует уже сохраненной модели. Для верности в нижнем поле задается специальной пароль, с помощью которого ты сможешь разблокировать компьютер на случай, если что-то пойдет не так.

Все, готово! Через 60 секунд отсутствия какой-либо активности в камере, LemonScreen заблокирует систему. Интереса ради можешь попросить кого-нибудь подойти к компьютеру. Бьюсь об заклад, экран не разблокируется. Но стоит лишь тебе посмотреть в камеру – на мониторе отобразиться рабочий стол! Увы, освещение может сыграть против тебя, усложнив распознавание. Поэтому если программа не признает «отца родного», посмотри в камеру и введи в нужном поле пароль. Компьютер разблокируется, а в памяти LemonScreen будет обновлен образ. Это особенно актуально для тех, кто использует программу на ноутбуке. Короче говоря, утилита поистине уникальная и невероятно эффектная. А главное, твоя веб-камера с ее помощью наконец-то сможет найти достойное применение! Ровно до тех пор, пока соседи не просекут фишку и не сделают отмычку в виде твоей огромной фотографии.

4. Управляй мышкой движениями глаз!

В наших новостях часто проскакивают заметки о том, что некие ученые научились считывать и интерпретировать сигналы мозга. В доказательство приводятся видеоролики, где какая-нибудь миловидная девушка, безжалостно облепленная непонятными датчиками, неспешно передвигает курсор мыши одной лишь силой мысли. Ну, просто подумала о том, что неплохо бы его переместить в правый верхний угол – и он чудесным образом там оказывается. Сразу говорю: подобного аппарата у нас нет (и то только потому, что не хватает времени его спаять по чертежам, которые набросали еще прошлой осенью). Но перемещать курсор, просто подвигав головой или даже посмотрев в нужное место, – это мы можем! Пока я искал хорошую реализацию системы распознавания лица, мне попалась по-настоящему волшебная программа с говорящим названием «FaceMouse».

Весь интерфейс утилиты – небольшое окошко, на котором выводится изображение с камеры. Но стоит щелкнуть на какую-нибудь часть лица (для этого в камеру, конечно же, нужно посмотреть), как к ней тут же «прилепится» зеленый квадратик. Теперь он будет повторять все движения твоей физиономии. Нажми <Numlock> и посмотри по сторонам: мышка будет двигаться именно в ту сторону, в какую ты повернешь голову! Поверь: это надо попробовать самому! Мне попадались самые разные программы и, по правде говоря, удивить какой-нибудь софтиной меня достаточно сложно. Но эта программа произвела просто потрясающее впечатление!

5. Устрой трансляцию в Сеть

Если раньше для трансляции изображения с камеры в Сеть приходилось плясать с бубном, чтобы подружить веб-демон и специальные модули, то теперь все намного проще. Прикольная утилита webcamXP (www.webcamxp.com) позволяет транслировать изображения с веб-камеры в инет без настройки какого-либо оборудования. Весь процесс конфигурации сводится к нескольким кликам мыши. Программа определит все необходимые настройки, а потом попробует подключиться сама к себе, используя специальный сервер. Если ты вдруг находишься за файрволом, тебе тут же будут предложены варианты решения проблемы. Впрочем, если кровь из носа нужно транслировать сигнал из какой-то суперзащищенной сети, прячущейся за NAT'ом и файрволами, то в этой ситуации банально выручит Skype с его продвинутым протоколом.

Еще одна похожая утилита – Active WebCam (www.pysoft.com). Помимо трансляции в Сеть, она умеет оцифровывать видео. Эта программа снимает сигнал с web-камер, видеокамер или плат видео-захвата (в том числе, TV тюнеров) с максимальной частотой 30 кадров в секунду. Захваченное видео можно сохранить как в родном формате программы, так и оцифровать с помощью любого кодека, установленного в системе. Если есть желание, можно включить отсылку определенных уведомлений при наличии засекаемых движений перед камерой. Это позволяет использовать Active WebCam в качестве реальной системы слежения.

Как хакать Wi-Fi камеры

Если беспроводные камеры передают что-то в эфир, то логично предположить, что эти данные можно перехватить. Процесс нахождения и эксплуатирования в своих целях подобных девайсов называется warviewing (иначе warspying) и впервые был упомянут в культовом журнале «2600». Большинство камер не имеет шифрования, поэтому перехватить передаваемую ими картинку ничего не стоит. И даже если попадется камера с пресловутым WEP-шифрованием, мало что изменится. Поскольку «глазик» постоянно нагнетает трафик за счет своего вещания, можно очень быстро перехватить необходимое для взлома количество инициализационных векторов (IV) и расшифровать ключ. Камеры в большинстве своем работают по четырем каналам передачи сигнала:

channel A = 2,411 ГГц

channel B = 2,434 ГГц

channel C = 2,453 ГГц

channel D = 2,473 ГГц

Не так давно на страницах нашего журнала освещалась прога hauditor (http://itdefence.ru/content/product_news/irat/), которая занимается поиском web-панелей администратора различного сетевого оборудования, в том числе – точек доступа и камер, внутри сети. Заюзав ее, ты сможешь посмотреть изображение в окне своего браузера. Кстати говоря, очень многие админ-панели от веб-камеры проиндексированы самим Google'ом. Их очень легко найти, используя следующих запрос: «url:/view/index.shtml» или «inurl:ViewerFrame?Mode=».

WWW

О том, как сделать из камеры прибор ночного видения ты сможешь прочитать тут: www.instructables.com/id/Making-a-Night-Vision-Webcam.
Интересные наработки в области распознавания лиц доступны на сайте pages.cpsc.ucalgary.ca/~hanlen/vision/facelinks.html

INFO

Если тебя заинтересовала тема беспроводных камер, могу посоветовать один рецепт. Вместо дорогостоящей Wi-Fi камеры, у которой, к тому же, немаленькие размеры, можно использовать беспроводную аналоговую, ценой в 1500 рублей. Приемник легко подключается к TV-тюнеру. Последнего если и нет, то его легко стрельнуть у друзей.

UVScreenCamera (www.uvsoftium.ru) – яркий пример того, что веб-камеру можно применять на производстве. Например, для подсчета батонов, сходящих с конвейера.
 
Last edited:
Top