我正在编写一个python脚本,其中我使用多过程库并行启动多个tesseract实例。当我使用多个调用来镶嵌但按顺序使用循环时,它可以工作。但是,当我尝试并行编码时,一切看起来都很好,但我没有得到任何结果(我等了 10 分钟(。
在我的代码中,我尝试在将多个 pdf 页面从原始多页 PDF 中拆分后对其进行 Ocrize 处理。
这是我的代码:
def processPage(i):
nameJPG="converted-"+str(i)+".jpg"
nameHocr="converted-"+str(i)
p=subprocess.check_call(["tesseract",nameJPG,nameHocr,"-l","eng","hocr"])
print "tesseract did the job for the ",str(i+1),"page"
pool1=Pool(4)
pool1.map(processPage, range(len(pdf.pages)))
据我所知,如果你有四核并且同时运行 4 个进程,那么 tesseract 将被阻塞,你将有高 CPU 使用率和其他东西,如果你需要这个公司并且你不想使用 Google Vision API,你必须设置多个服务器并进行套接字编程以请求来自不同服务器的文本,以便数量并行进程小于服务器同时运行不同进程的能力,例如四核,它应该是 2 或 3或者其他明智的你可以点击谷歌视觉API,他们有很多服务器,输出也相当不错在 tesseract 中禁用多处理也会有所帮助 这可以通过在环境中设置 OMP_THREAD_LIMIT=1 来完成。但是您不能在同一服务器上运行多个进程以进行 tesseract
见 https://github.com/tesseract-ocr/tesseract/issues/898#issuecomment-315202167
您的代码正在启动Pool
并在完成其作业之前退出。您需要致电close
并join
.
pool1=Pool(4)
pool1.map(processPage, range(len(pdf.pages)))
pool1.close()
pool1.join()
或者,您可以等待其结果。
pool1=Pool(4)
print pool1.map(processPage, range(len(pdf.pages)))