#binary #webcam
#двоичный #Вебкам
Вопрос:
Я собираюсь работать над самостоятельно выбранным проектом для моего курса сетевого обучения в колледже, и у меня просто возникла пара вопросов, которые помогут мне начать работу в правильном направлении.
Мой проект будет включать в себя создание новой «физической» ссылки, по которой данные в виде текста будут передаваться с одного компьютера на другой. В этой ссылке будет задействован один компьютер с веб-камерой, который считывает серию мигающих цветов (черный / белый) в двоичном формате и преобразует его в текст. Каждая серия вспышек будет имитировать пакет данных. Я буду использовать OSX и встроенную веб-камеру в Macbook, мигающий компьютер будет либо Windows, либо osx.
Итак, мои вопросы: какие языки программирования или API лучше всего подходят для чтения данных веб-камеры в реальном времени и анализа цвета определенной области, а также программирования и синхронизации вспышек? Кроме того, нужно ли мне беспокоиться о соответствии скорости вспышки «пишущего» компьютера и скорости захвата кадров «считывающего» компьютера?
Спасибо за любую помощь, которую вы могли бы предоставить.
Комментарии:
1. Возможно, вас заинтересует OpenCV .
Ответ №1:
Что касается скорости захвата кадров, теорема выборки Шеннона гласит, что «идеальная реконструкция сигнала возможна, когда частота дискретизации более чем в два раза превышает максимальную частоту дискретизируемого сигнала». Другими словами, если ваш мигающий индикатор переключается 10 раз в секунду, вам нужна камера со скоростью более 20 кадров в секунду, чтобы правильно это зафиксировать. Итак, в основном проверьте характеристики вашей камеры, разделите на 2, немного уменьшите полученное значение, и у вас будет максимальная частота мигания.
Все, что может получить кадры, будет работать. Если условия освещения, в которых работает камера, будут стабильными, а положение источника света на изображениях будет статичным, тогда будет очень легко проверить средние значения пикселей в определенной области.
Если вам нужна дополнительная обработка изображений, вам, вероятно, следует также узнать об OpenCV (он имеет привязки к каждому языку программирования).
Ответ №2:
Чтобы ответить на ваш вопрос о выборе языка, я бы рекомендовал java. Java Media Framework великолепен и прост в использовании. В прошлом я использовал его для захвата видео с веб-камер. Однако имейте в виду, что все, кого вы спросите, порекомендуют другой язык — у каждого свои предпочтения!
Что вы используете в качестве мигающего устройства? Какого расстояния вы пытаетесь достичь? Стоит подумать о том, как вы собираетесь заставить приемник распознавать, где в захваченном изображении искать вспышки. Может потребоваться какой-то фидуциарный маркер. Более длинные диапазоны усложнят решение этой проблемы.
Если вы думаете о более коротких диапазонах, рассматривали ли вы возможность использования двумерного передатчика? (учитывая, что вы используете двумерный приемник, это имеет смысл) и, возможно, у вас есть передатчик, который отображает последовательность QR-кодов (или аналогичных кодировок) на мониторе?
Вам нужно будет рассмотреть какое-то кодирование с исправлением ошибок, например код Хэмминга. В то время как кодирование увеличит объем данных, это может дать вам в целом лучшую пропускную способность, учитывая, что вы можете увеличить скорость намного выше, не беспокоясь о нечетном поврежденном бите.
Некоторые материалы типа «оценки» могут включать в себя обсуждение очевидных рисков безопасности при использовании такого канала — любой, кто находится в прямой видимости от передатчика, может подслушивать! Вы могли бы предложить в своей статье использовать какое-либо шифрование, подойдет блочный шифр в CBC, но для этого потребуется обмен ключами перед передачей, чтобы вы могли подумать о шифровании с открытым ключом.