我正在使用 tesseract 和 opencv 作为不同程序的一部分来读取图像。我编写了这段代码来尝试解决我在主程序中遇到的错误。test() 函数将会被复制并粘贴到最终程序中。我遇到的问题是,tesseract 似乎会时不时地使 python 软件崩溃,并显示 Segmentation Fault 11。有时候这个示例代码可以完全运行,有时候则会在进行第56次迭代后失败(每次都是如此)。
我安装的所有东西都在 homebrew 中(我遵循了这些说明:https://code.google.com/p/python-tesseract/wiki/HowToCompilePythonTesseractForHomebrewMacMountainLion)。在寻找解决方案后,我尝试了这里的说明:http://www.janeriksolem.net/2011/12/installing-opencv-python-interface-on.html,我相当确定我做得没错,但仍然偶尔出现 seg 错误。
import time
import tesseract
import cv2
import cv2.cv as cv
import Image
def test():
image0=cv2.imread("test.jpg")
offset=20
height,width,channel = image0.shape
image1=cv2.copyMakeBorder(image0,offset,offset,offset,offset,cv2.BORDER_CONSTANT,value=(255,255,255))
api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_DEFAULT)
api.SetPageSegMode(tesseract.PSM_AUTO)
height1,width1,channel1=image1.shape
print image1.shape
print image1.dtype.itemsize
width_step = width*image1.dtype.itemsize
print width_step
#method 1
iplimage = cv.CreateImageHeader((width1,height1), cv.IPL_DEPTH_8U, channel1)
cv.SetData(iplimage, image1.tostring(),image1.dtype.itemsize * channel1 * (width1))
tesseract.SetCvImage(iplimage,api)
text=api.GetUTF8Text()
conf=api.MeanTextConf()
image=None
print "..............."
return (text, conf)
for x in xrange(200):
print "x: %d" %x
test()
print
time.sleep(1)
print "Done"