Я создаю приложение OCR. Он извлекает рукописные символы из разделов в штучной упаковке в отсканированном или сфотографированном печатном виде и читает их с использованием CNN.
Он успешно извлекает символы с использованием контуров, но есть случаи, когда есть строки, которые читаются как контуры,Эти линии, кажется, являются результатом либо простого шума, либо оставшихся пикселей при кадрировании фрагмента в штучной упаковке. Секция в штучной упаковке обрезается с использованием контуров.
По сути, это работает, когда форма сканируется с помощью хорошего сканера, сохраненного в формате PNG. Иначе это не сработает. Мне нужно, чтобы он также учитывал файлы JPEG и дерьмовую камеру / сканеры.
Тогда возникает вопрос о том, какие возможные методы я могу использовать теоретически.
Я бы хотел либо удалитьстрок или заставьте код игнорировать его.
Я пробовал:
- "заполнить" обрезанный фрагмент в штучной упаковке отрицательным числом n . Так что вместо этого он удаляет n пикселей с каждой стороны. Это не может быть использовано слишком много, поскольку оно также съедает пиксели символа.
- использует морфологическую операцию «закрыть». Однако изменение размера ядра практически ничего не значит.
- реализация области сечения в штучной упаковке: отношение площади символа. Если извлеченное отношение площади контура к области в штучной упаковке не находится в диапазоне, оно игнорируется.
Вот как это выглядит:
![5](https://imgur.com/8GS7vur.jpg)
Серые части обозначают обнаруженные контуры. Числа указывают индекс контура, упорядоченный в порядке их обнаружения. Обратите внимание, что также обнаружены полосы линий. Я хочу избавиться от этого.
Помимо линий, мешающих модели и создающих излишнюю ерунду при попытке их интерпретировать, в некоторых случаях это также может вызывать эту ошибку:
ValueError: cannot reshape array of size 339 into shape (1,28,28,1)
Может быть, я начну расследовать это время.