OCR无法识别Steam键(Dot Matrix OCR)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OCR无法识别Steam键(Dot Matrix OCR)相关的知识,希望对你有一定的参考价值。
我尝试在Steam键上使用OCR.space的免费ocr api,它有点失败。首先是原始图片尺寸,它没有给我输出; OCR跳过蒸汽钥匙。我已经尝试将图片大小调整为原始大小的50%,但输出不正确。它混合了数字和字母......
有人知道如何解决这个问题吗?这是原始图像(100%大小)
在ImageMagick中,您可以使用连接的组件处理图像,以隔离包含“Stream Key”文本的黑盒子。然后将其裁剪掉并翻转。然后将它复合回输入的同一区域。
以下在Unix语法中使用ImageMagick 6.9.10.11 Q16 Mac OSX:
输入:
首先,我必须将内部字段分隔符更改为新的行符号,以便数组的每个元素代表连接组件的完整输出行。然后我在周围添加一个黑色边框并修剪图像。这消除了图像底部的大黑色区域。我还应用了一些形态处理来去除细黑线,因此它们不会贡献我想要提取的黑色区域。然后我使用连通分量列出所有孤立区域并找到第一个(最大)黑色区域,即灰色(0)并提取其边界框。一旦我有了边界框,我就会找到左上角的偏移坐标。然后我处理图像以裁剪该边界框,反转其颜色并将其合成回原始图像。结果是您现在在白色背景上有所有黑色文本。
OLDIFS=$IFS
IFS=$'
'
arr=(`convert image.jpg
-bordercolor black -border 1 -fuzz 50% -trim +repage
-morphology close octagon:3 -type bilevel
+write temp.gif
-define connected-components:verbose=true
-connected-components 4
null: | sed 's/^[ ]*//' | tail -n +2` )
IFS=$OLDIFS
num=${#arr[*]}
for ((i=0; i<num; i++)); do
color=`echo ${arr[$i]} | cut -d -f5`
bbox=`echo ${arr[$i]} | cut -d -f2`
[ "$color" = "gray(0)" ] && break
done
echo "$bbox"
xoffset=`echo $bbox | cut -d+ -f2`
yoffset=`echo $bbox | cut -d+ -f3`
xoffset=$((xoffset+1))
yoffset=$((yoffset+1))
echo "$xoffset $yoffset"
convert image.jpg
( +clone -crop $bbox +repage -negate -contrast-stretch 0x90% )
-geometry +${xoffset}+${yoffset} -compose over -composite
result1.png
这是在将连接的组件应用到它之前的已处理图像。
如果我已保存连接组件的文本输出,它将如下所示:
0: 690x168+0+0 360.0,90.4 70542 gray(255)
296: 520x65+133+41 393.0,72.9 30527 gray(255)
295: 652x69+3+38 133.6,71.0 9992 gray(0)
541: 477x4+0+164 208.1,166.1 1186 gray(0)
371: 12x10+64+66 69.3,69.6 41 gray(255)
209: 7x11+249+12 252.2,17.5 40 gray(0)
207: 7x12+235+12 237.6,17.3 40 gray(0)
248: 11x8+264+15 268.9,18.3 38 gray(0)
245: 6x11+197+15 199.1,19.1 35 gray(0)
...
我们想要第三行,这是第一行包含灰色(0)。
结果:
那样有用吗?如果没有,那么你可以处理result1.png进行一些形态处理以加粗线条,使得点更加连接,然后添加一些不锐化的蒙版来锐化结果。
convert result1.png -morphology open diamond:1 -unsharp 0x1 result2.png
以上是关于OCR无法识别Steam键(Dot Matrix OCR)的主要内容,如果未能解决你的问题,请参考以下文章