Проблема
Система маркировки «Честный Знак» обязывает участников рынка наносить DataMatrix-коды на товары. В 1С:Предприятие 8.3 нет встроенного механизма распознавания DataMatrix из изображений — платформа умеет генерировать штрихкоды, но не считывать их с фотографий. У нас возникла необходимость при возврате товара получить в систему полный штрихкод марки без использования сканера штрихкодов. Я немного умею в Python и немного в ИИ так что было решено сделать сервис для распознавания. Сразу нашёл в интернете библиотеку Aspose — она хорошо и быстро распознаёт DataMatrix, но оказалась платной. Далее выбор пал на pylibdmtx, но она только под Windows, а хотелось, чтобы админы просто развернули в Docker без танцев с бубном. Тогда выбрал ZXing-CPP — она кроссплатформенная и неплохо справляется даже с не слишком чёткими фото штрихкодов.
Решение
DataMatrix Recognition API — HTTP-сервис на Python, который принимает изображение в base64, распознаёт DataMatrix-код и возвращает результат в JSON. Проект включает готовое расширение для 1С с общим модулем КоннекторHTTP (http-коннектор от Владимира Бондаревского).
Репозиторий: https://github.com/rozer76/datamatrixRecognitionAPI
Архитектура
Сервис построен на стеке Python:
| Компонент | Назначение |
|---|---|
| FastAPI | HTTP-фреймворк |
| ZXing-CPP | Распознавание штрихкодов |
| OpenCV (headless) | Предобработка изображений |
| NumPy | Работа с массивами пикселей |
| Uvicorn | ASGI-сервер |
Пайплайн распознавания:
- Декодирование base64 → бинарные данные
np.frombuffer→ массив NumPycv2.imdecode→ изображение OpenCV- Конвертация в grayscale, бинаризация по Оцу
zxingcpp.read_barcodes→ текст DataMatrix- Формирование JSON-ответа
Бинаризация по Оцу повышает качество распознавания на зашумлённых и низкоконтрастных снимках, что типично для фотографий с мобильных устройств.
API
POST /recognize
Запрос:
{
"file_data": "<изображение в base64>",
"operation_uuid": "550e8400-e29b-41d4-a716-446655440000"
}
operation_uuid — идентификатор запроса, возвращается в ответе без изменений. Удобен для трассировки вызовов в логах 1С и сервиса.
Успех (200):
{
"operation_uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": "success",
"data": "0104607024328011210000012345\u001d911234"
}
Поле data содержит полный текст DataMatrix, включая разделитель GS (\u001d) — именно в таком формате код ожидает система «Честный Знак».
Код не найден (400):
{
"operation_uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": "error",
"message": "ШТРИХКОД НЕ РАСПОЗНАН. Ошибка типа ValueError"
}
Внутренняя ошибка (500):
{
"operation_uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": "error",
"message": "ШТРИХКОД НЕ РАСПОЗНАН. Ошибка типа <ТипИсключения>"
}
GET /health
Проверка доступности сервиса:
{ "status": "ok" }
Коды ответов
| Код | Условие |
|---|---|
| 200 | DataMatrix распознан |
| 400 | Код не найден или данные не являются изображением |
| 422 | Отсутствуют обязательные поля |
| 500 | Непредвиденная ошибка сервера |
Интеграция с 1С — расширение
В репозитории идёт расширение datamatrixRecognitionAPI.cfe с общим модулем КоннекторHTTP.
В расширении используется индикация выполнения а он использует ДлительныеОперации БСП.
После подключения расширения вызов сервиса — одна строка:
ДанныеФайлаБаз64 = Base64Строка(Марка.ДД);
ТелоЗапроса = Новый Структура("file_data, operation_uuid", ДанныеФайлаБаз64, Марка.УИД);
РезультатJSON = КоннекторHTTP.PostJson("http://localhost:8000/recognize", ТелоЗапроса);
Разбор ответа:
Если РезультатJSON.status = "success" Тогда
КодDataMatrix = РезультатJSON.data;
Иначе
Сообщить(РезультатJSON.message);
КонецЕсли;
Установка расширения:
- Конфигуратор → Конфигурация → Расширения конфигурации
- Добавить → выбрать
datamatrixRecognitionAPI.cfe - Включить расширение
Практическое применение
Решение используется в рабочей конфигурации — встроено в документ «Возврат от клиентов». Приёмка возвратного товара выглядит так:
- Кладовщик фотографирует маркировку товара
- Фотография передаётся в сервис из формы документа 1С
- Сервис возвращает распознанный DataMatrix
- Код автоматически подставляется в табличную часть документа
- 1С сверяет код с данными «Честного Знака»
Результат: вместо ручного набора ~30 символов кода — одно нажатие. Ошибки ввода сведены к нулю.
З.Ы. В расширении нет кнопки по загрузке распознанного штрихкода, но сделать это даже новичку будет несложно.
Итоги
DataMatrix Recognition API — минимальный, но рабочий инструмент для связки 1С и «Честного Знака»:
- Один эндпоинт
/recognize— ничего лишнего - Расширение с модулем
КоннекторHTTP— вызов из 1С в одну строку - Docker-образ — развёртывание без зависимости от ОС
- Бинаризация по Оцу — уверенное распознавание на неидеальных фото
- Реальный кейс — документ «Возврат от клиентов» в рабочей конфигурации
Репозиторий: https://github.com/rozer76/datamatrixRecognitionAPI
Описание: README.md
Вступайте в нашу телеграмм-группу Инфостарт