OCR - tesseract - Извлечение чисел в табличных данных - PullRequest
1 голос
/ 06 января 2020

У меня есть несколько предварительно обработанных таблиц, которые похожи на эту:

enter image description here

Поработав некоторое время с параметрами, я Я обнаружил, что эта команда дает мне достойные результаты:

tesseract my_img.png out -c tessedit_char_whitelist="0123456789.E%-" --psm 6

К сожалению, недостаточно для моих нужд. Обратите внимание, что некоторые столбцы не разделены в выходных данных и отсутствует знак минус.

Что можно сделать, чтобы улучшить результаты?

0.015 1.0010.623 0.09911.850.0272 0.1% 4.0 0.03%
0.020 1.0030.304 0.3211404-0.2144 0.0% 4.0 0.02%
0.030 1.0080.370 0.26214.040.1718 0.1% 3.0 0.06%
0.040 1.0170.393 0.23814.150.1412 0.2% 0.5 0.10%
0.050 1.0300.408 0.22813.76-0.1346 0.4% 0.5 0.17%
0.060 1.9031.408 0.08518.32-0.0988 15.2% 40. 7.47%
0.080 1.7390.609 0.23516.120.2033 2.2% 35. 1.23%
0.1001.6480.242-0.00619.35 0.0590 0.4% 0.5 0.17%
0.150 1.4330.076 0.62913.32-0.3336 1.5% 2 0.75%
0.2001.4880.148 0.47913.91-0.2602 2.2% 0.5 0.96%
0.3001.664-0.303 0.31614.000.2044 2.8% 0.5 1.25%
0.400-1.883.-0.408 0.24213.70-0.1576 3.0% 0.5 1.40%
0.5002.022-0.516 0.18613.77.-0.1282 3.6% 0.5 1.60%
0.6001.9750.625 0.13413.80-0.0948 3.0% 0.5 1.38%
0.8002.0540.709 0.10113.64-0.0763 2.8% 0.5 1.34%
1.00 2.0250.790 0.07414.55-0.0629 2.6% 0.5 1.28%
1.50 1.8990.912 0.03313.360.0360 1.2% 5 0.72%
2.00 1.7950.889 0.049-13.34-0.0585 2.5% 0.5 1.35%
3.00 1.6250.866 0.06813.44-0.0887 6.3% 0.5 2.67%
4.00 1.4900.854 0.08113.71-0.1057 8.0% 0.5 3.34%
5.00 1.6160.713 0.14514.15--0.1708 7.7% 0.5 4.29%
6.00 1.4820.828 0.10014.26-0.1177 11.6% 0.5 4.23%
8.00 1.4660.820 0.11614.21-0.1362 9.0% 0.5 3.85%
10.00 1.433-0.938 0.08714.14-01117 8.2% 0.5 3.54%
15.00 14151.120 0.06013.92-0.0949 7.0 0.5 3.26%

1 Ответ

0 голосов
/ 09 января 2020

Я решил проблему с помощью opencv и pytesseract. Мое решение было вдохновлено этим ответом .

  1. Ключом к этой процедуре является наличие хорошо предварительно обработанных изображений. На изображении исходного вопроса вы можете увидеть небольшое пятно черного пикселя непосредственно перед последним столбцом справа. Эти пятна должны быть очищены! Поскольку у меня было только несколько таблиц с этой проблемой, я использовал GIMP.

  2. Обнаружение столбцов в таблице, применяя шаг расширения к инвертированному серому изображению. При выборе подходящего количества итераций столбцы приобретают форму, и также можно выделить знаки минуса.

enter image description here

с помощью cv2.boundingRect(cnt) можно обрезать отдельные столбцы и сохранять их на диск.

Применить pytesseract к различным столбцам с одинаковыми параметрами как в исходном вопросе.

Чтобы обнаружить знаки минуса: мне повезло, что только 4-й и 6-й столбцы представляли знаки минус, а в моих таблицах было ровно 25 строк (следовательно, высота каждой строки = высота изображения / 25). Итак, возьмите эти столбцы, обрежьте столбец, чтобы иметь ширину, скажем, 40px (это предположение, основанное на методе проб и ошибок). У урожая теперь должно быть несколько белых прямоугольников, где расположены знаки минус. Определите контуры этих прямоугольников. Вычислить центр тяжести каждого контура. Y-координата центроида используется для определения номера строки, в которой находится знак минус. Примените исправления (при необходимости) к результатам распознавания.

Объедините различные столбцы в файл CSV.

РЕДАКТИРОВАТЬ: с помощью этой процедуры I получил точность около 98,5%.

...