
Очки для обнаружения умных очков с камерами. Ray-BANNED
Очки для обнаружения умных очков со встроенными камерами
Я экспериментирую с двумя основными подходами:
Пока что снятие отпечатков конкретных устройств через Bluetooth (BLE) выглядит самым простым и надежным подходом. Изображение ниже — это первая версия, которая проигрывает джингл 'secret found' из The Legend of Zelda при обнаружении BLE-рекламы от Meta Raybans.

По сути, я веду этот README как бортовой журнал, поэтому здесь будут мои текущие подходы и идеи.
Посылая инфракрасное излучение на объективы камер, мы можем использовать тот факт, что CMOS-сенсор в камере отражает свет обратно к источнику (это называется 'ретрорефлективность' или 'эффект кошачьего глаза'), чтобы идентифицировать камеры.

Это не совсем новая идея. В 2005 году некоторые исследователи использовали это свойство для создания 'сред, устойчивых к съемке', когда набирали популярность смартфоны с камерами.
Есть даже недавнее исследование (2024), в котором выяснили, как классифицировать отдельные камеры по их ретроотражениям.
Сейчас у нас похожая ситуация, как у тех исследователей 2005 года, когда умные очки со скрытыми камерами становятся все популярнее. Поэтому я хочу создать очки для их обнаружения. К сожалению, насколько я могу судить, большинство существующих исследований в этой области записывают данные с камеры, а затем используют ML, множество контролируемых углов и т.д., чтобы отличать обычные отражающие поверхности от камер.
Я бы чувствовал себя глупо, если бы мое решение использовало собственную камеру. Поэтому я этого избегаю. Вместо этого, думаю, мне придется полагаться на последовательность моих 'проходов' и создать хороший классификатор на основе сигнальных данных. Например, здесь видно, что задняя камера моего смартфона дает быстрые и большие всплески, а глянцевый экран создает более длинную волну.


Протестировав Meta Raybans, я понял, что такой setup недостаточен. Вот тест нескольких проходов области камеры + той же области, когда объектив закрыт. Видно, что форма сигнала похожа на более ранний тест (короткий всплеск для камеры, более широкий в остальных случаях), но она крайне нестабильна, а сила сигнала очень слабая. Это с расстояния около 4 дюймов от светодиодов. Я не заметил большой разницы при смене светодиодов 940 нм и 850 нм.

По крайней мере, с текущим оборудованием, которое мне легко доступно, этого, вероятно, недостаточно для точного различения.
Еще одна идея — создать заданный 'паттерн' прохода. Пользователь (в очках-детекторе) выполняет определенную схему сканирования цели. Используя захваченные формы сигналов, возможно, можно точнее идентифицировать Raybans. Например, проход по очкам цели в направлении 'влево, вправо, вверх, вниз'. Я проверил это, сравнив результаты Meta Raybans с некоторыми авиаторами, которые у меня были. Думаю, идея этого подхода здравая (на самом деле это свет), но она может потребовать доработки.

Для прототипирования я использую:

TODO по ИК:
экспериментировать с паттернами проходов
сосредоточиться на спектральной информации, попробовать комбинировать данные с разных длин волн
коллимация?
Тревор (автор статьи по классификации камер) упоминал в ноябре, что если в очках есть LiDAR, я мог бы просто искать эти импульсы. У Ray-Bans, похоже, этого нет, но у других умных очков может быть. В этом блоге, опубликованном в декабре, есть интересное исследование по обнаружению камер iPhone с помощью этого подхода: https://www.atredis.com/blog/2025/11/20/designing-a-passive-lidar-detection-sensor
Это оказалось сложнее, чем я думал! Мой текущий подход — идентифицировать Meta Raybans через рекламные пакеты Bluetooth с низким энергопотреблением (BLE). Но мне удавалось обнаружить BLE-трафик только во время 1) сопряжения и 2) включения. Иногда я также вижу рекламу, когда их достают из чехла (уже включенными), но не постоянно.

Цель — обнаруживать их во время использования, когда они общаются с сопряженным телефоном, но для просмотра такого направленного BLE-трафика сначала нужно увидеть пакет CONNECT_REQ, который содержит информацию о том, по каким каналам связи переключаться синхронно (интервал скачков, приращение скачков). Это можно сделать с помощью nRF52840 + прошивки ble-sniffer, но это не отменяет того факта, что вам все равно нужно увидеть это начальное соединение, чтобы начать сниффинг.
Немного дополнительной информации о BLE:
При включении или переводе в режим сопряжения (или иногда при извлечении из чехла) я могу обнаружить устройство через рекламируемые данные производителя и UUID сервисов. Это части рекламных данных.
0x01AB — это идентификатор, назначенный Meta организацией SIG (стандарт Bluetooth), и 0xFD5F в UUID сервиса также назначен Meta. В коде вы можете увидеть другие числа, которые я использую для идентификации.
Что касается трафика Bluetooth Classic (BTC), к сожалению, оборудование кажется более сложным (читай: дорогим). Так что если я хочу пойти по этому пути, вероятно, нужно более хитрое решение.
захват при включении очков:
[01:07:06] RSSI: -59 dBm
Address: XX:XX:XX:XX:XX:XX
Name: Unknown
META/LUXOTTICA DEVICE DETECTED!
Manufacturer: Meta (0x01AB)
Service UUID: Meta (0xFD5F) (0000fd5f-0000-1000-8000-00805f9b34fb)
Manufacturer Data:
Company ID: Meta (0x01AB)
Data: 020102102716e4
Service UUIDs: ['0000fd5f-0000-1000-8000-00805f9b34fb']
TODO по сети:
ПРИМЕЧАНИЕ: ray-bans, которые я использовал для тестирования, сейчас недоступны, так что я немного заблокирован :(
Спасибо Trevor Seets и Junming Chen за советы по оптике и BLE (соответственно). Также Sohail за то, что одолжил мне Meta Raybans для тестирования.
Эта работа лицензирована по Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.