Metadata-Version: 2.1
Name: libscanner-dmr
Version: 1.0.1
Summary: Чтение DataMatrix (ECC200, GS1, «Честный знак») с кадров камеры и конвейера — DataMatrix reader for industrial cameras
Keywords: datamatrix,data-matrix,barcode,gs1,ecc200,chestny-znak,marking,ocr,scanner
License: Proprietary
Classifier: License :: Other/Proprietary License
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: Image Recognition
Classifier: Topic :: Multimedia :: Graphics :: Capture
Classifier: Natural Language :: Russian
Project-URL: Homepage, https://libscanner.com
Project-URL: Documentation, https://libscanner.com/docs/datamatrix-gs1/?lang=python
Project-URL: Source, https://github.com/libscanner/datamatrix-reader
Requires-Python: >=3.9
Description-Content-Type: text/markdown

# dmr — чтение кодов DataMatrix из Python

Читает коды DataMatrix (ECC200, ГОСТ Р ИСО/МЭК 16022) с кадров, где на модуль
приходится порядка двух пикселей: производственный конвейер, камера, этикетка.

Документация: https://libscanner.com/docs/datamatrix-gs1/?lang=python

> **English.** A DataMatrix (ECC200, GS1) reader for Python that targets
> production-line frames with about two pixels per module. Install with
> `pip install libscanner-dmr`, import as `dmr`. Windows x64 and Linux
> (x86-64, ARM64, ARMv7, glibc 2.36+). 30-day free trial, then a license
> from https://libscanner.com/en/. Documentation: https://libscanner.com/en/docs/datamatrix-gs1/?lang=python

## Что внутри

- пакет `dmr` — обёртка на `ctypes`, без внешних зависимостей;
- собранная библиотека `dmr_c` (`dmr_c.dll` / `libdmr_c.so`) в `dmr/_lib/`;
- утилита командной строки `dmr` — после установки это команда окружения
  (и `python -m dmr`): `dmr снимок.png`, `dmr --license status`, справка —
  `dmr --help`.

Компилировать ничего не нужно: колесо уже содержит библиотеку под свою
платформу и годится для любого Python 3.9+.

## Установка

```sh
pip install libscanner-dmr
```

Пакет импортируется как `dmr`. Платформы: Windows x64, Linux x86-64, ARM64 и
ARMv7 (glibc 2.36 и новее: Debian 12, Ubuntu 23.04+, Raspberry Pi OS
Bookworm). То же колесо есть в разделе «Загрузки» личного кабинета:
`pip install libscanner_dmr-1.0.1-py3-none-<платформа>.whl`.

## Быстрый старт

```python
import dmr

img = dmr.Image("кадр.jpg", dmr.LoadAs.GRAY)   # сканеру цвет не нужен
scanner = dmr.Scanner()                         # поток кадров, умолчание
result = scanner.scan(img.view())
if result.ok:
    print(result.text.decode("utf-8"))
```

Кадр из чужого буфера — без копирования, видом на него (буфер обязан быть
жив на время вызова `scan()`):

```python
view = dmr.ImageView(buf, width, height, stride, dmr.PixelFormat.BGR8)
result = scanner.scan(view)
```

**Сканер создаётся один раз, а не на кадр**: подсказка размера символа
копится по кадрам и обязана их пережить.

`Code.text` — `bytes`, не `str`: разделитель GS1 остаётся байтом `0x1D` как
есть. Несколько кодов на кадре — `dmr.Scanner(dmr.Settings.multi(0))`;
пресеты — `dmr.Settings.stream()` (умолчание), `single()`, `multi(n)`.

## Лицензия

Пробный период — 30 дней с первого запуска на машине, без регистрации и без
сети.

Активация: вписать ключ из письма в текстовый файл `license.key` и положить
его в каталог `dmr/_lib/` установленного пакета — рядом с библиотекой и
утилитой (ключ у них общий). Каталог показывает

```sh
python -c "import dmr, os; print(os.path.join(os.path.dirname(dmr.__file__), '_lib'))"
```

Библиотека активирует ключ по сети сама при первом обращении. Из кода:

```python
import dmr.license as license

s = license.status()
if not s["can_scan"]:
    print(s["message"])
```

Без интернета: личный кабинет https://libscanner.com → Лицензии → «Активация без интернета».
