<p>当我使用Python的Anaconda发行版时,在一个独立的<code>conda</code>环境上的测试中,OCR通过Python脚本在测试图像上成功地使用了<code>pytesseract</code>。在</p>
<p><strong>测试的先决条件</strong>:</p>
<ul>
<li>安装Anaconda并创建一个名为py3.7.4的env:<code>conda create --name py3.7.4</code></li>
<li>用<code>conda activate py3.7.4</code>激活env</li>
<li>使用<code>conda install -c conda-forge pytesseract</code>安装pytesseract</li>
<li>{create<cdg>文件夹名为jpg}>光学字符识别.jpg</em>带有以下示例图像:
<a href="https://i.stack.imgur.com/2JS4h.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/2JS4h.jpg" alt="enter image description here"/></a></li>
<li><p>在同一个<code>Test</code>文件夹中,还放置一个名为<code>ocr_test.py</code>的Python脚本,代码如下:</p>
<pre><code>import pytesseract
from PIL import Image
import argparse
parser = argparse.ArgumentParser(
description='perform OCR on image')
parser.add_argument("--path", "-p", help="path for image")
args = parser.parse_args()
print(pytesseract.image_to_string(Image.open(args.path)))
print("done")
</code></pre></li>
</ul>
<p>上面的代码段接受图像路径作为命令行参数。必须指定<code>--path</code>标志才能将图像路径作为参数传递。在</p>
<p>现在,在下面的C代码片段中,我们将:</p>
<ul>
<li>启动<code>cmd</code>shell</li>
<li>通过为<code>process.start()</code>方法指定<code>WorkingDirectory</code>参数,导航到工作目录<code>Test</code>文件夹。在</li>
<li>用<code>anaconda.bat</code>文件激活Anaconda(根据文件在计算机上的位置替换文件路径)</li>
<li>激活上述conda环境</li>
<li>调用Python脚本,将<code>imageFileName</code>作为参数传递。在</li>
</ul>
<p><strong>C代码片段:</strong></p>
^{pr2}$
<p>如果您已执行上述步骤,则在Visual Studio中执行C代码段时应收到以下输出:</p>
<p><strong>输出</strong>:</p>
<pre><code>Microsoft Windows [Version 10.0.18362.535]
(c) 2019 Microsoft Corporation. All rights reserved.
C:\xxxxxxx\Projects\Scripts>C:\Users\xxxxx\Anaconda3\Scripts\activate.bat
(base) C:\xxxxxx\Projects\Scripts>conda activate py3.7.4
(py3.7.4) C:\xxxxxxx\Projects\Scripts>python ocr_test.py --path ocr.JPG
Introduction
This is a test to see accuracy of Tesseract OCR
Test 1
Test 2
done
</code></pre>
<p><strong>注意:</strong>我无法用独立的Python发行版进行测试,但我相信它也可以很好地工作。关键是将图像文件路径作为参数传递给Python脚本。这样,Python也会对作为参数从C#传递的图像文件路径进行类似的处理。另外,使用<a href="https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#functions" rel="nofollow noreferrer">Image.open()</a>可以执行以下操作(来自文档):</p>
<blockquote>
<p>Opens and identifies the given image file. This is a lazy operation;
this function identifies the file, but the file remains open and the
actual image data is not read from the file until you try to process
the data</p>
</blockquote>