Apple のVision API ドキュメントを調べていると、テキスト検出に関連するいくつかのクラスが見つかりますUIImages
。
1)class VNDetectTextRectanglesRequest
文字を検出できるように見えますが、文字を操作する方法がわかりません。文字が検出されたら、どのように解釈できるものに変換しNSLinguisticTagger
ますか?
の概要をまとめた記事はこちらVision
。
読んでくれてありがとう。
Apple のVision API ドキュメントを調べていると、テキスト検出に関連するいくつかのクラスが見つかりますUIImages
。
1)class VNDetectTextRectanglesRequest
文字を検出できるように見えますが、文字を操作する方法がわかりません。文字が検出されたら、どのように解釈できるものに変換しNSLinguisticTagger
ますか?
の概要をまとめた記事はこちらVision
。
読んでくれてありがとう。
SwiftOCR
SwiftOCR で小さなテキスト セットを処理できるようになりました。
https://github.com/garnele007/SwiftOCR
用途
https://github.com/Swift-AI/Swift-AI
これは、テキスト認識に NeuralNet-MNIST モデルを使用します。
TODO : VNTextObservation > SwiftOCR
接続したら、VNTextObservation を使用してその例を投稿します。
OpenCV + Tesseract OCR
OpenCV + Tesseract を使用しようとしましたが、コンパイル エラーが発生し、SwiftOCR が見つかりました。
関連項目 : Google ビジョン iOS
Google Vision Text Recognition に注意してください - Android SDK にはテキスト検出がありますが、iOS cocoapod もあります。最終的にiOSにテキスト認識を追加する必要があるため、注目してください.
https://developers.google.com/vision/text-overview
//訂正: 試してみましたが、SDK の Android バージョンのみがテキスト検出をサポートしています。
https://developers.google.com/vision/text-overview
リリースを購読する場合: https://libraries.io/cocoapods/GoogleMobileVision
SUBSCRIBE TO RELEASES をクリックすると、TextDetection が Cocoapod の iOS 部分に追加されたときに確認できます
誰かがより良い解決策を持っている場合、これに関する私自身の進歩を追加します:
画面上に領域ボックスと文字ボックスを正常に描画しました。実際、Apple の Vision API は非常に高性能です。ビデオの各フレームを画像に変換し、それを認識エンジンにフィードする必要があります。カメラからピクセル バッファを直接供給するよりもはるかに正確です。
if #available(iOS 11.0, *) {
guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {return}
var requestOptions:[VNImageOption : Any] = [:]
if let camData = CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix, nil) {
requestOptions = [.cameraIntrinsics:camData]
}
let imageRequestHandler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer,
orientation: 6,
options: requestOptions)
let request = VNDetectTextRectanglesRequest(completionHandler: { (request, _) in
guard let observations = request.results else {print("no result"); return}
let result = observations.map({$0 as? VNTextObservation})
DispatchQueue.main.async {
self.previewLayer.sublayers?.removeSubrange(1...)
for region in result {
guard let rg = region else {continue}
self.drawRegionBox(box: rg)
if let boxes = region?.characterBoxes {
for characterBox in boxes {
self.drawTextBox(box: characterBox)
}
}
}
}
})
request.reportCharacterBoxes = true
try? imageRequestHandler.perform([request])
}
}
今、私は実際にテキストを再調整しようとしています。Apple は組み込みの OCR モデルを提供していません。そのために CoreML を使用したいので、Tesseract でトレーニングされたデータ モデルを CoreML に変換しようとしています。
Tesseract モデルはhttps://github.com/tesseract-ocr/tessdataで見つけることができます。次のステップは、これらのタイプの入力をサポートし、.coreML ファイルを出力する coremltools コンバーターを作成することだと思います。
または、TesseractiOS に直接リンクして、Vision API から取得したリージョン ボックスと文字ボックスをフィードすることもできます。