running multiple tesseract instances in parallel using multiprocessing not returning any results

时间:2017-06-20 12:39:32

标签: python multiprocessing tesseract

I'm writing a python script where I use multiproccesing library to launch multiple tesseract instances in parallel. when I use multiple calls to tesseract but in sequence using loop ,it works .However ,when I try to parallel code everything looks fine but I'm not getting any results (I waited for 10 minutes ).

In my code I try to Ocrize multiple pdf pages after I split them from the original multi page PDF.

Here's my code :

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)))

2 个答案:

答案 0 :(得分:0)

您的代码正在启动Pool并在完成其工作之前退出。您需要致电closejoin

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)))

答案 1 :(得分:0)

据我所知,pytesseract将不允许多个进程(如果您具有四核并且您同时运行4个进程),那么tesseract将被阻塞,并且如果您对公司有此要求,您将拥有较高的cpu使用率和其他功能想要与谷歌视觉api一起使用,您必须设置多个服务器并进行套接字编程以从不同的服务器请求文本,以便并行进程的数量少于服务器同时运行不同进程的能力,例如四核。 2或3 或者其他明智的选择,您可以使用Google Vision API,它们具有很多服务器,并且输出也非常好 在tesseract中禁用多处理也将有所帮助。可以通过在环境中设置OMP_THREAD_LIMIT = 1来完成。但您不得在同一服务器上为tesseract运行多个进程

请参见https://github.com/tesseract-ocr/tesseract/issues/898#issuecomment-315202167

相关问题