Библиотека штрихкодов

Библиоте́ка штрихко́дов (англ. Barcode library, Barcode SDK) — это программная библиотека, предназначенная для добавления возможностей работы со штрихкодами в настольные, веб-, мобильные или встроенные приложения. Библиотека штрихкодов предоставляет наборы подпрограмм или объектов, которые позволяют создавать изображения штрихкодов и размещать их на различных поверхностях или распознавать машинно-кодируемый текст/данные с помощью сканированных или сфотографированных камерой изображений с вшитыми штрихкодами. Библиотека может поддерживать два режима: генерации и распознавания; некоторые библиотеки обеспечивают поддержку как считывания, так и записи штрихкодов, а другие поддерживают только один из режимов.

В настоящее время технология штрихкодирования позволяет добавить машинно-считываемые метки или дополнительную информацию к любому реальному объекту по цене менее одного цента[1] и использовать любое устройство с камерой для идентификации дополнительной информации об объекте. Таким образом, сочетание технологии штрихкодов и библиотеки штрихкодов позволяет с минимальными затратами внедрять системы автоматической обработки документов[2][3], OMR, отслеживание посылок[4][5] или даже реализовать приложения дополненной реальности[6][7].

История

Первые Barcode SDK представляли собой не библиотеки, а отдельные приложения для MS-DOS и Windows[8][9][10], а также в виде шрифтов штрихкода[11]. В то время штрихкоды использовались преимущественно в розничной торговле и для внутрикорпоративных нужд, поэтому пользователи искали универсальные аппаратные решения[12] для генерации, печати и распознавания штрихкодов.

Ситуация изменилась с распространением устройств с камерами (например, мобильных телефонов) и сканеров документов. Поскольку штрихкоды стало возможно сканировать и распознавать на обычном оборудовании, потребность в приобретении дорогостоящих специализированных устройств отпала, что увеличило спрос на SDK и библиотеки для работы со штрихкодами.

Библиотеки для записи штрихкодов уже были реализованы в проектах GNU Barcode или Zint в виде самостоятельных приложений или шрифтов штрихкода. Реализация библиотеки для записи не требует глубоких знаний в области информатики, поскольку достаточно следовать спецификациям AIM[13] или стандартам ISO[14]. Процесс похож на кодирование информации в специализированный формат файла.

Кодирование 2D-штрихкодов сложнее, поскольку дополнительно используются такие параметры, как количество столбцов и строк, ECI или механизмы коррекции ошибок (например, код Рида-Соломона). Некоторые 2D-штрихкоды, такие как MaxiCode или PDF417, включают особые поля (например, почтовый адрес или метаданные), что требует обработки нескольких графических файлов[15]. Решить эти различия только с помощью шрифтов невозможно — необходим программный интерфейс приложений с поддержкой множества параметров.

Библиотеки чтения штрихкодов сложнее, поскольку требуют использования методов компьютерного зрения. Однако запускать их можно и на устройствах с камерой или сканером. Первые библиотеки распознавали только 1D-штрихкоды через эмуляцию режима лазерного сканера. Библиотека захватывала изображение, затем выполняла анализ некоторых строк с помощью алгоритма Брезенхэма и пыталась прочесть данные, имитируя работу аппаратного сканера. Яркими примерами таких решений являются ранний проект ZXing (поддерживаемый Google), ZBar[16] и другие[17][18].

Для распознавания 2D-штрихкодов эмуляция режима лазерных сканеров неприменима: она затрудняет определение области штрихкода и понижение качества распознавания наклонённых 1D-штрихкодов. Были реализованы более сложные методы из области компьютерного зрения[19][20], повысившие качество распознавания 1D и 2D штрихкодов.

Технические особенности

Библиотеки штрихкодов предоставляют дешёвую автоматическую идентификацию и сбор данных в различных сферах услуг и промышленности: развлечения, здравоохранение, почтовые сервисы, обработка документов и розничная торговля.

Они используются для:

  • Рекламы[21]
  • Реализации дополненной реальности[22] для быстрой идентификации виртуальных объектов
  • Автоматической идентификации данных при обработке документов
  • Автоматически идентифицируемых гиперссылок на интернет-страницы
  • Автоматического распознавания платёжных счетов[23]
  • Креативного использования штрихкодов в дизайне[24]
  • Ручного ввода данных для документов: водительские удостоверения[25], чеки или паспорта
  • Передачи ключей шифрования и проверки документов (ISO/IEC 20248)
  • Отслеживания продуктов питания и товаров в розничной торговле
  • Игры с дополненной реальностью
  • В аэропортах, на вокзалах для автоматической идентификации билетов и документов пассажиров
  • Интернет вещей — связывание физических объектов с виртуальными представлениями
  • Отслеживание посылок[26]
  • Идентификации пациентов или лекарств в здравоохранении (фармакод)
  • Быстрого извлечения информации с визитных карточек[27]
  • Учёта проката автомобилей, багажа авиакомпаний и даже радиоактивных отходов
  • Идентификации транспортных средств[28]

Виды

Библиотеки штрихкодов (Barcode SDK) могут быть классифицированы по функциональности:

  • Шрифты штрихкодов (Barcode Fonts)
  • Библиотека записи штрихкодов (Barcode Writing library)
  • Библиотека чтения штрихкодов (Barcode Reading library)
  • Полнофункциональная библиотека (Barcode Full support library)

Первые библиотеки штрихкодов были полностью прозрачны для пользователя и работали посредством вывода текста специальным шрифтом TrueType. Это хорошо подходило для линейных штрихкодов, поскольку они представляют собой линейный текст, иногда с контрольной суммой. Для работы с 2D-штрихкодами шрифты также применимы, но возникают проблемы с обработкой метаданных (задача строк и столбцов штрихкода). Решение — предопределённые значения метаданных в наборе шрифтов одного типа.

Библиотеки работы с API обеспечивают широкие возможности настройки в режимах генерации и распознавания. Однако далеко не все библиотеки предоставляют полную поддержку обоих режимов — чаще реализуется только один.

Список библиотек штрихкодов

Библиотеки штрихкодов поддерживают различные форматы штрихкодов и языки программирования, а также различаются по поддержке функций чтения и записи. Наиболее известные библиотеки и SDK представлены в следующей таблице:

Список библиотек штрихкодов
Название Компания Лицензия Тип Языки Платформы Возможности Поддерживаемые типы штрихкодов
Aspose.Barcode[29] Aspose Проприетарная, Royalty-free Полная Java, .NET, C++, PHP, JavaScript, Python Кроссплатформенная (нэйтив), Java, .NET, Android, iOS, Tizen (через MAUI), Python (через .NET/Java), Web Запись штрихкодов в 7 графических форматах, чтение из 5 форматов, а также из документов Word и PDF (совм. с Aspose.Words и Aspose.PDF) более 80[30]
Barcode Writer in Pure PostScript[31] Terry Burton Consulting Ltd MIT, возможна коммерческая поддержка Запись PostScript Кроссплатформенная Генерация всех видов штрихкодов полностью на PostScript более 70[32]
Barcode4J[33] SourceForge Apache 2.0 Запись Java Java Генерация штрихкодов в 5 графических форматах, проект не обновляется 15[34]
BarcodeLib[35] BarcodeLib.com Проприетарная, Royalty-free Полная Java, .NET Java, .NET Запись штрихкодов в 7 форматах, чтение из 5 форматов 11 1D и 3 2D типа
barKoder Barcode Scanner SDK[36] barKoder Ltd Проприетарная Чтение C, Java, Objective-C, Swift, Kotlin, JavaScript, C++, .NET, Dart, C#, TypeScript, Python Android, iOS, Xamarin, Flutter, React Native, Linux, Cordova, MAUI, Windows, Web, Browser, Кроссплатф., NativeScript, Capacitor Сканирование штрихкодов в 5 форматах и с камер устройств более 30
ByteScout BarCode SDK[37] ByteScout, Inc. Проприетарная, Royalty-free Полная .NET; JavaScript (через REST API); COM API (C++, Java, Delphi, PHP, VBScript) .NET, Windows, Web Запись и чтение в 7 и 5 форматах соответственно более 20
ClearImage Barcode Reader SDK[38] Inlite Research, Inc Проприетарная, по числу компьютеров Чтение .NET; COM API (C++, Java, Delphi, PHP, VBScript) Windows Чтение с 5 графических форматов и pdf-файлов 19
Cognex Barcode Scanner SDK[39] Cognex Проприетарная, Royalty-free Чтение Java, .NET, Objective-C, Swift Android, iOS Сканирование и распознавание с помощью камеры мобильных устройств 17
Docutain Barcode Scanner SDK[40] INFOSOFT Informations und Dokumentations systeme GmbH Проприетарная Чтение Java, JavaScript, .NET, Swift, Kotlin, Dart, C# Android, iOS, Xamarin, Flutter, Cordova, Ionic, React Native, .NET MAUI Распознавание 9 типов 1D и 4 форматов 2D штрихкодов на мобильных устройствах 13
DTK Software Barcode Reader SDK[41] DTK Software Проприетарная Чтение Java, .NET Java, .NET Чтение штрихкодов с 5 форматов изображений более 30
Dynamsoft Barcode Reader SDK[42] Dynamsoft Проприетарная, по числу компьютеров Чтение C++; Objective-C; обёртки: .NET, PHP, Java; JavaScript (WebAssembly) Windows, Linux, Android (через Xamarin), iOS (через Xamarin), Browser Чтение штрихкодов из более 5 форматов изображений и распознавание с камер более 30
GdPicture.NET Barcode SDK[43] ORPALIS Проприетарная, Royalty-free Полная .NET .NET Генерация и чтение штрихкодов с ~90 графических форматов[44] более 30
GNU Barcode[45] GNU GPLv3 Запись PostScript Кроссплатформенная Генерация штрихкодов с помощью языка Postscript 10
IBscanner for .NET[46] Inobix Проприетарная, Royalty-free Чтение .NET .NET Чтение с 5 графических форматов 12 1D-штрихкодов
IDAutomation Barcode Generator[47] IDAutomation.com, Inc. Проприетарная, Royalty-free Запись Java, .NET, C++, PHP, JavaScript, VBA, TrueType Fonts Java, .NET, Windows, Web Генерация штрихкодов в различных языках и приложениях с поддержкой TrueType Fonts 24[48]
KeepDynamic Barcode SDK[49] KeepDynamic.com Проприетарная, Royalty-free Полная Java, .NET, VBA Java, .NET, Microsoft Office Запись в 7 форматах, чтение из 5 форматов 9 типов 1D и 3 типа 2D
LEADTOOLS Barcode SDK[50] LEAD Technologies, Inc Проприетарная, по приложениям Полная Java, .NET, C++, Objective-C, Swift, JavaScript (REST API) Кроссплатформенная, Java, .NET, Android, iOS, Web Запись и чтение в разных форматах (в зависимости от платформы) более 50
ML Kit Barcode Scanning API[51] Google Google API[52] Чтение Java, Objective-C, Swift Android, iOS Распознавание штрихкодов с камеры устройства 13
Neodynamic Barcode Professional[53] Neodynamic SRL Проприетарная, Royalty-free Полная .NET, JavaScript, PHP (REST API) .NET, Web Генерация >70 форматов, чтение — 12 форматов генерация: более 70[54] / чтение: 12[55]
OnBarcode Barcode SDK OnBarcode Проприетарная, Royalty-free Полная Java, .NET, Objective-C Java, .NET, Android, iOS Запись — 7 форматов, чтение — 5 форматов (в зависимости от платформы) более 20
OpenBarcodes[56] SourceForge GPLv2 Запись TrueType Font Кроссплатформенная Кодирование текста в штрихкод для любых текстовых приложений 4 типа 1D и 3 типа 2D
pqScan Barcode SDK[57] pqScan Проприетарная, Royalty-free Полная Java, .NET Java, .NET Запись в 7 и чтение из 5 форматов 13
Python Barcode Library[58] Game Maker 2k BSD Запись Python Кроссплатформенная Генерация штрихкодов на Python 12
Scanbot Barcode Scanner SDK[59] Scanbot SDK Проприетарная Чтение Java, Objective-C, Swift, Kotlin, Dart, JavaScript, C#, .NET Android, iOS, Browser, Xamarin, Cordova, Ionic, Flutter, React Native Распознавание 9 типов 1D и 9 форматов 2D штрихкодов в приложениях и на сайтах 18
SD-TOOLKIT Barcode SDK[60] SD-TOOLKIT Проприетарная, Royalty-free Чтение Java, .NET, C++ (нэйтив), COM API (C++, Java, Delphi, VBScript), Objective-C Java, .NET, Android, iOS, Windows Чтение из 5 форматов изображений 15 типов 1D и 4 — 2D
SmartCodeDeveloper SDK[61] TechnoRiver Проприетарная, Royalty-free Запись .NET .NET Запись в 7 графических форматах более 30
Spire.Barcode[62] E-iceblue Co. Ltd. Проприетарная, Royalty-free Полная Java, .NET Java, .NET, Android (через Xamarin), iOS (через Xamarin) Запись в 7 форматах, чтение из 5 форматов 39[63]
Syncfusion.Barcode Syncfusion Проприетарная Запись .NET .NET Генерация штрихкодов как изображений или PDF; UI-контролы 10 типов 1D и 2 типа 2D
TBarCode SDK[64] TEC-IT Datenverarbeitung GmbH Проприетарная, Royalty-free Запись .NET, C++, Delphi, PowerBuilder, COM API (C++, Delphi, VBScript), ABAP Кроссплатформенная, .NET, SAP Запись в 7 форматах (в зависимости от платформы) более 70[65]
VintaSoft Barcode .NET SDK[66] VintaSoft Проприетарная, Royalty-free Полная .NET .NET, Android (через Xamarin) Запись в 7, чтение из 5 форматов; чтение из PDF[67] более 60
Viziotix Barcode Decoder SDK[68] Viziotix Проприетарная, по устройствам Чтение C/C++, обёртки: .NET, Python, Java, Swift Windows, Linux, Android, iOS, CUDA Чтение 28 типов штрихкодов с изображений и камер 28[69]
VSBarcodeReader[70] Vision Smarts SPRL Проприетарная, Royalty-free Чтение Objective-C, Swift, Java, Kotlin iOS, Android, Xamarin, Cordova, Ionic Чтение с камеры мобильного устройства, офлайн 18 типов 1D и 2D
ZBar[71] SourceForge GNU LGPL 2.1 Чтение Python, Perl, C++, C Linux/Unix, Windows, iOS Захват изображения из видеопотока и распознавание штрихкодов (эмуляция линейного сканера) 7 типов 1D и QR-код
Zen Barcode Rendering Framework[72] Нет Public domain Запись .NET .NET Генерация штрихкодов в 7 форматах 9
Zint[73] SourceForge Apache 2.0, BSD, GPLv3 Запись C, .NET (через ZintNET[74]), Java (через Okapi Barcode[75]) Linux/Unix, Windows, Java, .NET Генерация в 6 форматах[76] (по портам) более 50[77]
ZXing[78] ZXing Project Apache 2.0 Полная Java, .NET, C++, Objective-C, JavaScript, PHP, Ruby, Python, TypeScript Кроссплатформенная, Java, .NET, Android, iOS, Web Генерация штрихкодов в разных форматах и распознавание из изображений и видеопотока более 20

Рекомендации и лучшие практики

Штрихкоды — это способ добавления машинно-считываемых меток к объектам материального мира с минимальными затратами[79]. Другие методы, такие как RFID-метки или распознавание объектов по изображению, сложнее и дороже. Всего существует более 200 видов штрихкодов, что затрудняет выбор оптимального типа. Первый штрихкод был стандартизирован в 1960-х, после чего выделяется две волны развития[80][81].

Первая волна предусматривала создание стандартов линейных штрихкодов (1960-е). Их основные достоинства — простота кодирования и распознавания лазерными сканерами, но любые ограничения совпадали с возможностями медленных 8-битных процессоров. Это обусловило ограничения в наборе символов (например, Code 11), длине штрихкода ([EAN 13], UPCA, EAN-8) или вообще контрольную сумму как опцию (Code 39), а информационная плотность остаётся низкой[82]. Также большинство 1D-штрихкодов имеют слабую или отсутствующую контрольную сумму, и результат с изображений низкого качества становится непредсказуем. Открытые движки не распознают 1D-штрихкоды в низком качестве, а коммерческие — справляются лучше, хотя могут ошибаться в отдельных символах. Всё это делает 1D-штрихкоды устаревшими, их использование возможно только если требуют промышленный стандарт (GS1)[83][84].

Вторая волна — матрицированные штрихкоды, появившиеся в 1990-х. Их плюсы: в 10 раз выше плотность кодирования, нет ограничений по набору символов, и используются самоконтролирующиеся коды, позволяющие не только исключить ошибки, но и восстанавливать повреждённые области[85]. Минус 2D-штрихкодов — лазерные сканеры его не читают (исключение — PDF417): требуются фотосканеры. Большинство кодов позволяют кодировать информацию в байтовом режиме, то есть без ограничений по кодировке, в том числе UTF-16 и UTF-8 через теги ECI.

Рекомендуется использовать 2D-штрихкоды в новых проектах, если это не противоречит отраслевым стандартам[86][87]. Они не накладывают ограничений по кодированию текста, корректно восстанавливаются с повреждённых изображений, а результат гарантирован надёжностью коррекции ошибок. Плотность кодирования позволяет размешать их на тех же или меньших площадях. Единственный вопрос — форма области: многие коды (например, QR-код, Азтек, Datamatrix) доступны в квадратном формате. Для длинных прямоугольных меток лучше использовать DMRE[88] или PDF417 (пропорция до 64:1).

Примечания