iOS 16でVisionKitに追加されたDataScannerViewControllerについて

VisionKit自体はiOS 13で追加されたフレームワークだが、当時はまだドキュメントをスキャンするためのクラス VNDocumentCameraViewController しか存在しなかった。(それでもだいぶ便利ではあったが)

Visionには毎年機能が追加されるのに、VisionKitはしばらく放置されていたが、iOS 16で久々に新機能が追加された。

文字とコード(QRコードやバーコード)のライブキャプチャ機能を提供するData Scanner機能だ。

要はこんな感じでリアルタイムでOCRしたりコード読み取りしたりする機能を、諸々のUI込みで提供してくれるようになった。

従来機能との違い

なお、文字検出/文字認識、バーコードやQRコードのスキャン機能自体はもっと昔から提供されていた:

コード読み取り

iOS 7から可能。以下にサンプルコードあり:

https://github.com/shu223/iOS7-Sampler#qr-code-reader

QRコードやバーコードの種類は大量にあり、以下を見れば読み取り可能なコードの種類がわかる:

文字検出

iOS 9から可能。以下にサンプルコードあり:

https://github.com/shu223/iOS-9-Sampler#text-detector

文字認識

iOS 13から可能。

https://note.com/shu223/n/ne29345adfa70#b00de45e-7049-4983-8ec1-61d3500263e3

ただし当時は日本語はサポートされていなかった。日本語がサポートされたのはiOS 16から。

DataScannerViewController は何をやってくれるのか

上述の通り、機能としてはコード読み取りも文字検出・認識も従来からあったわけだが、では新機能であるData Scanner (DataScannerViewController その他関連する新API)は何をやってくれるのか。

WWDC22の「Capture machine-readable codes and text with VisionKit」によると以下のUI/UXがDataScannerViewControllerによって提供される。

  • ライブカメラプレビューとガイダンス

"Capture machine-readable codes and text with VisionKit" より
  • アイテムのハイライト(黄色い枠の部分)

  • Tap-to-focus

  • Pinch-to-zoom

これらのものはいずれも従来は自前実装してきたもので、Appleが提供してくれるというのはかなり助かる。

とくにTap-to-focusやPinch-to-zoomはエンドユーザーだけでなく同じ開発チームの非エンジニアからしても「カメラ画面があるのであればできて当然」と考えるが、実はちゃんと自分でつくらないといけない、というストレスがあった。

UIだけでなく内部の実装としても、自前で作ろうするとこれだけのクラスを駆使して実装する必要がある。(撮影機能等はラップして使い回せるので、実際にはここはそれほど大変ではないが。)

後述する通りハイライトの見栄えもカスタマイズできるため、何かを読み取るための画面としては(自前実装よりも)優先的にこちらの利用を検討したいと思った。

最小実装

ここから先は

4,103字 / 8画像

文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/