from PIL import Image
import numpy as np, sys
im = Image.open(sys.argv[1]).convert('L')
a = np.array(im) < 110

def groups(ys):
    g = []
    for y in ys:
        if g and y - g[-1][-1] <= 2:
            g[-1].append(y)
        else:
            g.append([y])
    return g

def lines_at(x, y0, y1, w=6):
    col = a[y0:y1, x-w:x+w].mean(axis=1)
    ys = [y0+i for i, v in enumerate(col) if v > 0.5]
    return [round(float(np.mean(g)), 1) for g in groups(ys) if len(g) <= 5]

def head(x, y0, y1, w=9):
    col = a[y0:y1, x-w:x+w].mean(axis=1)
    ys = [y0+i for i, v in enumerate(col) if v > 0.6]
    return [(round(float(np.mean(g)), 1), len(g)) for g in groups(ys) if len(g) >= 6]

rows = {0: (80, 230), 1: (310, 440), 2: (540, 660), 3: (780, 900)}
for r, (y0, y1) in rows.items():
    print('ROW', r)
    for x in range(250, 1900, 20):
        print(x, lines_at(x, y0, y1), head(x, y0, y1))
