Используем веб-камеру и Raspberry Pi 4 для извлечения информации из QR-кодов, создаем собственный код на Python.
Комплектующие
Для считывания и создания QR-кодов нам понадобятся следующие комплектующие и программное обеспечение.
- Raspberry Pi 4 Model B × 1
- Raspberry Pi Camera Module V2 × 1
- Microsoft VS Code
- Python 3.6
Как работают QR-коды
Quick Response Code или код быстрого реагирования аналогичны штрих-кодам, поскольку они способны кодировать данные, представленные черными и белыми квадратами. Но вместо того, чтобы использовать лазер, камера различает пробелы и затем отправляет эту информацию на обработку.
Они состоят из нескольких больших квадратов, которые помогают выровнять и расположить края QR-кода, отформатировать столбцы, номер версии и, наконец, сами данные.
Содержащиеся в них данные могут кодировать различные типы, включая числа, символы и двоичные файлы, что позволяет использовать их в творческих целях.
Рекламодатели часто кодируют в них URL-адреса, которые перенаправляют пользователя на их веб-сайт. Другие компании могут разместить важную информацию о продукте в QR-коде, например, серийный номер, и прикрепить ее к компоненту.
Генерируем с помощью Python
Существует пакет Python под названием qrcode, который позволяет пользователям быстро кодировать данные внутри QR-кода, а затем экспортировать их в виде изображения. Чтобы установить его, запустите:
pip3 install qrcode[pil]
Затем вы можете импортировать его в скрипт и сгенерировать изображение PIL с помощью:
import qrcode code = qrcode.make('Hello world!')
Затем изображение можно экспортировать в файл с помощью:
code.save(<filename>.png)
Вы можете дополнительно настроить свои коды с помощью класса QRCode, который предоставляет такие параметры, как размер, количество исправлений ошибок, версия и ширина границы.
Теперь, когда все ваши собственные QR-коды созданы, соберите их на одной странице и распечатайте.
Настройка Raspberry Pi 4
Я решил использовать Raspberry Pi 4 из-за его возможностей, которые могут немного повысить скорость работы приложения при чтении изображений.
Я установил Raspbian, загрузив образ ОС и перепрошив его с помощью Balena Etcher. Затем я подключился к нему через SSH и установил OpenCV:
sudo apt-get update sudo apt-get install python3-opencv sudo apt-get install libqt4-test python3-sip python3-pyqt5 libqtgui4 libjasper-dev libatlas-base-dev -y pip3 install opencv-contrib-python==4.1.0.25 sudo modprobe bcm2835-v4l2
Последняя команда позволяет вам использовать Picamera с OpenCV VideoCapture.
Я проверил успешность установки:
python3 import cv2
Чтение QR-кодов
Код работает следующим образом:
- Настройка камеры и определить QR-код.
- Считать код в новом кадре и извлечь QR-код
- Если есть код, нарисовать рамку вокруг него и отобразить его данные выше.
- Если клавиша выхода q не была нажата, вернуться к шагу 2.
Программа также показывает обновленный кадр с наложенной графикой при каждом обновлении.
import cv2 cap = cv2.VideoCapture(0) detector = cv2.QRCodeDetector() while True: _, img = cap.read() data, bbox, _ = detector.detectAndDecode(img) if(bbox is not None): for i in range(len(bbox)): cv2.line(img, tuple(bbox[i][0]), tuple(bbox[(i+1) % len(bbox)][0]), color=(255, 0, 255), thickness=2) cv2.putText(img, data, (int(bbox[0][0][0]), int(bbox[0][0][1]) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) if data: print("data found: ", data) cv2.imshow("code detector", img) if(cv2.waitKey(1) == ord("q")): break cap.release() cv2.destroyAllWindows()
Поскольку QR-коды очень полезны для отслеживания множества различных деталей, например, на складе, я планирую использовать их для отслеживания своего оборудования типа коробки резисторов или плат Arduino.
24 мая 2020 в 03:19
Отличная статья! Дружище, большое спасибо.
29 мая 2020 в 09:17
Спасибо, лаконично и просто, главное жизненно;)
9 декабря 2020 в 13:29
После pip install qrcode[pil]
Import qrcode не работает.появляеться
Bash: import: команда не найдена. Помогите пожалуйста
9 декабря 2020 в 13:30
Так же не импортируеться
Import cv2