Tesseract-OCR-iOS を使う

【Swift】文字認識ライブラリ、TesseractOCR for iOSを試してみた - Qiita に使い方があるが、少し古かったので Xcode9.4, Swift4 で動かすための手順。

Podfile

pod 'TesseractOCRiOS', '4.0.0'

そして pod install、終わったら xcworkspace を開く。
Build すると warning が大量に出るが気にしてはならない...

traineddata の入手

https://github.com/tesseract-ocr/tessdata/tree/bf82613055ebc6e63d9e3b438a5c234bfd638c93 から必要なデータを入手。
注意点があって、https://github.com/tesseract-ocr/tessdata_best から DL したやつは動かない。
Using traineddata from tesseract-ocr · Issue #299 · gali8/Tesseract-OCR-iOS

今回は eng と jpn を DL した。

Project に traineddata を追加

https://github.com/gali8/Tesseract-OCR-iOS/wiki/Installation にあるように、このようなディレクトリ構成にする。

f:id:star__hoshi:20180819223629p:plain

注意点は、 tessdata をディレクトリにすること。 Group にしたら動いてくれなかった。

OCR する

Qiita には Bridging-header の話があるが、Swift 4 でははもう不要。

import UIKit
import TesseractOCR

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let tesseract: G8Tesseract = G8Tesseract(language: "eng+jpn")
        tesseract.delegate = self
        tesseract.image = UIImage(named: "ep.jpg")!
        tesseract.recognize()

        print(tesseract.recognizedText)
    }
}

extension ViewController: G8TesseractDelegate {
    func shouldCancelImageRecognitionForTesseract(tesseract: G8Tesseract!) -> Bool {
        return false // return true if you need to interrupt tesseract before it finishes
    }
}

結果

ポケモンGOのエーフィを読み込んだらこんな感じになった。

some("CPー889 丶\' 蓼蘭\n工一フイ \'\n92/92HP\n28.77kg @ Q9ーm\n一 重さ 工スバ一 高さ\n\n")

f:id:star__hoshi:20180819224115p:plain