CITextFeature の iOS 9β4 での変更点
iOS 9で追加されたテキスト領域の矩形を検出できる CITextFeature
に iOS 9 β4 で subFeatures
というプロパティが追加された。
@property (readonly) NSArray *subFeatures;
この subFeatures
プロパティは検出した領域内に含まれる各文字の領域を示す CITextFeature
を取得する事ができる。
subFeatures
の検出を有効にするには features の検出時に CIDetectorReturnSubFeatures
オプションを YES にする必要がある。
NSArray *features = [detector featuresInImage:image options:@{CIDetectorReturnSubFeatures: @YES}];
以下のようなコードで画像から features と subFeatures
を検出し矩形を取得する事ができる。
まず NSURL
から CIImage
を取得する。
次に CIAffineTransform
フィルタを用いて画像の上下を反転させている。検出されたテキスト領域を示す bounds の値が上下反転したものだったためこの処理を挟んでいる。
そして CIDetector
を作成し、最後に CIDetectorReturnSubFeatures
オプションを使って CIFeature
を取得している。
LogTextFeatures 関数では features と subFeatures
を階層化してログ表示するコードを実装している。
このコードを使って以下の画像のテキスト矩形を検出すると
以下のようにログ出力される。
subFeatures
はインデント付きで出力される。
{{61, 172}, {202, 45}} |-{{61, 172}, {38, 44}} |-{{104, 172}, {34, 44}} |-{{143, 171}, {38, 46}} |-{{188, 172}, {36, 44}} |-{{231, 172}, {32, 44}} {{62, 101}, {159.00000000000003, 44}} |-{{62, 111}, {30, 34}} |-{{96, 100}, {28, 45}} |-{{128, 111}, {27, 34}} |-{{158, 100}, {28, 45}} |-{{192, 111}, {29, 34}}
これらの値を元に features を赤色で、subFeatures
を青色で線を引いてオーバーレイすると以下のようになる。
各行の矩形が features として、各アルファベットの矩形が subFeatures
として取得されている事が分かる。
試しに以下の画像を使用してひらがな、カタカナ、漢字を検出してみた。
ログ出力は以下
{{43.109442019177621, 127.0003050117239}, {230.7636540404522, 55.999084964828342}} |-{{44, 129}, {45, 50}} |-{{105, 128}, {44, 53}} |-{{164, 129}, {45, 50}} |-{{224, 130}, {49, 49}}
検出結果を元に線をオーバーレイすると以下
残念ながらカタカナしか検出してくれなかった。
検出精度の向上も望まれるが、OCRによる文字認識がサポートされればかなり幅が広がりそう。
iOS 9 β4の時点では Swift + iOS Simulator の際に FKTextDetector not loaded
とコンソールに表示され CITextFeature
を取得する事が出来ない不具合がある様で、Swift の場合は実機で試す必要がある。
Objective-C の場合は Simulator と実機どちらでもOKだった。