Проблема с предварительной обработкой изображения накладной на доставку посылки перед началом распознавания - PullRequest
2 голосов
/ 15 января 2020

Я заинтересован в выполнении предварительной обработки накладных , прикрепленных к посылкам. Я пробовал различные алгоритмы OpenCV, но производительность не на должном уровне. Я пробовал подход с перспективным преобразованием, а также с грубым изменением линии, но результаты не являются удовлетворительными.

def four_point_transform(image, pts):
# obtain a consistent order of the points and unpack them
# individually
    rect = order_points(pts)
    (tl, tr, br, bl) = rect   
    widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))
    widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))
    maxWidth = max(int(widthA), int(widthB))


    heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))
    heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))
    maxHeight = max(int(heightA), int(heightB)) 

    dst = np.array([
    [0, 0],
    [maxWidth - 1, 0],
    [maxWidth - 1, maxHeight - 1],
    [0, maxHeight - 1]], dtype = "float32")

# compute the perspective transform matrix and then apply it
    M = cv2.getPerspectiveTransform(rect, dst)
    warped = cv2.warpPerspective(image, M, (maxWidth, maxHeight))

Приведенный выше код хорошо работает для изображений на плоской поверхности, но мне нужен обобщенный способ определения / обрезания моей области интереса в изображениях участков. На этот код есть ссылка по этой ссылке, https://www.pyimagesearch.com/2014/09/01/build-kick-ass-mobile-document-scanner-just-5-minutes/, поэтому он работает только для изображений, показанных в этом блоге. Поскольку алгоритм здесь основан на обнаружении четырех точек и углов, это не соответствует моей цели, потому что часто изображение на участках имеет морщины, а иногда, даже если на листах нет складок, в упаковке есть морщины. Я также попытался найти выход по этой ссылке, Автообрезка изображений для извлечения ROI внутренней черной границы, используя Python, но подход обнаружения границ не работает. Я попробовал обе техники, упомянутые в этой теме OpenCV.

Ниже приведены изображения, на которых я тестировал этот алгоритм, бланк доставки образца

Я чувствую, что тренировка Пользовательский детектор ROI, использующий dlib, или применяет пользовательский алгоритм обнаружения обученных объектов, используя Image.AI, будет работать, но я все же буду знать, что наилучшим выходом будет обучение пользовательской модели или есть какой-либо другой возможный способ для этого .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...