PIPELINE: PDF → JSON AI+CV
CHART_DIGITIZATION_ENGINE

OPT · Авто-дигитайзер номограмм

SmartSky OPT рассчитывает взлётно-посадочные характеристики ATR 72/42 по оцифрованным графикам из AFM/FCOM. Раньше это делалось вручную (DigitizeMe + правка JSON) — три стадии человеческого фактора. Здесь ИИ предлагает, а детерминированный слой проверяет каждую координату по реальным чернилам чарта.

ARCH: AI proposes CV verifies
E2E · TOD-wet
0.71%
векторный пайплайн vs прод · ×2.5 точнее CV
E2E · Landing
0.30%
посадочные карпеты, полностью из PDF
OAT-фан · on-ink
99.8%
самый трудный displaced-фан, взят
Багов в проде
18
опечаток оцифровки найдено авто
02

Проблема: ручная оцифровка

3 стадии человеческого фактора

Калибровка осей

Оператор кликает углы графика и вводит значения. Ошибка здесь масштабирует и сдвигает все точки систематически.

Клик по кривым

Точки ставятся вручную вдоль каждой кривой. Плотность — на глаз; на изгибах появляется кусочно-линейная погрешность.

Правка JSON

Ручное редактирование в редакторе: округление, переименование, клампинг. Здесь и рождаются опечатки-сдвиги разряда.

Результат: расхождения с эталонной методикой ATR SPS и опечатки, попадающие в боевое приложение. Цель — убрать человеческий фактор и измерять точность относительно печатного чарта (он и есть certified ground-truth).

03

Векторный пайплайн

нативная геометрия из PDF

Ключевой рычаг: примерно половина чартов в AFM/FCOM — векторные. Вместо распознавания пикселей вытягиваем нативные path-объекты прямо из PDF (pypdfium2 C-API), и кривые ложатся пиксель-в-пиксель на печатные чернила. Разделение «семейство кривых / сетка / текст» — почти бесплатное по структуре path. Калибровка осей — из текстового слоя PDF (тики), без OCR и без человека.

Нативные векторы на чернилах
NATIVE VECTOR OVERLAY · зелёные полилинии = path-объекты PDF, сидят точно на печатных кривых
Извлечение по панелям
PER-PANEL EXTRACT · цветовое разделение семейств кривых по 4 панелям карпета
TOD-wet
0.71%
vs CV-пайплайн 1.73% (×2.4)
Landing normal
0.30%
vs CV 6.36% (×21)
Источник
PDF
ноль OCR · ноль ручных данных
04

Displaced OAT-фан — самый трудный артефакт

взят: 99.8% на чернилах

Растровая панель температуры (OAT) нарисована повёрнутой, 11 кривых высоты сходятся в пучок — её не брали ни column-sweep, ни контур, ни полярная развёртка, ни коммерческий векторизатор. Решение: одним вызовом VLM (gpt-5.5) читаем 11 меток высот и якоря концов каждой кривой → затем динамическое программирование трассирует кривую между якорями по чернилам. Итог — медиана расстояния до чернил = 0 px на всех 11 кривых, E2E displaced-панели 6.93% → 1.99%.

VLM-якоря концов кривых
VLM ANCHORS · gpt-5.5 читает метки высот (−1000..8500) и якорит верх/низ каждой кривой
Якорная DP-трассировка фана
ANCHORED DP FIT · 11 упорядоченных непересекающихся кривых, 99.8% on-ink
05

End-to-end через движок

порт Geometry/Cardano на Python

Движок расчёта (Bézier + формула Кардано, цепочка панелей карпета) портирован на Python (engine.py) и сверяется с боевыми JSON приложения на сетке из тысяч комбинаций входов. Наложение извлечённых кривых на печатный чарт — визуальная проверка перед метрикой.

TOD wet overlay
12 TOD WET RWY · извлечённые кривые (наложение) поверх исходной номограммы
Landing distance overlay
5 LANDING DISTANCE · посадочная дистанция, наложение трасс на чернила
06

Поиск багов в проде

18 опечаток оцифровки · 15 чартов

Побочный, но ценный результат: тот же детектор находит опечатки оцифровки в боевых данных приложения — сдвиг разряда или запятой при ручной правке JSON. Метод — выброс «по индексу среди соседних кривых» (leave-one-out) + нарушение монотонности X, перекрёстно подтверждённый авто-извлечением и выходом за пределы оси чарта. Список (ATR72 + ATR42) оформлен в аргументированный отчёт.

Чарт (страница)Секция / криваяТекущееДолжно бытьТип
TakeOff/Main/TODDrytemp / 6000 · pt3 x26926.9decimal
Landing/Main/ALDDryDelayedwind / 20 · pt0 y180001800×10
Landing/Main/ALDDryNormalweight / 6 · pt4 y7250725×10 + dup-x
Landing/LDTA/LDTAGoodToMediumtemp / 6000 · pt1 x−87−8.7decimal
TakeOff/Obstacle/RemoteObstaclesIcingweight / 2240 · pt3 x100010000digit drop
ATR42 · TakeOff/RotationSpeedNormalCondweight / 1 · x120012000digit drop

… показаны 6 из 18 · полный отчёт: Ошибки_оцифровки_ATR.pdf (RU, с аргументацией по каждому)

07

Валидация по QRH — замена недостающего SPS

Эталонного экспорта SPS у нас нет. Зато QRH (ATR 72-500) содержит численные таблицы — их распарсили в lookup и сверили с выходом движка независимо от прода:

VMCA
<1kt
резид. 0.32 kt (прод) / 0.55 kt (авто)
LDTA · 8 страниц
<1.8m
посадочная дистанция, sub-метр
Stall → V-speeds
<0.55kt
V2/V1=VR через QRH takeoff speeds
REPO: rcai-opt локально · не пушится