Логотип Зефирнет

Создайте систему аутентификации пользователей с помощью сканера QR-кода с использованием OpenCV

Дата:

Эта статья была опубликована в рамках Блогатон по Data Science.

Компьютерное зрение открыло множество возможностей, и одним из самых простых и популярных повседневных приложений является использование QR-коды и сканеры штрих-кодов.

Сканер QR-кода с использованием OpenCV

( Source: https://i.pinimg.com/736x/bb/55/b1/bb55b1a42f4e2cf6e80a0e275ad8b0c8.jpg )

Итак, что происходит, когда вы стоите у кассы супермаркета? Кассир сканирует каждый товар в вашей корзине с помощью устройства, а затем цены автоматически записываются в систему для выставления счета. Это устройство — не что иное, как сканер QR/штрих-кода, и именно его мы собираемся построить сегодня!

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

Что такое QR-коды?

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

Это основная структура QR-кода.

QR-коды

(Источник: https://en.wikipedia.org/wiki/File:QR_Code_Structure_Example_3.svg)

QR-коды находят свое применение в различных областях, таких как:

  1. Идентификация и аутентификация пользователей (удостоверения личности)
  2. Отслеживание отдельных предметов (управление запасами)
  3. Обмен платежной информацией (GPay, Paytm)
  4. Делитесь ссылками, фотографиями, медиа

Одним из основных преимуществ QR-кодов является то, что данные могут передаваться в зашифрованном виде без необходимости явного раскрытия закодированных данных. Это действует как дополнительный уровень защиты для предотвращения неправомерного использования конфиденциальной информации.

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

Теперь, когда мы знаем, что такое QR-коды, давайте начнем с нашего кода на Python.

Импорт библиотек

Для нашего проекта мы собираемся использовать OpenCV для чтения изображений, получения входного видеопотока, а также отображения нашего вывода. Основные библиотеки, которые нам понадобятся, это пызбар и збар библиотеки для декодирования наших зашифрованных QR-кодов. Это библиотеки Python с открытым исходным кодом, которые помогают в декодировании штрих-кодов и QR-кодов. Нам также понадобится наша библиотека NumPy. Мы должны сделать необходимые установки.

импортировать numpy как np из pyzbar.pyzbar импорт декодировать импорт cv2

Сканирование кода с изображения

Сначала мы прочитаем изображение QR-кода, сохраненное в «qr1.png» с помощью библиотеки cv2. Затем с помощью метода декодирования от pyzbar попробуем расшифровать наш код и проанализировать результаты.

Это QR-код, который мы будем использовать как «qr1.png».

Сканер QR-кода с использованием OpenCV

(Источник: VectorStock.com/26810014)

#Чтение QR-кода с изображения img = cv2.imread("qr1.png") code = decode(img) print(code)

Результат:

Выход | Сканер QR-кода с использованием OpenCV

Теперь отображается много информации. Давайте разберемся с каждой частью нашего вывода.

данные -> Это поле дает нам текст или информацию, закодированную в QR-коде.

тип -> Это поле сообщает нам тип кода QRCODE или BARCODE.

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

многоугольник -> Это дает нам точные угловые точки многоугольника вокруг QR-изображения. Если изображение QR-кода наклонено, то и ограничивающий его многоугольник наклонен.

Вот почему мы будем использовать координаты многоугольника, чтобы нарисовать нашу ограничивающую рамку, так что даже если QR-код повернут, мы получим точную границу кода.

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

для штрих-кода в decode(img): print(barcode.data) #in bytes text = barcode.data.decode('utf-8') print(text) print(barcode.rect)

Результат

Выход 2 | Сканер QR-кода с использованием OpenCV

Первая строка вывода показывает b'Hello! '. b означает, что это байтовый литерал. Позже он декодируется с использованием схемы «utf-8», чтобы получить только текст str.

Здорово! Теперь вы успешно расшифровали закодированный текст из QR-кода.

Декодирование QR-кодов в режиме реального времени

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

Следующий фрагмент кода позволит нам включить веб-камеру и создать дополнительное окно для вывода.

# Сканирование QR-кода с камеры vid = cv2.VideoCapture(0) vid.set(3,640) vid.set(4,740)

Теперь, пока идет видео, мы собираемся декодировать QR-коды в кадре, как делали это ранее. В дополнение к этому мы также будем использовать точки многоугольника для рисования ограничивающих рамок вокруг наших QR-кодов и отображения их соответствующего декодированного текста на самом входе кадра камеры.

в то время как True: успех, img = vid.read() для штрих-кода в декодировании (img): text = barcode.data.decode('utf-8') print(text) polygon_Points = np.array([barcode.polygon], np.int32) polygon_Points=polygon_Points.reshape(-1,1,2) rect_Points= barcode.rect cv2.polylines(img,[polygon_Points],True,(255,255), 0) cv5.putText(img, text, (rect_Points[2],rect_Points[0]), cv1.FONT_HERSHEY_DUPLEX, 2, (0.8 255,255, 0), 2) cv2.imshow("Видео", img) cv2.waitKey(1)

Результат

Выход 3 | Сканер QR-кода с использованием OpenCV

В приведенном выше фрагменте кода строка

cv2.polylines (img, [polygon_Points], True, (255,255 0, 5), XNUMX)

отображает ограничивающую рамку вокруг нашего QR-кода. 'img' указывает входной кадр. Обратите внимание, что здесь мы используем точки многоугольника, так что даже если QR-код повернут, мы получим точную ограничивающую рамку. (255,255,0) указывает цвет ограничивающей рамки, а 5 обозначает толщину.

Строка кода

cv2.putText (img, текст, (rect_Points [0], rect_Points [1]), cv2.FONT_HERSHEY_DUPLEX, 0.8, (255,255 0, 2), XNUMX)

используется для отображения декодированного текста. Если вы внимательно посмотрите, то увидите, что здесь мы использовали координаты прямоугольника вместо многоугольника для отображения текста. Это делается для того, чтобы текст отображался вертикально независимо от того, повернут ли QR-код или нет, чтобы его было легче читать.

Этот вывод должен показать нам сравнительные результаты, когда QR-код находится вертикально и когда он находится перед камерой под углом.

Видео тестирование | Сканер QR-кода с использованием OpenCV

Давайте проверим это на некоторых реальных объектах и ​​посмотрим, работает ли это!

видео тестирование на реальных вещах

Оно делает! Не стесняйтесь протестировать столько QR-кодов, сколько сможете найти вокруг себя!

Еще одна интересная особенность заключается в том, что эта библиотека может не только декодировать QR-коды, но и декодировать штрих-коды, не внося никаких изменений в наш код!

Давайте посмотрим на результаты с входом камеры со штрих-кодом.

Проверка штрих-кода | Сканер QR-кода с использованием OpenCV

Вуаля! Теперь вы создали свой сканер штрих-кода и QR-кода, используя несколько простых функций OpenCV и библиотеку pyzbar!

Теперь самое интересное! Пристегнитесь!

Создание системы аутентификации пользователей

Давайте возьмем реальный сценарий использования.

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

У нас уже есть наш сканер QR-кода. Теперь давайте применим все, что мы узнали до сих пор. Мы собираемся создать простую систему аутентификации пользователей, которая проверяет, принадлежит ли QR-код авторизованному персоналу, и решает, предоставить им доступ или нет.

Итак, давайте начнем с кода!

импортировать numpy как np из pyzbar.pyzbar импорт декодировать импорт cv2
# Сканирование QR-кода с камеры vid = cv2.VideoCapture(0) vid.set(3,640) vid.set(4,740)

Библиотеки импортированы и видеозахват настроен. Теперь мы должны прочитать текстовый файл, содержащий расшифрованные тексты QR-кодов для авторизованных сотрудников, и сохранить их в списке.

Система аутентификации

Это наш текстовый файл «Authorized.txt».

с open('Authorized.txt', 'r') в виде файла: auth_list = file.read().strip() print(auth_list)

Результат

Результат

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

Результат

Видео выход

Теперь все, что нам нужно сделать, это проверить для каждого QR-кода, присутствует ли расшифрованный текст в списке Авторизованных людей. Если есть совпадение, то мы будем использовать зеленый цвет (0,255,0) для нашей ограничительной рамки и отобразим текст «Доступ предоставлен», в противном случае мы будем использовать ограничительную рамку красного цвета (0,0, 255) и отобразим сообщение «Несанкционированный доступ».

в то время как True: успех, img = vid.read() для штрих-кода в decode(img): text = barcode.data.decode('utf-8') text=str(text) если текст отсутствует в auth_list: color=(0,0,255 ,0,255,0) displaytext = "Несанкционированный доступ" else: color=(32) displaytext = "Доступ разрешен" polygon_Points = np.array([barcode.polygon], np.int1,1,2) polygon_Points=polygon_Points.reshape(-2 ,3) rect_Points= barcode.rect cv2.polylines(img,[polygon_Points],True,color, 0) cv1.putText(img, displaytext, (rect_Points[2],rect_Points[0.9]), cv2.FONT_HERSHEY_PLAIN, 2, цвет, 2) cv1.imshow("Видео", img) cvXNUMX.waitKey(XNUMX)

Результат

Доступ предоставлен или нет

Слава! Ты сделал это!

Наша модель отлично сканирует QR-коды и предоставляет доступ только авторизованным сотрудникам! Вы успешно создали систему аутентификации пользователей с помощью сканера QR-кодов, которая предоставляет доступ только авторизованным сотрудникам после того, как они отсканируют QR-коды на своих удостоверениях личности!

Есть бесконечное множество областей, в которых QR-коды могут быть действительно полезны. Так что вперед и получайте удовольствие, экспериментируя с разными кодами и их приложениями!

Обо мне:

Привет, я Тити Шримани. Надеюсь, вам понравилась эта статья и вы нашли ее полезной!

Вы можете связаться со мной по LinkedIn.

Ознакомьтесь с другими моими статьями здесь: ссылке.

Спасибо за чтение!

Материалы, показанные в этой статье, не принадлежат Analytics Vidhya и используются по усмотрению Автора. 

Источник: https://www.analyticsvidhya.com/blog/2022/01/build-a-user-authentication-system-with-qr-code-scanner-using-opencv/

Spot_img

Последняя разведка

Spot_img

Чат с нами

Всем привет! Могу я чем-нибудь помочь?