Как открыть домофон без ключа с помощью телефона, nfc, программа, как скопировать ключ

Что делать, если устройство не поддерживает бесконтактную технологию

Если ваш гаджет не поддерживает NFC, то это еще не повод отказываться от технологии или тратить деньги на покупку нового гаджета. С помощью дополнительного оборудования вы сможете установить НФС-модуль на телефон. Вам поможет:

  • сим-карта с NFC;
  • антенна с НФС;
  • NFC-метка.

Наиболее распространенными являются сим-карты с НФС: их выпускает большинство крупных операторов, включая МТС и Теле2. Внешне она похожа на обычную симку и выполняет те же функции, но еще и поддерживает НФС.

NFC-антенна – это маленькое устройство, оснащенное датчиком. Его нужно закрепить непосредственно к батарее. Так что она подойдет только для смартфонов со съемной задней крышкой.

NFC-метки также крепятся непосредственно к корпусу гаджета.

Что такое nfc и где используется

NFC – технология беспроводной передачи данных. Для того чтобы произошел контакт, устройства, оснащенные НФС-датчиком, должны находиться на расстоянии 10 см друг от друга.

Данная технология используется в 3 направлениях:

  • бесконтактные платежи. С помощью NFC вы можете оплачивать покупки в магазинах по банковской карточке через смартфон. Все, что нужно, – это привязать карту к платежной программе в телефоне и приложить гаджет к считывающему терминалу в магазине;
  • обмен данными. В этом направлении НФС только развивается, но даже сейчас эта технология может выступать аналогом Bluetooth. По НФС вы сможете легко передать контакт, ссылку в браузере или даже фотографию на другой смартфон. Просто отметьте данные, которые нужно передать, и поднесите устройства друг к другу на близкое расстояние;
  • сканирование меток. С помощью НФС-датчика сканируются специальные NFC-метки, которые предоставляют доступ к каким-либо данным или выполняют заданные действия. Метки выпускаются не только в форме наклеек, но и в виде колец, брелоков и других вещей. Чтобы считать метку, просто поднесите к ней телефон.

С принципом работы технологии мы разобрались, теперь выясним, как пользоваться смартфоном в качестве ключа от домофона.

1 fps: работа со снимками с камеры

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

class ImageProcessor:
		# <...>
    def process_single_image(self, image):
        nparr = np.fromstring(image, np.uint8)
        img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
        labels = self.process(img_np)
        return labels

def snapshot_based_intercom_id():
    processor = ImageProcessor()

    last_open_door_time = time.time()
    while True:
        start_time = time.time()
        image = get_image()
        result = processor.process_single_image(image)
        logging.info(f'{result} in {time.time() - start_time}s')
        # Successfull detections are "face{N}"
        if any(['face' in res for res in result]):
            if start_time - last_open_door_time > 5:
                open_door()
                with open(f'images/{start_time}_OK.jfif', 'wb') as f:
                    f.write(image)
                last_open_door_time = start_time

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

Читайте также:  Проверка электронной подписи 2019 сертификат ключа
Момент успешного распознавания, версия с обработкой отдельных снимков
Момент успешного распознавания, версия с обработкой отдельных снимков

Заработало! Полностью довольный первым запуском, я вернулся в квартиру. Единственное, что портило впечатление от системы распознавания — время реакции на появление лица в кадре, т.к. время отклика API оставляло желать лучшего. Низкая частота поступления данных, 0.7с на получение картинки и 0.6с на открытие двери, давали видимый невооружённым взглядом лаг.

В шторке уведомлений и настройках

Смахните экран сверху вниз. Откроется меню с несколькими значками. Среди них найдите иконку NFC.

Бывает такое, что НФС в телефоне есть, однако он не отображается в шторке уведомлений. Поэтому сразу перейдите в настройки гаджета, откройте список приложений и нажмите на кнопку «Еще». Откроется раздел со всеми функциями на вашем телефоне. Среди них найдите NFC.

Если ее нет, то производитель не установил в вашу модель НФС-датчик.

Внешний осмотр

Осмотрите обратную сторону смартфона. Некоторые производители на задних крышках своих смартфонов указывают надпись NFC. Если вы ее не нашли, тогда снимите крышку с телефона и осмотрите аккумулятор. Если вы не нашли соответствующую надпись и на нем, то переходите к следующему способу.

Возможная ответственность

Исходя из вышеперечисленного, возникает вопрос: а законно ли вообще открывать домофон через телефон? Открытие двери без ключа считается нарушением, если:

  • открывая домофон по NFC, вы его повреждаете, и в дальнейшем он перестает функционировать. Такое действие может трактоваться как порча имущества;
  • открытие двери происходит с целью проникновения в чужую квартиру. По УК это наказуемое преступление.

Если же вы открываете свой домофон и его работе ничего не помешает, то вы имеете полное право использовать смартфон в качестве ключа.

Благодаря наличию NFC-датчика в телефоне стало возможным мгновенное открытие домофона без использования ключа. Однако перед этим нужно запрограммировать ключ от домофона в приложении. Кроме того, перед каждым считыванием вам придется включать NFC на смартфоне. Без этого открытие не будет возможным.

Дисклеймер

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

До 30 fps: обработка видеопотока

Получить кадры из видео оказалось на удивление просто:

vcap = cv2.VideoCapture(link)
success, frame = vcap.read()

Замеры показали, что камера домофона способна выдавать стабильные 30 FPS. Проблемой оказалось поддержание меньшей частоты кадров: метод read() возвращает последний необработанный кадр из внутренней очереди кадров. Если эта очередь наполняется видеопотоком быстрее, чем вычитывается, то обрабатываемые кадры начинают отставать от реального времени, что приводит к нежелательной задержке.

Первым потенциальным решением было установить размер внутренней очереди: vcap.set(CV_CAP_PROP_BUFFERSIZE, 0);. Согласно найденной информации, такой трюк должен был хорошо работать с любой конфигурацией системы для версий OpenCV выше 3.4, но по какой-то причине, так и не оказал никакого влияния в моём случае.

Читайте также:  Часто задаваемые вопросы | ФНС России | 77 город Москва

Единственной рабочей альтернативой стал подход, описанный в этом ответе со StackOverflow — завести отдельный поток, читающий кадры из камеры на максимально возможной скорости и сохраняющий последний в поле класса для дальнейшего доступа (впоследствии оказалось, что именно этот цикл ответственен за большую часть потребления процессора).

Получилась модификация ImageProcessor для обработки видеопотока с частотой 3 кадра в секунду:

class CameraBufferCleanerThread(threading.Thread):
    def __init__(self, camera, name='camera-buffer-cleaner-thread'):
        self.camera = camera
        self.last_frame = None
        self.finished = False
        super(CameraBufferCleanerThread, self).__init__(name=name)
        self.start()

    def run(self):
        while not self.finished:
            ret, self.last_frame = self.camera.read()

    def __enter__(self): return self

    def __exit__(self, type, value, traceback):
        self.finished = True
        self.join()

class ImageProcessor:
		# <...>
    def process_stream(self, link):
        vcap = cv2.VideoCapture(link)
        interval = 0.3 # ~3 FPS
        with CameraBufferCleanerThread(vcap) as cam_cleaner:
            while True:
                frame = cam_cleaner.last_frame
                if frame is not None:
                    yield (self.process(frame), frame)
                else:
                    yield (None, None)
                time.sleep(interval)

И соответствующая модификация snapshot_based_intercom_id:

def stream_based_intercom_id():
    processor = ImageProcessor()

    link = get_videostream_link()
    # To notify about delays
    last_time = time.time()
    last_open_door_time = time.time()
    for result, np_image in processor.process_stream(link):
        current_time = time.time()
        delta_time = current_time - last_time
        if delta_time < 1:
            logging.info(f'{result} in {delta_time}')
        else:
            logging.warning(f'{result} in {delta_time}')
        last_time = current_time
        if result is None:
            continue
        if any(['face' in res for res in result]):
            if current_time - last_open_door_time > 5:
                logging.warning(
                  	f'Hey, I know you - {result[0]}! Opening the door...')
                last_open_door_time = current_time
                open_door()
                cv2.imwrite(f'images/{current_time}_OK.jpg', np_image)

Тест в реальных условиях показал ощутимое падение времени отклика — при хорошем освещении подъездная дверь оказывалась открытой ещё до того, как я успевал подойти к ней вплотную.

Момент успешного распознавания, версия с обработкой видеопотока
Момент успешного распознавания, версия с обработкой видеопотока

Как открыть домофон через телефон: пошаговая инструкция

Итак, вы создали электронную «отмычку». Самое время воспользоваться телефоном вместо ключа для открытия домофона.

  1. Разблокируйте экран телефона и перейдите в программу, в которой эмулировали ключ.
  2. Поднесите гаджет к домофону на расстояние нескольких сантиметров, но не более 10.
  3. Дождитесь, пока произойдет считывание, и дверь откроется.

Внимание! Добавлять в телефон можно не только виртуальные ключи, но и пропускные карты. Делается это через специальные приложения.

Как проверить, есть ли в телефоне nfc

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

Если этот вариант по какой-либо причине вам не подходит, проверить наличие НФС можно с помощью других способов.

Как скопировать ключ от домофона

Для открытия домофона сперва нужно скопировать его ключ на смартфон с НФС.

Внимание! Сразу отметим, что открывать дверь телефоном смогут только владельцы гаджетов на Android, т. к. пользователи iOS-устройств могут использовать свои гаджеты только для бесконтактной оплаты.

Чтобы записать ключ на телефон, сделайте следующее:

Важно! В качестве аналога этой программы подойдет приложение «Интерсвязь», в котором предусмотрена опция «Теледомофоны».

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

Читайте также:  Как настроить открывание двери со смартфона

Поиск знакомых лиц в кадре

Прежде чем начать этот раздел, нужно рассказать пару слов об уже имеющихся на тот момент у меня в распоряжении серверных мощностях — это недорогая виртуальная машина с доступом ко всего одному потоку Intel(R) Xeon(R) CPU E5-2650L v3 @ 1.80GHz, 1GB оперативной памяти и 0 GPU.

На данном этапе проектом заинтересовалась моя жена, хорошо разбирающаяся в машинном обучении и в итоге взявшая на себя эту задачу. Для этой работы был выбран OpenVINO Toolkit — инструментарий от Intel, в том числе заточенный как раз на запуск моделей машинного обучения на CPU.

Непродолжительный поиск существующих решений привёл на страницу Interactive Face Recognition Demo — официального демо, показывающего ровно необходимый функционал сравнения видимых в кадре лиц с базой заранее сохранённых. Единственная проблема состояла в том, что данный пример по каким-то причинам исчез после релиза 2020.

К счастью, гит помнит всё и получить из репозитория проекта код демо и нужные модели не составило труда. После удаления всей работы с командной строкой (взяв для всего значения по умолчанию), визуализацией и видеопотоком вебкамеры, был получен класс, способный распознавать лица в конкретном кадре:

class ImageProcessor:
    def __init__(self):
        self.frame_processor = FrameProcessor()

    def process(self, image):
        detections = self.frame_processor.process(image)
        labels = []
        for roi, landmarks, identity in zip(*detections):
            label = self.frame_processor.face_identifier.get_identity_label(
                identity.id)
            labels.append(label)
        return labels

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

100 runs on an image with known face:
Total time: 7.356s
Time per frame: 0.007s
FPS: 135.944

100 runs on an image without faces:
Total time: 2.985s
Time per frame: 0.003s
FPS: 334.962

Очевидно, что показанная производительность с запасом покрывает нужды детектирования лиц в реальном времени.

Послесловие

Несмотря на возможности, которые технология умных домофонов несёт жильцам, объединённые в единую сеть сотни (тысячи?) подъездных дверей с камерами и микрофонами (да, в произвольно получаемом видеопотоке есть и аудио!), ведущими непрерывную запись — как по мне, скорее пугающее явление, открывающее новые возможности для нарушения приватности.

Я бы предпочёл, чтобы доступ к видеопотоку предоставлялся только в момент звонка в квартиру и ведущаяся трёхдневная запись, позиционирующаяся как средство раскрытия правонарушений, хранилась не на серверах компании, а непосредственно в домофоне, с возможностью доступа к ней по запросу. Или не велась вовсе.

Управление с помощью telegram бота

Сама система доказала свою работоспособность и теперь хотелось создать для неё удобный интерфейс для включения/выключения. Телеграм бот показался отличным вариантом решения для этой задачи.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector