Библиотека штрихкодов
Библиоте́ка штрихко́дов (англ. 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 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).
Примечания
Литература
- Преимущества и недостатки штрихкодов и радиочастотной идентификации в управлении цепями поставок
- Штрихкоды GS1
- Обнаружение меток и штрихкодов в широкоугольных изображениях
- Устойчивое распознавание 1D-штрихкодов на мобильных устройствах
- Десять шагов к внедрению штрихкодов GS1
- Примеры закодированных в штрихкодах данных


