← Усі статті

Кроп аркуша УЗТ: проєкції, обережна перспектива й інші способи розрізати бланк

Польові нотатки: як у пілоті ріжемо фото бланка УЗТ на комірки — морфологія, проєкції, обережна перспектива — і які ще прийоми розрізки аркушів поширені в індустрії.

Кроп аркуша УЗТ: проєкції, обережна перспектива й інші способи розрізати бланк
Зміст

На польовій фотографії бланка ультразвукового контролю товщини (УЗТ) модель розпізнавання ще не бачить «цифру». Вона бачить стіл, рукав, відблиск, пластиковий кутник, косу сітку й чужу тінь. Поки аркуш не вирізано, не вирівняно й не розрізано на комірки, будь-яка мережа — компактна чи хмарна — відповідає на неправильне запитання.

У пілоті комп’ютерного зору (CV, Computer Vision) розрізка аркуша — окремий продуктовий контур, а не «препроцесинг на п’ять рядків». Нижче — як улаштована геометрія в нашому конвеєрі й які ще прийоми різати бланки трапляються поруч. Це продовження серії про розпізнавання бланків, не енциклопедія OpenCV і не обіцянка готового цеху. Репозиторій закритий; публічний контур — на сторінці портфоліо. Сирих бланків замовника немає.

Системний контур «геометрія → читання → людина» — у «чому однієї моделі мало». Що робимо з уже вирізаною коміркою заміру — у компактній CRNN, порожніх комірках і циклі якості. Спільний контрольний список «спочатку геометрія» для рукописних цифр — у шляху від згортки до трансформера. Тут — середній шар: як саме ріжемо аркуш.

Ключові висновки

Поганий кроп убиває добрий OCR. Помилка в десятих частках товщини часто народжується не в абетці мережі, а в тому, що в кадр потрапила лінія сітки або обрізана кома.

Ми ріжемо класичною геометрією, не «документним ШІ». Морфологія, проєкції, акуратна перспектива, відомий шаблон на 23 колонки. Без SIFT-гомографії й без детектора сторінки «з коробки» як першого кроку.

Перспективу не можна вмикати завжди. На плоских сканах і коротких останніх сторінках примусовий warp ламає колонтитул і шапку сильніше, ніж допомагає.

Карта комірок — контракт для всього контуру. Координати, запас під колонтитул, зсув стартової колонки сітки, локальні смуги по колонках за залишкового перекосу.

Інші прийоми розрізки не «гірші» — вони під інший вхід. Рівні ROI, шаблон із ключовими точками, нейромережевий чотирикутник сторінки, детектори таблиць, сегментація комірок — кожен закриває свій клас зйомки й ціну помилки.

Якість кропу — продуктові ворота. Поки людина не підтвердила обрізку в редакторі еталонів, аркуш не повинен тихо їхати в навчання й в облікову систему підприємства (ERP).

Чому розрізка аркуша — окрема ціна помилки

Оператор знімає чернетку телефоном біля об’єкта. Кадр майже ніколи не «як у лабораторії»: кут, складка файлу, темний стіл, відблиск лампи. Якщо вирізати «приблизно таблицю» й віддати хмарній моделі зору, вона часто все одно щось прочитає. Питання — куди це читання потрапить.

В обліку товщини хибна цифра дорожча за порожню комірку. Порожню можна повернути людині. Тиха підміна 12,3 на 12,8 іде в контур цілісності. Тому в пілоті спочатку будуємо карту комірок: де папір, де таблиця, де рядок, де колонка, де запас під «Сторінка X з Y». Лише потім — чорнило, повтор, закреслення, замірна голова.

Той самий порядок «структура → сенс» уже знайомий із завантаження документів у RAG. Домен інший, дисципліна та сама: не можна віддавати вниз по контуру те, що геометрія ще не зафіксувала.

Як улаштований конвеєр у пілоті

flowchart TB
  photo[Phone_photo]
  photo --> upright[Upright_and_EXIF]
  upright --> persp[Gated_perspective]
  persp --> deskew[Deskew]
  deskew --> trim[Paper_and_margin_trim]
  trim --> regions[Regions]
  regions --> grid[Row_and_column_grid]
  grid --> crops[Cell_crops]
  crops --> review[Crop_QA_gate]

Після орієнтації йде обережна перспектива, дрібний поворот за лініями Гоу, вирівнювання контрасту, обрізка полів паперу. Далі зони шапки й таблиці, горизонталі й вертикалі сітки, смуги рядків, 23 колонки, кропи. Колонтитул із номером сторінки читаємо окремо й склеюємо логічні багатосторінкові бланки вже після CV.

Орієнтацію вибираємо не «за EXIF віри заради». Пробуємо чотири повороти й оцінюємо: ключові слова шапки мають бути зверху, «сторінок» — знизу, QR — у верхній половині, горизонтальна сітка — сильною. Телефон часто віддає кадр боком; без цього кроку вся подальша геометрія шукає таблицю там, де її немає.

На виході — не «гарна картинка», а каталог прямокутників плюс прапорці якості. Редактор еталонів тримає вкладку обрізки: аркуш із кривою геометрією лишається в чернетці, поки людина не підтвердила карту комірок.

Морфологія й проєкції: чим ми ріжемо таблицю

Відомий бланк — головна перевага. Ми не шукаємо «таблицю взагалі у світі документів». Ми шукаємо цю сітку: адаптивний поріг, морфологічне відкриття довгими горизонтальними й вертикальними ядрами, маска ліній.

За маскою рахуємо одновимірні проєкції: скільки «чорнила сітки» в кожному стовпці й рядку пікселів. Піки проєкції — кандидати в лінії. Близькі піки зливаємо. Між горизонталями збираємо смуги рядків даних, друкований підзаголовок а, б, в, г відкидаємо, надто високі смуги ділимо. Для колонок потрібні ребра під 23 поля: дев’ять метаданих, далі блоки замірів I–III по чотири комірки й вузька IV. Якщо вертикалей надто багато або мало — падаємо на рівномірну сітку, але захищаємо зону розділу доступності, щоб не з’їхати на колонку.

Коли глобальна сітка все ще косить після перспективи, для замірних колонок беремо локальні горизонталі всередині смуги колонки. Інакше нижня кома або хвіст цифри лишаються за нижньою межею спільного ряду.

Окремо живе зсув стартової колонки сітки: якщо чорнило секції I систематично потрапляє не в очікуваний індекс, рухаємо початок сітки на одну колонку. Це евристика під живі фото, не теорема. Але без неї половина замірів читається з чужої комірки.

Ще один практичний шар — обрізка полів самого паперу до таблиці. За яскравістю рядків і стовпців відокремлюємо світлий аркуш від темного стола. Шукаємо довгу зовнішню горизонталь рамки бланка, щоб не зрізати дату й виконавця на першій сторінці. Якщо зверху видно смужку файлу з овальними «дірками» кріплення, її зрізаємо окремо: інакше шапка їде разом із пластиком. Знизу лишаємо запас під колонтитул навіть коли таблиця коротка — інакше логіка «Сторінка X з Y» втрачає опору.

Усе це виглядає як багато евристик — бо так і є. Прозорість важливіша за магію: кожен поріг можна показати на картинці проєкції й пояснити оператору, чому комірка поїхала. Коли евристика не сходиться, аркуш не «вгадуємо», а надсилаємо на вкладку обрізки.

Чому перспективу вмикаємо не завжди

Класична порада «завжди вирівнюй чотирикутник сторінки» на наших бланках ламається. Ми шукаємо чотирикутник за контуром сітки, розширюємо його вгору під шапку й униз під колонтитул, пробуємо warpPerspective у ландшафтний аспект. Застосовуємо лише якщо після проби зростає число читаних ліній сітки й метрики «трапеції» виглядають як справжній перспективний перекіс, а не як шум.

Плоский скан планшета часто вже досить рівний: примусовий warp стискає колонтитул і рве шапку. Коротка остання сторінка, де таблиця займає мало висоти, теж небезпечна: алгоритм може «натягнути» порожній низ. Пластиковий кутник файлу з овальними отворами дає хибну верхню межу — його треба зрізати окремо, інакше дата й виконавець їдуть разом зі смужкою файлу.

Дрібний поворот після перспективи робимо за медіанним кутом майже горизонтальних відрізків Гоу. Надто малий кут ігноруємо, надто великий не довіряємо: краще лишити легкий перекіс локальним смугам, ніж завернути аркуш на десять градусів за хибною лінією.

Інші поширені прийоми розрізки аркушів

Нижче — не рейтинг «краще/гірше», а карта, коли який прийом доречний поруч із нашим.

Рівні ROI й ручна сітка

У лабораторії аркуш кладуть у рамку, світять рівно, знімають зверху. Тоді достатньо зафіксувати прямокутники зон один раз і різати за частками ширини й висоти. Дешево, відтворювано, майже не ламається. На польовому телефоні рівні частки швидко їдуть: кут у два градуси вже зсуває правий нижній блок на чужі цифри.

Коли доречно: контрольована зйомка, один шаблон, дисципліна оператора зі штативом або рамкою.

Зіставлення з шаблоном і гомографія за ключовими точками

Беруть еталонний скан бланка, шукають особливості (ORB, SIFT і аналоги), будують гомографію на живе фото, переносять заздалегідь розмічені ROI. Сильна сторона — перенесення багатої розмітки. Слабка — відблиски, зім’ятий кут, рука оператора, брак «текстурних» якорів на порожніх полях. На наших щільних сітках лінії інколи дають стабільні точки, інколи — хибні відповідності за повторюваним візерунком таблиці.

Коли доречно: стабільний друк шаблону, мало деформацій паперу, можна вкласти розмітку еталона.

Нейромережевий чотирикутник сторінки

Детектори на кшталт родини DocTr і схожих моделей передбачають кути документа на фото. Добре знімають «документ на столі» в загальному випадку. Для бланка УЗТ сторінка — ще не таблиця: всередині потрібні шапка, QR, легенда, сітка, колонтитул. Чотирикутник паперу — лише перший кадр; без другої стадії розрізки комірок ви отримуєте гарно вирівняний, але все ще цілісний аркуш для OCR.

Коли доречно: сильний перспективний перекіс, різнорідні документи, немає жорсткого шаблону таблиці.

Детектори таблиць і рядків

Окремий клас моделей шукає таблиці, рядки, комірки як об’єкти: каскади, YOLO-подібні голови, трансформери таблиць. Вони сильні на бухгалтерських PDF і веб-знімках. На рукописній промисловій сітці з олівцевими лініями й дірками файлу часто спотикаються: «комірка» для детектора — не те саме, що інженерна комірка заміру із запасом під кому.

Коли доречно: друковані таблиці з чіткими правилами, слабка залежність від точної кількості колонок.

Семантична або інстанс-сегментація комірок

Піксельна маска «це комірка / це лінія / це фон» звучить привабливо. Ціна — розмітка й підтримка. Для одного відомого бланка часто дешевше вичавити класичну сітку й евристики, ніж розмічати тисячі масок. Сегментація окупається, коли шаблонів багато й лінії сітки візуально нестабільні.

Коли доречно: парк різних бланків, слабка повторюваність друку ліній, бюджет на розмітку.

Лише лінії Гоу без морфології

Гоу добре ловить окремі відрізки. Без морфологічного «витягування» сітки на шумному телефоні виходить каша коротких штрихів почерку й відблисків. Ми використовуємо Гоу точково — для оцінки орієнтації й дрібного вирівнювання кута — а каркас таблиці тримаємо на морфології й проєкціях.

Коли доречно: чисті скани з довгими неперервними лініями.

Цілий аркуш у мультимодальну модель

Віддати фото цілком моделі «зір + мова» (VLM, Vision-Language Model) і попросити JSON — найкоротший шлях до демо. У пілоті це поганий перший крок: порожні комірки згладжуються, геометрія губиться, вартість росте з кожним повним кадром. VLM лишаємо на вирізані зони й спірні місця після карти комірок — про це вже сказано в системній статті серії.

Коли доречно: рідкісні поля поза сіткою, пояснення, арбітраж після геометрії.

Типові помилки розрізки

Обрізати за зовнішнім контуром паперу й забути колонтитул. Номер сторінки зникає — багатосторінковий бланк не склеюється.

Увімкнути перспективу «на всяк випадок». Плоский скан стає хвилею; шапка й підвал страждають першими.

Різати комірки за глобальними рядами за залишкового перекосу. Нижній рядок правих колонок втрачає коми й хвости цифр.

Кропати разом із лінією сітки. OCR і класифікатор порожнечі починають «бачити чорнило» там, де його немає.

Учити замірку мережу на кривих кропах. Далі цикл якості лікуватиме симптоми моделі, а не геометрію.

Вважати рівні частки заміною детекції сітки. На телефоні це лотерея колонок.

Якість кропу як продуктові ворота

У пілоті є спокуса вважати геометрію «технічним боргом CV» і гнати все, що хоч якось схоже на таблицю, у навчання замірної мережі. Так ми вже обпікалися опосередковано: модель чесно вчиться на тому, що бачить. Якщо в кадрі лінія сітки, мережа вчиться малювати товщину з лінії. Якщо обрізана кома, мережа вчиться цілим числам там, де потрібні десяті.

Тому обрізку винесено в явний статус. Людина в редакторі еталонів дивиться карту комірок, править спірні прямокутники, підтверджує аркуш. Поки статус обрізки не зелений, аркуш не повинен ставати «ще однією партією» для голови заміру й не повинен тихо їхати у вивантаження. Це нудніше, ніж новий знімок ваг, і дешевше, ніж місяць суперечок «модель тупа».

Той самий принцип дисциплінує експерименти з циклу якості CRNN: перш ніж крутити епохи й абетку, переконайтеся, що вхідні кропи з одного геометричного контракту.

Евристика зсуву стартової колонки й захист зони розділу колонок усе ще підлаштовуються під кейси. Поріг чорнила для обрізки й для детектора заповненості розходяться — це борг узгодженості. Окрема сітка під сильно зім’ятий кут файлу без перспективи поки слабша, ніж хочеться. Нейромережевий детектор сторінки як опційний вхід перед нашою геометрією не впроваджено: спочатку вимірюємо, чи дає він приріст на коротких останніх сторінках без втрати колонтитула.

Редактор еталонів уже ганяє людей по вкладці обрізки, але автоматична оцінка «кроп досить добрий для навчання» ще не замінює око. Поки аркуш із поганою геометрією може поїхати в навчання, якщо дисципліна процесу ослабне.

Що зробити сьогодні

  1. Візьміть десять польових фото одного шаблону й розмітьте очима: де шапка, таблиця, колонтитул, чужий фон.
  2. Зніміть проєкції горизонталей і вертикалей після морфології — порівняйте з «голим» Гоу на тому самому кадрі.
  3. Проженіть перспективу з воротами й без: порахуйте, на скількох кадрах зник колонтитул.
  4. Зафіксуйте контракт комірок: число колонок, запас під підвал, заборона кропу на лінії сітки.
  5. Не відпускайте кропи в навчання замірної мережі, поки немає явного статусу якості обрізки.
  6. Запишіть один провальний кейс (кутник файлу, коротка остання сторінка, сильний відблиск) як регресійний тест, а не як «потім подивимось».

FAQ

Чи потрібна нейромережа, щоб вирізати відомий бланк УЗТ?

Не обов’язково як перший крок. За стабільного шаблону класична сітка часто дешевша й прозоріша. Мережа окупається, коли шаблонів багато або лінії сітки візуально нестабільні.

Чому не почати з DocTr і не віддати вирівняний аркуш в OCR?

Чотирикутник сторінки не дорівнює карті комірок. Без другої стадії розрізки ви отримуєте рівний цілісний аркуш і ті самі проблеми порожніх комірок і чужих полів.

Чи можна обійтися рівними частками ширини таблиці?

На штативі й рівному світлі — інколи так. На польовому телефоні малий кут уже змінює праві колонки. Для замірів товщини це неприйнятний ризик.

Що важливіше: ідеальна перспектива чи стабільні комірки?

Стабільні комірки. Легкий залишковий перекіс можна лікувати локальними смугами. Зламаний колонтитул і з’їхана колонка лікуються дорожче.

Як зрозуміти, що винен кроп, а не модель?

Дивіться кропи з помилками: лінія сітки в кадрі, обрізана кома, чужа цифра із сусідньої колонки. Якщо візуально кроп поганий — лагодити геометрію, а не нарощувати епохи.

Де в серії читати про читання вже вирізаної комірки?

Системний контур — одна модель на весь аркуш не тягне. Замір — компактна CRNN. Порожньо/повтор/закреслення — окремий класифікатор. Експерименти — цикл якості.

Коментарі

Завантаження коментарів…