Разбор замера от 31 августа 2026 года: пять документов заказчика прочитаны дважды — привычным вариантом («Как сейчас») и вторым, PaddleOCR. Здесь сведены оба счёта — насколько верно прочитан сам текст и насколько верно значения легли в нужные ячейки, — скорость, вес и итоговое решение.
На документах заказчика PaddleOCR читает в 15 раз хуже по тексту (88,8% против 6,1%) и в 41 раз хуже по попаданию в ячейки (85,7% против 2,1%). Он быстрее на 38 секунд на всём наборе (12%), но за это приложение тяжелеет на 1325 МБ. Выигрыш в скорости не окупает потерю качества: из 47 товарных строк набора PaddleOCR не собрал верно ни одной, привычный вариант собрал 29.
Решение исполнено: второй вариант с рабочей страницы убран, приложение читает документы прежним движком, как и до замера. Все числа этого замера сохранены здесь — если выйдет новая модель для русского языка или в наборе появятся документы другого качества, замер повторим по той же методике.
«Верно прочитан текст» — значение эталона нашлось в распознанном где угодно на странице: движок правильно разобрал буквы и цифры. «Попало в нужную ячейку» — то же значение стоит там, где ему положено в товарной таблице. Разница между этими числами — потери на раскладке по ячейкам, а не на чтении. Оба счёта идут по одним правилам проекта, знаменатель один и тот же — 329 значений пяти эталонов, ничего из счёта не выбрасывается.
| Документ | Страниц | Значений в эталоне |
Верно прочитан текст | Попало в нужную ячейку | Время | |||
|---|---|---|---|---|---|---|---|---|
| Как сейчас | PaddleOCR | Как сейчас | PaddleOCR | Как сейчас | PaddleOCR | |||
| Пример 1 | 2 | 140 | 135 (96,4%) | 18 (12,9%) | 133 (95,0%) | 7 (5,0%) | 110 с | 82 с |
| Пример 2 | 2 | 35 | 20 (57,1%) | 0 (0,0%) | 16 (45,7%) | 0 (0,0%) | 44 с | 46 с |
| Пример 3 | 1 | 7 | 2 (28,6%) | 0 (0,0%) | 0 (0,0%) | 0 (0,0%) | 26 с | 35 с |
| Пример 4 | 1 | 21 | 16 (76,2%) | 0 (0,0%) | 16 (76,2%) | 0 (0,0%) | 36 с | 30 с |
| Пример 5 | 2 | 126 | 119 (94,4%) | 2 (1,6%) | 117 (92,9%) | 0 (0,0%) | 102 с | 86 с |
| Итого | 8 | 329 | 292 (88,8%) | 20 (6,1%) | 282 (85,7%) | 7 (2,1%) | 318 с | 280 с |
Привычный вариант точнее на всех пяти документах и в тексте, и в ячейках; документа, где PaddleOCR был бы точнее, в наборе нет. Потери на раскладке по ячейкам у привычного варианта — 10 значений из 329: прочитано верно, но попало не в ту клетку. У PaddleOCR таких 13 — но у него до раскладки почти ничего и не доходит.
Сумма по всем 47 товарным строкам набора: сколько значений каждого вида прочитано верно.
| Значение строки | Всего в эталонах | Как сейчас | PaddleOCR |
|---|---|---|---|
| наименование | 47 | 31 (66,0%) | 1 (2,1%) |
| количество | 47 | 43 (91,5%) | 18 (38,3%) |
| цена | 47 | 44 (93,6%) | 0 (0,0%) |
| стоимость без НДС | 47 | 43 (91,5%) | 1 (2,1%) |
| сумма НДС | 47 | 42 (89,4%) | 0 (0,0%) |
| стоимость с НДС | 47 | 42 (89,4%) | 0 (0,0%) |
| ставка НДС | 47 | 47 (100,0%) | 0 (0,0%) |
Ставку НДС привычный вариант находит во всех строках, тяжелее всего ему даётся наименование товара — 31 из 47: длинные названия шин с латиницей, цифрами и дробями он часто рвёт или путает буквы. У PaddleOCR единственное заметное число — «количество» (18 из 47): это однозначные числа вроде «4», они совпадают с эталоном и случайно, так что засчитывать это как умение читать нельзя.
Это тот самый документ, на котором перекос виден глазом
(1c6c0fac-f82a-4219-be4b-4918653068f4.pdf): фотография счёта-фактуры на две страницы, снятая под углом,
строки таблицы уходят вниз, вертикальные линии завалены. Оба варианта читали его после
одной и той же подготовки страницы — выпрямления и чистки.
| Что смотрим | Как сейчас | PaddleOCR |
|---|---|---|
| Время чтения двух страниц | 44 с | 46 с |
| Найдено кусков текста на странице | 79 | 38 |
| Ячеек с текстом | 220 | 228 |
| Знаков прочитано | 2980 | 2038 |
| Верно прочитан текст (из 35 значений) | 20 (57,1%) | 0 (0,0%) |
| Попало в нужную ячейку | 16 (45,7%) | 0 (0,0%) |
| Товарных строк найдено (из 5) | 5 | 0 |
| Значение строки | Всего | Как сейчас | PaddleOCR |
|---|---|---|---|
| наименование | 5 | 2 | 0 |
| количество | 5 | 5 | 0 |
| цена | 5 | 4 | 0 |
| стоимость без НДС | 5 | 1 | 0 |
| сумма НДС | 5 | 1 | 0 |
| стоимость с НДС | 5 | 2 | 0 |
| ставка НДС | 5 | 5 | 0 |
Что здесь видно. Привычный вариант на перекошенном листе держится хуже, чем на ровных сканах (57,1% текста против 96,4% на «Примере 1»), но структуру документа не теряет: находит все 5 товарных строк, во всех пяти верно читает количество и ставку НДС, а вот денежные колонки на наклонных строках разъезжаются — стоимость без НДС и сумму НДС он взял верно только в одной строке из пяти. Типичная ошибка — прилипший к числу мусор от соседней клетки: «21'666!67» вместо 21 666,67. PaddleOCR на этом же листе не прочитал ни одного значения из 35 и потерял все 5 товарных строк: вместо текста он выдаёт похожие на слова наборы букв («poaавeц» вместо «Продавец», «нивероагьный» вместо «Универсальный»).
Вывод по перекошенному листу тот же, что и по набору: замена движка эту проблему не решает. Перекос мешает обоим вариантам, но у привычного остаётся что править руками, а у второго — нечего.
| Что меряли | Как сейчас | PaddleOCR | Разница |
|---|---|---|---|
| Все восемь страниц набора | 318 с | 280 с | −38 с |
| Самый тяжёлый документ («Пример 1», 2 страницы) | 110 с | 82 с | −28 с |
| Перекошенный лист («Пример 2», 2 страницы) | 44 с | 46 с | +2 с |
| Вес библиотек приложения | 286 МБ | 1596 МБ | +1310 МБ |
| Вес моделей чтения | 0 МБ | 15 МБ | +15 МБ |
| Сборка приложения (установка + загрузка моделей) | 9 с | 91 с | +82 с |
| Первое чтение после запуска приложения | без задержки | +50 с | +50 с |
Разница по скорости неровная: на трёх документах PaddleOCR быстрее, на двух — медленнее, в том числе на перекошенном листе. Вес — цена постоянная: он платится при каждой сборке и каждом запуске, независимо от того, пользуются вторым вариантом или нет.
Полный текст по всем 2798 ячейкам обоих вариантов лежит на странице замера одной таблицей — её можно открыть в Excel.