我正在尝试使用Tesseract进行OCR整体结果似乎可以接受。图像是非常长的收据,我们正在使用扫描仪扫描,质量更好。唯一的问题是在收据中很少有字符在两行之间联合
请参阅随附的样本图片。您可能会在第一行中看到字符' p'在第二行中,字符M是联合的。这导致OCR出现问题。 那么,真正的问题是我们可以在每个文本行之间添加一条白线或正方形吗?
答案 0 :(得分:1)
您可以通过修剪图像来移除周围的白色并添加相同数量的黑色,从而在Imagemagick中为此图像执行此操作。然后将该图像平均到一列并寻找最亮的行。我从顶部和底部开始和停止4个像素,以避免这些区域中任何非常明亮的行。一旦我找到最亮的行,我在顶行和底部区域之间拼接成4行白色,然后划分该行。这不是最优雅的方式。但它显示了潜力。有人可能会将行值列表传递给AWK,并以比保存到数组和使用for循环更有效的方式搜索最大值。使用Imagemagick的Unix语法。
输入:
max=0
row=0
arr=()
arr=(`convert text.png -fuzz 50% -trim -background black -flatten -colorspace gray -scale 1x! -depth 8 txt:- | tail -n +2 | sed -n 's/^.*gray[(]\(.*\)[)]$/\1/p'`)
num=${#arr[*]}
#echo "${arr[*]}"
for ((i=4; i<num-4; i++)); do
val="${arr[$i]}"
max=`convert xc: -format "%[fx:$val>$max?$val:$max]" info:`
row=`convert xc: -format "%[fx:$val==$max?$i:$row]" info:`
#echo "$i $val $max $row"
done
convert text.png -gravity north -splice 0x4+0+$row text2.png
如果你想要更少的空间,你可以改为-splice 0x1 + 0 + $ row,但它不会有太大变化。它不会覆盖您的图像,而是在现有行之间插入白色。
但是通过上面的处理,你的OCR仍然可能无法识别p或M,因为p的底部被切断并附加到M上。
如果您有两行以上的文字,则必须在列中搜索大致均匀间隔的最大值。