​Принцип и реализация сканирования 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose