57

Apple のVision API ドキュメントを調べていると、テキスト検出に関連するいくつかのクラスが見つかりますUIImages

1)class VNDetectTextRectanglesRequest

2)class VNTextObservation

文字を検出できるように見えますが、文字を操作する方法がわかりません。文字が検出されたら、どのように解釈できるものに変換しNSLinguisticTaggerますか?

の概要をまとめた記事はこちらVision

読んでくれてありがとう。

4

8 に答える 8

13

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 部分に追加されたときに確認できます

于 2017-06-14T14:48:41.993 に答える
10

誰かがより良い解決策を持っている場合、これに関する私自身の進歩を追加します:

画面上に領域ボックスと文字ボックスを正常に描画しました。実際、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 から取得したリージョン ボックスと文字ボックスをフィードすることもできます。

于 2017-06-19T08:41:55.367 に答える