opencv - recortar líneas escritas a mano (segmentación de línea)

Estoy tratando de construir un sistema de reconocimiento de escritura a mano usando python y opencv. El reconocimiento de los personajes no es el problema sino la segmentación. He exitosamente:

segmentado una palabra en caracteres individualessegmentado unoración única en palabras en el orden requerido.

Pero no pude segmentar diferentes líneas en el documento. Intenté ordenar los contornos (para evitar la segmentación de línea y usar solo la segmentación de palabras) pero no funcionó. He usado el siguiente código para segmentar palabras contenidas en un documento escrito a mano, pero devuelve las palabras fuera de orden (devuelve palabras ordenadas de izquierda a derecha):

import cv2
import numpy as np
#import image
image = cv2.imread('input.jpg')
#cv2.imshow('orig',image)
#cv2.waitKey(0)

#grayscale
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)
cv2.waitKey(0)

#binary
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
cv2.imshow('second',thresh)
cv2.waitKey(0)

#dilation
kernel = np.ones((5,5), np.uint8)
img_dilation = cv2.dilate(thresh, kernel, iterations=1)
cv2.imshow('dilated',img_dilation)
cv2.waitKey(0)

#find contours
im2,ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

#sort contours
sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0])

for i, ctr in enumerate(sorted_ctrs):
    # Get bounding box
    x, y, w, h = cv2.boundingRect(ctr)

    # Getting ROI
    roi = image[y:y+h, x:x+w]

    # show ROI
    cv2.imshow('segment no:'+str(i),roi)
    cv2.rectangle(image,(x,y),( x + w, y + h ),(90,0,255),2)
    cv2.waitKey(0)

cv2.imshow('marked areas',image)
cv2.waitKey(0)

Tenga en cuenta que puedo segmentar todas las palabras aquípero aparecen fuera de orden. ¿Hay alguna forma de ordenar estos contornos en orden de arriba a abajo?

O

¿segmentar la imagen en líneas separadas para que cada línea se pueda segmentar en palabras usando el código anterior?

Respuestas a la pregunta(1)

Su respuesta a la pregunta