しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

CIDetectorで画像の文字を検知する

iOS9からCIDetectorで画像の文字認識ができるようになりました。
文字の内容までは読み取れないのですが、文字の位置・サイズを取得する事ができます。

使う為にCoreImageをプロジェクトに追加します。

f:id:llcc:20160511212157p:plain

featuresInImageメソッドを使う事で文字位置を取得できます。
結果にsubFeaturesというプロパティーがありますが、これは1文字1文字の位置になります。
featuresInImageのオプションにCIDetectorReturnSubFeaturesを追加すれば取得できます。

let image = UIImage(data: NSData(contentsOfURL: NSURL(string: "画像URL")!)!)!
let ciImage = CIImage(image: image)!

let detector = CIDetector(ofType: CIDetectorTypeText, context: nil, options: [CIDetectorReturnSubFeatures: true])
let features = detector.featuresInImage(ciImage, options: [CIDetectorReturnSubFeatures: true])

print(features) // 複数の文字列がある場合はfeaturesにも複数の要素がセットされる
(features as? [CITextFeature])?.forEach {
    print($0.bounds)
    print(($0.subFeatures as? [CITextFeature])?.map { $0.bounds })
}