​Принцип и реализация сканирования QR-кодов
​Принцип и реализация сканирования QR-кодов

1. Введение

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

2. Состав QR-кода

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

  • Большая емкость данных, обычно можно хранить более 500 байт данных.
  • Благодаря функциям обнаружения и исправления ошибок уровень допуска ошибок достигает 30%.
  • Может сканировать и читать под любым углом на 360 градусов во всех направлениях. QR-код состоит из функционального режима, информации о формате, информации о версии, уровня исправления ошибок и т. д. Его основной компонентной единицей является «блок». Каждый блок содержит несколько модулей, каждый модуль представляет бит двоичных данных 0 или 1.

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

3. Принцип кодирования QR-кода

Кодирование QR-кодов соответствует определенным стандартам и в основном включает в себя следующие этапы:

  1. Соберите данные, которые необходимо закодировать
  2. Выберите уровень коррекции ошибок и рассчитайте кодовые слова коррекции ошибок.
  3. Преобразование данных в двоичный битовый массив в соответствии с правилами кодирования.
  4. Добавьте информацию о режиме функции и формате в соответствии с указанной информацией о режиме и формате.
  5. В соответствии со структурой блока QR-кода каждому блоку выделяется двоичный битовый массив.
  6. Добавьте разделительные линии, метки позиционирования и т. д. помощники вокруг области кодирования.
  7. Кодируйте каждый модуль в черно-белые точки в соответствии с яркостью цвета. Далее давайте сосредоточимся на ключевых шагах: кодировании с коррекцией ошибок и распределении иерархической структуры. 3.1 Кодирование с коррекцией ошибок Чтобы повысить устойчивость QR-кодов к ошибкам, необходимо выполнить кодирование с коррекцией ошибок на исходных данных. Общие коды исправления ошибок включают код Рида-Соломона, код BCH и т. д. Если взять в качестве примера код Рида-Соломона, то перед кодированием данные необходимо вычислить с помощью CRC для создания проверочного кода, а затем информация и проверочный код кодируются вместе. После кодирования будет сгенерирована серия кодовых слов для исправления ошибок.

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

3.2 Иерархическое распределение

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

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

4. Принцип расшифровки QR-кода

При сканировании QR-кода мобильным телефоном весь процесс расшифровки выглядит следующим образом:

  1. Камера получает изображение QR-кода
  2. Предварительная обработка изображений, включая фильтрацию, определение порога и т. д.
  3. Обнаружьте метку позиционирования и подтвердите область и ориентацию QR-кода.
  4. Определите концентрические массивы, чтобы найти центр графики
  5. Разделите QR-код на блоки и определите содержимое каждого блока.
  6. Преобразование в массив байтов в соответствии с правилами декодирования.
  7. Выполните декодирование с коррекцией ошибок, чтобы получить исходные закодированные данные.
  8. Анализируйте информацию о схеме и формате для извлечения реального содержимого данных. Среди них позиционирование и идентификация являются фокусом и сложностью декодирования. Как правило, необходимо обнаружить край области QR-кода, пересечь пиксели, чтобы определить цвет, а затем определить каждый блок. Обычно используемые алгоритмы включают в себя следующее:
  9. Обнаружение прямоугольников на основе контуров
  10. Преобразование Хафа на основе обнаружения прямой линии
  11. Распознавание образов на основе покрытия
  12. Блок порогового значения на основе статистики пикселей Каждый алгоритм необходимо сочетать с технологией обработки изображений для достижения быстрого и точного позиционирования и распознавания путем сканирования геометрических особенностей графики. 5. Реализация QR-кода в приложении 5.1 Генерация QR-кода Для генерации QR-кода вы можете использовать некоторые зрелые библиотеки генерации QR-кода, такие как QRCode, libqrencode и т. д. В основном необходимо реализовать следующие функции:
  13. Соберите контент, который необходимо закодировать
  14. Укажите уровень исправления ошибок
  15. Вызовите библиотечные функции для создания матрицы, содержащей маркеры позиционирования и информацию о данных.
  16. Преобразуйте матрицу в черно-белое пиксельное изображение в соответствии с требованиями к цвету кодирования. питон импортqrcode

data = 'https://www.example.com'

qr = qrcode.QRCode(version=2, box_size=10, border=5)

qr.add_data(data)

qr.make(fit=True)

img = qr.make_image(fill='black', back_color='white')

img.save('qrcode.png')

5.2 Сканируйте QR-код

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

  1. Получить живое изображение с камеры
  2. Предварительная обработка с использованием OpenCV или другой библиотеки обработки изображений.
  3. Извлеките функции изображения и найдите область QR-кода
  4. Информация кодового слова идентификации блока
  5. Декодируйте, преобразуйте и проверяйте и выводите результат декодирования. Таким образом, физический QR-код можно сканировать и декодировать в режиме реального времени для получения скрытых данных. 6. Резюме В качестве метода хранения кодирования QR-код позволяет быстро идентифицировать информацию в физическом мире путем сканирования с помощью мобильного телефона с использованием определенных правил кодирования и механизмов исправления ошибок. Понимание его базовой структуры, принципа кодирования и алгоритма распознавания очень помогло нам применить и разработать функцию сканирования QR-кода.
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода