Mathematica的TextRecognize达不到标准

C. *_* E. 13 wolfram-mathematica image-processing text-recognition

请看下面的截图,看看你能不能告诉我为什么这不起作用.TextRecognize参考页面上的示例看起来非常令人印象深刻,我不认为识别这样的单个字母应该是一个问题.我已经尝试调整字母大小以及使图像变得尖锐.

为了方便您自己尝试这个,我已经在这篇文章的底部包含了我使用的图像.您还可以通过在Google图片搜索中搜索"Wordfeud"来找到更多这样的内容.

Mathematica截图

Wordfeud板

Arn*_*ing 14

很酷的问题!

TextRecognize使用启发式方法识别英语中的整个单词.这是使得识别单个字母非常困难的问题

考虑以下思路:

s = Import["http://i.stack.imgur.com/JHYuh.png"];
p = ImagePartition[s, 32]
Run Code Online (Sandbox Code Playgroud)

现在选择字母组成英文单词'EXIT':

x = {p[[1, 13]], p[[6, 6]], p[[3, 13]], p[[1, 12]]}
Run Code Online (Sandbox Code Playgroud)

现在清理这些图像,如下:

d = ImageAssemble[ Map[ImageTake[#, {3, 27}, {2, 20}] &, x ]];
Run Code Online (Sandbox Code Playgroud)

然后返回字符串"EXIT":

TextRecognize[d]
Run Code Online (Sandbox Code Playgroud)

Mathematica图形


Arn*_*ing 11

这是一种与使用TextRecognize完全不同的方法,因此我将其作为单独的答案发布.它使用了与我如何找到Waldo with Mathematica相同的图像识别技术.

首先得到的难题:

wordfeud = Import["http://i.stack.imgur.com/JHYuh.png"]
Run Code Online (Sandbox Code Playgroud)

Mathematica图形

然后得到拼图的各个部分:

Grid[pieces = ImagePartition[s, 32]]
Run Code Online (Sandbox Code Playgroud)

Mathematica图形

让我们对字母E感兴趣:

LetterE = pieces[[4, 3]]
Run Code Online (Sandbox Code Playgroud)

Mathematica图形

获取相关图像:

correlation = 
 ImageCorrelate[wordfeud, Binarize[LetterE], 
 NormalizedSquaredEuclideanDistance]
Run Code Online (Sandbox Code Playgroud)

Mathematica图形

并突出显示匹配:

positions = Dilation[ColorNegate[Binarize[correlation, .1]], DiskMatrix[20]];
found = ImageMultiply[wordfeud, ImageAdd[ColorConvert[positions, "GrayLevel"], .5]]
Run Code Online (Sandbox Code Playgroud)

Mathematica图形

和以前一样,这需要对二值化相关图像进行一些调整,但除此之外,这应该有助于识别这个难题的点点滴滴.


Dav*_*idC 5

我认为您的图像质量可能会干扰.对图像进行二值化并没有帮助:识别是zilch.我还尝试了一个非常清晰的填字游戏解决方案的黑白图像.(见下文)同样,无论是常规格式还是二值格式都没有被识别出来.

填字游戏解决方案

所以我删除了黑色背景,只留下字母和薄黑框.再次,认可率约为0%.

当我从一些字母周围移除框架并对图像进行二值化时,唯一可识别的部分是那些除了字母之外什么都没有的区域.(见下文)

填字游戏2

请注意,在下面的输出中,正确识别了ANTS,TIRES和TEXAS(以及VECTORS),但几乎没有其他内容.

还要注意,即使字符串间隔很宽,mma也会将它们解释为单词,而不是单独的字母.注意"TEXAS"而不是"TEXA S".

TextRecognize[Binarize@img]

(* output *)
ANTS FFWWW FEEWF
E R o If IU I?
E A FI5F WWWFF 5
5552? L E F F
T s E NTT BT|
H0RWW@0WVlWF;EE F
5 W E   ; OCS
FOFT W W R AL%AE
A TT I T ? _
i iE@W'NF WG%S W
A A EW F I i
SWWTW W ALTFCWD N
H A V 5 A F F
PLATT EWWLIGHT
W N E T
HE TIRES C
TEXAS VECTORS
Run Code Online (Sandbox Code Playgroud)

我没有耐心彻底清理图像.手动重新键入文本要快得多.

结论:不要在mma中使用文本识别,除非你有一个绝对清晰的文字,对着一个颜色均匀,明亮,偏好白色的背景.

结果也因使用的文件格式而异.完全避免使用.pdf.



编辑

acl捕获并尝试识别最后5行(编辑上方).他的结果(在下面的评论中):大多是胡言乱语.

我决定这样做.但是,由于Prashant警告文本大小有所不同,我首先放大,以便文本出现(在我看来)约为20 pica.下面是我扫描的文字图片和TextRecognized.


文本2


这是unbinarized TextRecognize(大尺寸)的结果:

Gliii. Q lk-ii`t`*¥ if EY £\[CloseCurlyDoubleQuote]1\[Euro]'EE \
Di'¥C~E\"P ITF SKI' T»f}!E'!',IL:?E\[CloseCurlyDoubleQuote] I 2 VEEE5\
\[CloseCurlyQuote] LEP \"- \"VE
1. ur e=\\..r.1.»».»\\\\ rw r 1»»\\|a'*r | r .fm -»'-an \
\[OpenCurlyQuote] -.-rr -_.»~|-.'i~-.w~,.-- nv n.w~»-\
\[OpenCurlyDoubleQuote]~"
Run Code Online (Sandbox Code Playgroud)

现在,这是TextRecognize二值化图像的结果.原始图像来自Jing的.png.

I didn't have the patience to completely clean up the image. It would \
have been much faster to retype the
text by hand.
Conclusion: Don't use text recognition in mma unless you have \
absolutely clear text against an even-
colored, bright, preferrably white, background.
The results also varied depending on the file format used. Avoid .pdf \
altogether. 
Run Code Online (Sandbox Code Playgroud)