【Swift】文字認識ライブラリ、TesseractOCR for iOSを試してみた

#TesseractOCR for iOSとは
画像から文字を認識してくれるライブラリです。

こんな感じ
![11158157_830800740338331_858441146_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/46597/289e745c-3571-598d-0b7f-d77343ddb3c6.jpeg)

CocoaPodから利用できるのも美味しいです。
TesseractOCR for iOS
https://cocoapods.org/?q=tess

サンプルをgithubにあげましたので、参考にしてみてください。
https://github.com/ktanaka117/TesseractTestWithSwift

#導入手順
##1.プロジェクトファイルを作ってPodのインストール
Podfileの中身はこんな感じです。
`
platform :ios, '7.0'
pod 'TesseractOCRiOS', '~> 4.0.0'
`

##2.言語データファイルをプロジェクトにimportする
ここのリストから使用したい言語データファイルをダウンロードします。
https://code.google.com/p/tesseract-ocr/downloads/list

ダウンロードしたファイルの中にtessdataというディレクトリがあるはずなので、それを以下の画像のようにimportしてください。
![スクリーンショット 2015-04-23 15.31.55.png](https://qiita-image-store.s3.amazonaws.com/0/46597/b41c17de-47ae-22e7-e670-37921053ac64.png)

##3.文字の入ったテスト用の画像をimportする
今回はこの画像を使いました。
![test.png](https://qiita-image-store.s3.amazonaws.com/0/46597/d026c16e-e162-e64c-d7db-6d650a5d2b96.png)


##4.BridgingHeaderを用意する
BridgingHeaderファイルを作成して、そのファイルの中でG8Tesseract.hをimportします。
![スクリーンショット 2015-04-23 15.39.19.png](https://qiita-image-store.s3.amazonaws.com/0/46597/dff84acf-a604-f6c0-adc3-efe47f29f475.png)

##5.コードを書く
ViewController.swiftを書き換えていきます。

```swift
import UIKit

class ViewController: UIViewController, G8TesseractDelegate {
    
    var imageView: UIImageView = UIImageView()
    var label: UILabel = UILabel()
    
    let image = UIImage(named: "OCR-Sample-Japanese")
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        imageView.frame = CGRectMake(0, 0, self.view.frame.size.width, 300)
        imageView.contentMode = UIViewContentMode.ScaleAspectFit
        imageView.image = UIImage(named: "OCR-Sample-Japanese")
        
        label.frame = CGRectMake(0, 300,  self.view.frame.size.width, 200)
        label.lineBreakMode = NSLineBreakMode.ByCharWrapping
        label.numberOfLines = 0
        label.text = "Analyzing..."
        
        self.view.addSubview(imageView)
        self.view.addSubview(label)
        
        analyze()
    }
    
    func analyze() {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
            var tesseract = G8Tesseract(language: "jpn")
            tesseract.delegate = self
            tesseract.image = self.image
            tesseract.recognize()
        
            self.label.text = tesseract.recognizedText
        
            println(tesseract.recognizedText)
        })
    }
    
    func shouldCancelImageRecognitionForTesseract(tesseract: G8Tesseract!) -> Bool {
        return false; // return true if you need to interrupt tesseract before it finishes
    }
}
```

##6. 出来上がり
![11158157_830800740338331_858441146_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/46597/286fc310-3514-1ed3-4615-886d8157e272.jpeg)

##7.オマケ
tesseract.image = self.imageで文字認識させる画像をセットしていますが、ここに入れる画像をCIFilterなどで白黒にしたり、境界線を明確にしてやったりして補正すると以下の画像のように認識率が上がったりします。

![11180154_830800750338330_1805428783_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/46597/33dd1c4b-ed51-96b2-8e31-43823036c2d4.jpeg)

#参考サイト

iOSで手軽に文字認識
http://blog.isana.net/2014/08/ios.html

iOS で OCR
http://iti.hatenablog.jp/entry/2014/08/08/091819