TesseractOCR-iOS 無法找到 traineddata 文件問題 & Xcode Group 與 Folder Reference 的區別

TesseractOCR-iOS 無法找到 traineddata 文件問題 & Xcode Group 與 Folder Reference 的區別

    最近在玩兒 OCR,運行 APP 的時候遇到了一個找不到資源文件的問題,導致無法識別。Google 了一下,把資源文件的引入方式從 Group 改成 Folder Reference,問題就解決了。但是不知道爲什麼這樣能解決問題,就繼續查了一些資料,瞭解一下 Group 與 Folder Reference 的區別,總結如下。

    從設計目的上來看,Group 是想讓你用來引入代碼的,Folder Reference 是想讓你用來引入資源文件的。從處理邏輯上看,Xcode 會爲 Group 下面的每一個文件生成一個 Reference,並最終把 Group 下面的文件都平鋪放到 Product Bundle 的根目錄下面;而 Folder Reference 會爲文件夾生成一個 Reference,不管內部文件的變動,最終文件會保持目錄結構不變 copy 到 Product Bundle 下面;從特性上來看,用 Group 裏面的文件可以單獨控制,設置 target,設置是否被引入工程等等;Folder Reference 裏面的文件可以通過 File System 自由的改動(一些圖標通過 Finder 直接 copy 進去),要麼全部引入,要麼全部不引入。所以說,Group 適合用於引入代碼,Folder Reference 適合用於引入資源文件。

    回過頭說下最開始的問題,爲什麼 TesseractOCR-iOS 無法找到 traineddata 文件。是因爲我是通過 Group 引入,文件都會平鋪到 Product Bundle 根目錄下面,而內部初始化邏輯是在主 Bundle 下面的 tessdata 目錄下面找的,路徑不匹配,所以報了無法找到 traineddata 文件的錯誤。

...
        if (self.absoluteDataPath == nil) {
            // config Tesseract to search trainedData in tessdata folder of the application bundle;
            _absoluteDataPath = [NSBundle mainBundle].bundlePath;
        }

        setenv("TESSDATA_PREFIX", [_absoluteDataPath stringByAppendingString:@"/"].fileSystemRepresentation, 1);

...

    參考鏈接:Reference 1 , Reference 2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章