近日在使用Tesseract4.0時踩了個坑,在識別一張質量較差的圖片時崩潰了。
原圖文字被切成多行,每一行文字調用一次Tesseract識別。在某一次崩了,偶發bug。
Release崩潰截圖如下:
進入Debug模式崩潰截圖如下:
調試發現,是在在某次調用"TessBaseAPIRecognize()" 時崩潰了。
百度搜索"讀取位置0x000000時發生訪問衝突",都說是空指針,野指針的問題。
但實際調試發現"handle"正常,並不是指針問題。
然後根據Release崩潰信息去看源碼,如圖:
斷言在"contains_unichar_id(unichar_id)",分析這個英文意思:包含字符id 。
這個字符的ID不存在?字符不就是在字庫裏嗎?
換個字庫試試看
github找到Tesseract4.0的字庫,如圖:
其中"4.0.0"與“master”版本字庫都是20多M大小(好像是一樣的)
"4.00"版本字庫30多M
我之前使用的字庫是20多M,那直接換這30多M的字庫試一下。
換掉字庫之後,運行竟然成功了。。。
識別結果如下:
發現第5行有個特殊字符,程序崩潰 。。。。。。
似乎問題就在字庫這了
這不是個坑貨嗎,字庫裏沒有的字就崩潰?
此問題純個人分析,如有不同看法,歡迎交流