1. Введение
Теперь сканирование QR-кодов стало неотъемлемой частью обычных операций в нашей жизни, таких как снятие денег, осуществление платежей и вход в приложения. Итак, что же происходит в целом, когда мы используем наши мобильные телефоны для сканирования QR-кодов? Эта статья полностью раскроет тайну сканирования QR-кодов как с принципиальной точки зрения, так и с аспектов реализации.
2. Состав QR-кода
QR-код представляет собой матричный штрих-код, представляющий собой комбинацию черно-белых графических точек, распределенных на плоскости по определенным правилам с использованием определенной геометрической фигуры. Он имеет следующие характеристики:
- Большая емкость данных, обычно можно хранить более 500 байт данных.
- Благодаря функциям обнаружения и исправления ошибок уровень допуска ошибок достигает 30%.
- Может сканировать и читать под любым углом на 360 градусов во всех направлениях.
QR-код состоит из функционального режима, информации о формате, информации о версии, уровня исправления ошибок и т. д. Его основной компонентной единицей является «блок». Каждый блок содержит несколько модулей, каждый модуль представляет бит двоичных данных 0 или 1.
Между блоками имеется пустая область, а трехпозиционные графические изображения QR-кода расположены в трех углах области кода. Сканер может использовать ее для определения ориентации и размера QR-кода во время распознавания.
3. Принцип кодирования QR-кода
Кодирование QR-кодов соответствует определенным стандартам и в основном включает в себя следующие этапы:
- Соберите данные, которые необходимо закодировать
- Выберите уровень коррекции ошибок и рассчитайте кодовые слова коррекции ошибок.
- Преобразование данных в двоичный битовый массив в соответствии с правилами кодирования.
- Добавьте информацию о режиме функции и формате в соответствии с указанной информацией о режиме и формате.
- В соответствии со структурой блока QR-кода каждому блоку выделяется двоичный битовый массив.
- Добавьте разделительные линии, метки позиционирования и т. д. помощники вокруг области кодирования.
- Кодируйте каждый модуль в черно-белые точки в соответствии с яркостью цвета.
Далее давайте сосредоточимся на ключевых шагах: кодировании с коррекцией ошибок и распределении иерархической структуры. 3.1 Кодирование с коррекцией ошибок Чтобы повысить устойчивость QR-кодов к ошибкам, необходимо выполнить кодирование с коррекцией ошибок на исходных данных. Общие коды исправления ошибок включают код Рида-Соломона, код BCH и т. д. Если взять в качестве примера код Рида-Соломона, то перед кодированием данные необходимо вычислить с помощью CRC для создания проверочного кода, а затем информация и проверочный код кодируются вместе. После кодирования будет сгенерирована серия кодовых слов для исправления ошибок.
Во время декодирования, если менее 30% кодовых слов содержат ошибки, исходная информация может быть полностью восстановлена, тем самым достигая высокой устойчивости к ошибкам.
3.2 Иерархическое распределение
Последовательность кодирования QR-кода начинается с правого нижнего угла и задается один за другим слоями. При распределении сначала определите количество блоков на текущем уровне, а затем последовательно распределите данные каждого уровня.
После последовательного выделения каждого слоя окончательно формируется полный QR-код.
4. Принцип расшифровки QR-кода
При сканировании QR-кода мобильным телефоном весь процесс расшифровки выглядит следующим образом:
- Камера получает изображение QR-кода
- Предварительная обработка изображений, включая фильтрацию, определение порога и т. д.
- Обнаружьте метку позиционирования и подтвердите область и ориентацию QR-кода.
- Определите концентрические массивы, чтобы найти центр графики
- Разделите QR-код на блоки и определите содержимое каждого блока.
- Преобразование в массив байтов в соответствии с правилами декодирования.
- Выполните декодирование с коррекцией ошибок, чтобы получить исходные закодированные данные.
- Анализируйте информацию о схеме и формате для извлечения реального содержимого данных.
Среди них позиционирование и идентификация являются фокусом и сложностью декодирования. Как правило, необходимо обнаружить край области QR-кода, пересечь пиксели, чтобы определить цвет, а затем определить каждый блок. Обычно используемые алгоритмы включают в себя следующее:
- Обнаружение прямоугольников на основе контуров
- Преобразование Хафа на основе обнаружения прямой линии
- Распознавание образов на основе покрытия
- Блок порогового значения на основе статистики пикселей
Каждый алгоритм необходимо сочетать с технологией обработки изображений для достижения быстрого и точного позиционирования и распознавания путем сканирования геометрических особенностей графики. 5. Реализация QR-кода в приложении 5.1 Генерация QR-кода Для генерации QR-кода вы можете использовать некоторые зрелые библиотеки генерации QR-кода, такие как QRCode, libqrencode и т. д. В основном необходимо реализовать следующие функции:
- Соберите контент, который необходимо закодировать
- Укажите уровень исправления ошибок
- Вызовите библиотечные функции для создания матрицы, содержащей маркеры позиционирования и информацию о данных.
- Преобразуйте матрицу в черно-белое пиксельное изображение в соответствии с требованиями к цвету кодирования.
питон
импорт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-кодов является приложение для сканирования, сочетающее в себе камеры и алгоритмы. Основной процесс заключается в следующем:
- Получить живое изображение с камеры
- Предварительная обработка с использованием OpenCV или другой библиотеки обработки изображений.
- Извлеките функции изображения и найдите область QR-кода
- Информация кодового слова идентификации блока
- Декодируйте, преобразуйте и проверяйте и выводите результат декодирования.
Таким образом, физический QR-код можно сканировать и декодировать в режиме реального времени для получения скрытых данных. 6. Резюме В качестве метода хранения кодирования QR-код позволяет быстро идентифицировать информацию в физическом мире путем сканирования с помощью мобильного телефона с использованием определенных правил кодирования и механизмов исправления ошибок. Понимание его базовой структуры, принципа кодирования и алгоритма распознавания очень помогло нам применить и разработать функцию сканирования QR-кода.