在Windows shell中运行此命令:
djpeg -pnm -gray text.jpg | gocr -
按预期工作 - 图像由djpeg
可执行文件解码并传递给gocr
,后者对内容进行解码。
我想在Python下运行类似于此任务 - 将PIL图像管道传输到gocr
而不编写临时文件。例如,我可以指示PIL将图像以PPM格式(由gocr
可执行文件接受)写入stdin:
im.save(sys.stdin, 'PPM')
但是我用管道和子进程模块尝试的任何东西都没有给我带来欢乐。
有人可以建议如何通过Python运行此任务 - 将图像从PIL管道传输到可执行文件并从stdout获取文本输出吗?
答案 0 :(得分:1)
要写入gocr
子进程'stdin,您可以使用subprocess
模块:
from subprocess import Popen, PIPE
p = Popen(["gocr", "-"], stdin=PIPE)
im.save(p.stdin, 'PPM')
p.stdin.close()
p.wait()
如果im.save()
不能用于管道,则首先将图像转换为字节串:
from subprocess import Popen, PIPE
from StringIO import StringIO
buf = StringIO()
im.save(buf, 'PPM')
p = Popen(["gocr", "-"], stdin=PIPE)
p.communicate(input=buf.getvalue())