Гид по технологиям

Генерация и сканирование штрихкодов в Python

5 min read Python Обновлено 02 Apr 2026
Генерация и сканирование штрихкодов на Python
Генерация и сканирование штрихкодов на Python

Важное: все примеры кода можно запускать локально. Для работы с веб‑камерой убедитесь, что у вас есть доступ к устройству и установлены зависимости.

Что такое штрихкод

Штрихкод — это последовательность параллельных чёрных и белых полос разной ширины, предназначенная для визуального и машинного считывания. Штрихкоды кодируют информацию о товаре, артикуле или идентификаторе. QR‑код — это двумерный (матрицный) штрихкод, который хранит больше данных в квадратной форме.

Кратко: штрихкод — визуальное представление данных для быстрой автоматической идентификации.

Основные варианты применения

  • Инвентаризация и складской учёт
  • Маркирование товаров в ритейле
  • Отслеживание отправлений и документов
  • Внутренние идентификаторы (штрихкоды на деталях и изделиях)

Как генерировать и настраивать штрихкоды

Ниже показан пошаговый рабочий процесс с библиотекой python-barcode.

Установка библиотеки

Откройте терминал и установите python-barcode (и Pillow для сохранения в виде изображения):

pip install python-barcode Pillow

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

Импорт модулей

Добавьте в скрипт корректные импорты:

import barcode
from barcode.writer import ImageWriter

Writers — классы, отвечающие за отрисовку и сохранение изображения штрихкода. ImageWriter сохраняет штрихкоды как растровые изображения (PNG, JPEG и т. п.).

Функция для генерации штрихкода

Пример функции, которая создаёт изображение штрихкода и сохраняет его в файл:

def generate_barcode(data, barcode_format, options=None):
    # Получаем класс штрихкода для заданного формата
    barcode_class = barcode.get_barcode_class(barcode_format)
    # Создаём объект штрихкода с ImageWriter (сохранит как изображение)
    barcode_image = barcode_class(data, writer=ImageWriter())
    # Сохраняем изображение; расширение зависит от writer (по умолчанию .png)
    barcode_image.save("barcode", options=options)

Функция сохраняет файл с именем barcode.png (или другим расширением, зависящим от writer).

Пример вызова

generate_barcode("MakeUseOf", "code128")

Фотография штрихкода на товаре

Настройка внешнего вида

Параметры writer позволяют менять цвет переднего плана, размер модулей, отображение текста и шрифт. Пример с настройками:

generate_barcode("MakeUseOf", "code128", options={"foreground":"red",
                                                      "center_text": False,
                                                      "module_width":0.4,
                                                      "module_height":20})

Сгенерированный штрихкод (изображение)

Настроенный штрихкод с красным цветом

Совет: если вам нужен векторный формат (SVG), используйте writer, который поддерживает SVG, или сохраните в SVG напрямую (python-barcode поддерживает SVGWriter).

Как сканировать и декодировать штрихкоды

Для сканирования в Python часто используют библиотеку pyzbar (обёртка над zbar) и OpenCV для управления изображениями и видеопотоком.

Установка зависимостей системы и Python

На macOS и Linux требуется библиотека zbar в системе, затем Python‑зависимости:

brew install zbar # Mac OS X
sudo apt-get install libzbar0 # Linux
pip install pyzbar opencv-python

(Для Windows используйте инструкции поставщика zbar или установите предварительно собранные бинарники.)

Импорт модулей

import cv2
from pyzbar import pyzbar

Сканирование штрихкода из изображения

Шаги:

  1. Загрузить изображение через cv2.imread (получаем numpy.ndarray).
  2. Передать массив в pyzbar.decode для обнаружения и декодирования.

Пример функции:

def scan_barcode_from_image(image_path):
    # Читаем изображение по пути
    image = cv2.imread(image_path)
    # Декодируем штрихкоды на изображении
    barcodes = pyzbar.decode(image)
    # Проходим по найденным штрихкодам
    for barcode in barcodes:
        # Декодируем данные в строку (UTF-8)
        barcode_data = barcode.data.decode("utf-8")
        barcode_type = barcode.type
        print("Barcode Data:", barcode_data)
        print("Barcode Type:", barcode_type)

Пример вывода:

scan_barcode_from_image("barcode.png")
> Barcode Data: MakeUseOf
> Barcode Type: CODE128

Сканирование из потока веб‑камеры

Ниже пример, который захватывает кадры с веб‑камеры и декодирует штрихкоды в реальном времени. Нажмите q, чтобы выйти.

def scan_barcode_from_webcam():
    # Инициализируем видеозахват (0 — стандартная веб‑камера)
    video_capture = cv2.VideoCapture(0)

    while True:
        # Получаем кадр из потока
        _, frame = video_capture.read()

        # Декодируем штрихкоды в кадре
        barcodes = pyzbar.decode(frame)

        # Обрабатываем найденные штрихкоды
        for barcode in barcodes:
            barcode_data = barcode.data.decode("utf-8")
            barcode_type = barcode.type
            print("Barcode Data:", barcode_data)
            print("Barcode Type:", barcode_type)

        # Выход по нажатию 'q'
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break

    video_capture.release()
    cv2.destroyAllWindows()

# Запуск
scan_barcode_from_webcam()

Сканирование штрихкода с потока веб‑камеры

QR‑коды: быстро и просто

QR‑коды — двумерные коды, удобные для хранения URL, контактных данных и небольших текстов. Для генерации QR в Python часто используют библиотеку qrcode:

pip install qrcode[pil]

Пример создания QR:

import qrcode
img = qrcode.make('https://example.com')
img.save('qrcode.png')

Для сканирования QR можно использовать pyzbar так же, как и для обычных штрихкодов.

Как выбрать формат штрихкода — мини‑методология

  1. Определите объём данных: если нужно много символов — используйте QR. Для коротких кодов на товарных этикетках подходят EAN/UPC или Code128.
  2. Требования к совместимости: розничная торговля часто требует EAN‑13/UPC. Логистика — Code128.
  3. Читаемость и размер: 2D коды лучше читаются при маленьком размере на упаковке.
  4. Проверка контрольной суммы: многие форматы включают её автоматически (EAN, UPC).

Альтернативные библиотеки и подходы

  • treepoem — генерирует штрихкоды через Ghostscript/Barcode Writer (поддерживает много форматов).
  • pillow + reportlab — для кастомной отрисовки и векторных отчётов.
  • zxing (через вызов внешнего инструмента или обёртки) — альтернатива для декодирования.

Когда python-barcode не подходит: если нужен специфичный векторный вывод или поддержка редких форматов.

Контрольный список по ролям

  • Для разработчика:
    • Установить зависимости и проверить версии.
    • Покрыть генерацию тестами.
    • Обработать ошибки ввода (некорректная длина, недопустимые символы).
  • Для QA:
    • Проверить читаемость на разных принтерах/этикетках.
    • Протестировать с физическими сканерами и мобильными приложениями.
  • Для DevOps:
    • Убедиться, что системные зависимости (zbar, ghostscript) доступны в контейнере.

Критерии приёмки

  • Генерация: изображение создаётся корректно, читается pyzbar и другими декодерами.
  • Сканирование: при тестовом изображении функция возвращает ожидаемые данные и тип.
  • Веб‑камера: приложение стабильно работает ≥5 минут без утечек памяти и корректно завершает работу по ‘q’.

Тест‑кейсы и приёмо‑сдаточные критерии

  • Генерация code128 с ASCII‑строкой → файл barcode.png создан, pyzbar возвращает исходную строку.
  • Генерация EAN13 с неверной контрольной суммой → библиотека должна выбросить ошибку или отклонить ввод.
  • Сканирование с фото → найден хотя бы один корректный код.
  • Поток с веб‑камеры → приложение корректно распознаёт штрихкод в кадре и выводит данные.

Глоссарий (1 строка)

  • Barcode: машинно читаемое визуальное представление данных.
  • QR: двумерный код для хранения больших объёмов данных.
  • ImageWriter: класс для сохранения штрихкода как изображения.

Совместимость и советы по миграции

  • Если переносите проект в контейнеры, установите системные пакеты zbar в Dockerfile.
  • Для Windows используйте предварительно собранные бинарники zbar или замените на облачные API для распознавания.
  • Проверяйте кодировки: используйте UTF‑8 при декодировании данных из штрихкода.

Безопасность и приватность

Не храните персональные данные в штрихкодах без шифрования или явного согласия пользователя. Штрихкод легко копируется и сканируется любым устройством.

Резюме

  • Python позволяет быстро генерировать и сканировать штрихкоды с помощью python-barcode, pyzbar и OpenCV.
  • Выбирайте формат штрихкода исходя из объёма данных и требований совместимости.
  • Тестируйте генерацию и сканирование на реальных устройствах и печатных носителях.

Короткая запись для анонса: генерация и чтение штрихкодов в Python — готовые примеры и чек‑листы для запуска в проде.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро