Je suis en train de construire un lecteur automatique de compteurs d'électricité et de gaz en utilisant OpenCV et Python. Je suis allé jusqu'à prendre des photos avec une webcam :
Je peux ensuite utiliser une transformation afine pour déformer l'image (une adaptation de cet exemple ) :
def unwarp_image(img):
rows,cols = img.shape[:2]
# Source points
left_top = 12
left_bottom = left_top+2
top_left = 24
top_right = 13
bottom = 47
right = 180
srcTri = np.array([(left_top,top_left),(right,top_right),(left_bottom,bottom)], np.float32)
# Corresponding Destination Points. Remember, both sets are of float32 type
dst_height=30
dstTri = np.array([(0,0),(cols-1,0),(0,dst_height)],np.float32)
# Affine Transformation
warp_mat = cv2.getAffineTransform(srcTri,dstTri) # Generating affine transform matrix of size 2x3
dst = cv2.warpAffine(img,warp_mat,(cols,dst_height)) # Now transform the image, notice dst_size=(cols,rows), not (rows,cols)
#cv2.imshow("crop_img", dst)
#cv2.waitKey(0)
return dst
ce qui me donne une image comme celle-ci :
Je dois encore extraire le texte à l'aide d'une sorte de routine OCR, mais j'aimerais d'abord automatiser la partie qui identifie les emplacements de pixels auxquels appliquer la transformation affine. Ainsi, si quelqu'un frappe la webcam, cela n'empêchera pas le logiciel de fonctionner.