最近使用 Tess4j 做一些 OCR圖片文字識別的代碼。
然后想當然的將這個 ITesseract ocr_robot = new Tesseract(); 作為了工具類做成了成員變量。
當多線程調用 doOCR 的時候就會報 Invalid memory access 的錯。
然后從網上查了好幾個都說是 setDatapath 的設置問題。
最后發現其實是 doOCR 源碼里面有個init方法。
然后,init 會重新初始化一些參數。 所以 不能用多線程調用同一個Tesseract 對象的doOCR方法。
這樣會導致內存混亂吧。需要把Tesseract代碼改成多實例。或者使用對象池。