Vision文字認識の細かい話

iOS/macOS/visionOSで利用できるVisionフレームワークの文字認識についての細かい話を書いていく。

基礎・概論的な内容はこちらにまとめた:

本記事では解説を省略する前提知識:

  • VNTextRecognitionRequest (文字認識)と VNDetectTextRectanglesRequest (文字領域検出)の違い、それぞれの実装方法

  • VNTextRecognitionRequest とVNRecognizedTextObservation、およびVNDetectTextRectanglesRequest と VNTextObservation の関係

  • VNTextRecognitionRequest や VNDetectTextRectanglesRequest のリビジョン。それらが今いくつで、それぞれどうアップデートされてきたか。

  • 文字認識には検出・認識の2段階を踏む方式と、これらを同時に行う(End-to-endと呼ばれる)方式がある

  • VisionKit の ImageAnalyzer を用いた文字認識の実装

  • ImageAnalyzer と ImageAnalysisInteraction を用いたUIKitとの連携

  • VisionとAVFoudationの連携。それはどういうケースか。


VNTextRecognitionRequest (文字認識)と VNDetectTextRectanglesRequest (文字領域検出)の文字領域検出結果は同じなのか?

どちらも文字領域を検出する

こちらの記事の冒頭に書いた通り、Visionには文字領域を検出する VNDetectTextRectanglesRequest というクラスが当初から用意されている。

またiOS 11で登場したVisionフレームワークでは VNDetectTextRectanglesRequest という文字領域を検出するクラスを当初から利用できましたが、これも文字の「領域」を検出する機能であり、文字の認識は行えませんでした。

その後に文字を認識できる VNTextRecognitionRequest が追加されたわけだが、文字「認識」結果を表す VNRecognizedTextObservation は、文字「領域検出」結果を表す VNTextObservation と同様に VNRectangleObservation を継承しており、

class VNRecognizedTextObservation : VNRectangleObservation
class VNTextObservation : VNRectangleObservation

どちらのクラスからも文字領域を表す矩形の情報を取得可能:

var bottomLeft: CGPoint
var bottomRight: CGPoint
var topLeft: CGPoint
var topRight: CGPoint
var boundingBox: CGRect

つまり、文字認識を行う VNTextRecognitionRequest を利用する場合でも、文字領域は検出できている。

ということは、VNTextRecognitionRequest は VNDetectTextRectanglesRequest の上位互換なのか?(VNTextRecognitionRequest による文字領域検出結果は、VNDetectTextRectanglesRequest によるそれと同等なのか?)

結論

ここから先は

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

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

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