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 というクラスが当初から用意されている。
その後に文字を認識できる 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 によるそれと同等なのか?)
結論
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/