菜鸟教程小白 发表于 2022-12-12 16:38:50

iOS .Tesseract OCR 为什么识别如此纯粹。发动机原理


                                            <p><p>我有一个关于 Tesseract OCR 原理的问题。据我了解,在形状检测之后,符号(它们的形式)被缩放(调整大小)以具有一些特定的字体大小。
这种字体大小是基于经过训练的数据。基本上,训练集定义了符号(它们的几何形状、形状),也许是它们的表示。</p>

<p>我在 iOS 平台上使用 Tesseract 3.01(最新)版本。
我查看了 Tesseract 常见问题解答,查看了论坛,但我不明白为什么对于某些图像我的识别质量低。</p>

<p>据说字体应该大于12pt,图像应该有超过300 DPI。我做了所有必要的预处理,例如模糊(如果需要)、对比度增强。
我什至在 Tesseract OCR 中使用了其他引擎——它被称为 CUBE。 </p>

<p>但是对于某些图像(尽管它们更大 MIN(width, height) >1000 - 我为 tesseract 重新缩放它们,我得到了不好的识别结果</p>

<p> <a href="http://goo.gl/l9uJMe" rel="noreferrer noopener nofollow">http://goo.gl/l9uJMe</a> </p>

<p>但在其他图像集上效果更好:</p>

<p> <a href="http://goo.gl/cwA9DC" rel="noreferrer noopener nofollow">http://goo.gl/cwA9DC</a> </p>

<p>那些较小的图像我不会调整它们的大小,(只是转换为灰度模式)。 </p>

<p>如果我写的关于引擎的内容是正确的。 </p>

<p>假设训练集基于大小为 14pt 的字体。图片中的符号被调整到某个特定的大小,我看不出在这种情况下它们没有被识别的任何原因。</p>

<p>我还尝试了自定义词典,以惩罚非词典单词 - 并没有给识别带来太多好处。</p>

<pre><code>tesseract = new tesseract::TessBaseAPI();

GenericVector&lt;STRING&gt; variables_name(1),variables_value(1);
variables_name.push_back(&#34;user_words_suffix&#34;);
variables_value.push_back(&#34;user-words&#34;);

int retVal = tesseract-&gt;Init(, NULL,tesseract::OEM_TESSERACT_ONLY, NULL, 0, &amp;variables_name, &amp;variables_value, false);
ok |= retVal == 0;
ok |= tesseract-&gt;SetVariable(&#34;language_model_penalty_non_dict_word&#34;, &#34;0.2&#34;);
ok |= tesseract-&gt;SetVariable(&#34;language_model_penalty_non_freq_dict_word&#34;, &#34;0.2&#34;);

if (!ok)
{
    NSLog(@&#34;Error initializing tesseract!&#34;);
}
</code></pre>

<p>所以我的问题是我应该用另一种字体训练 tesseract 吗? </p>

<p>而且,老实说,我为什么要训练它?在来自 Internet 或 PC(Mac) 的默认训练数据文本上,我得到了很好的识别。</p>

<p>我还检查了原始 tesseract 英语训练数据,它有 38 个 tiff 文件,属于以下系列:
1) 里亚尔
2) 绿地
3)投石机
4次
5) 乔治亚州
6 ) 类(class)</p>

<p>图片中的字体似乎不属于这个集合。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在您的情况下,图像的大小不是问题。正如我从您所附的图片中看到的那样(我很惊讶之前没有人提到它),问题是您得到不良结果的图片上的文本<strong>没有放在直线上</strong>。</strong>。</strong> p>

<p>Tesseract 在 OCR 过程的早期阶段所做的事情之一是检测图像布局并提取整行文本。</p>

<p>这张图片是说明这部分过程的最佳示例:</p>

<p> <img src="/image/OAHax.png" alt="Tesseract lines extraction"/> </p>

<p>如您所见 <a href="https://code.google.com/p/tesseract-ocr/wiki/ImproveQuality#Orientation_/_Skew" rel="noreferrer noopener nofollow">the engine is expecting the text to be perpendicular to the edge of the image</a> .</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS .Tesseract OCR 为什么识别如此纯粹。发动机原理,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/20115382/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/20115382/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS .Tesseract OCR 为什么识别如此纯粹。发动机原理