下面的代码只能识别单词,但我不知道如何获得位置. 我能拿到短信但拿不到.

从:https://medium.com/@jakir/text-recognition-or-ocr-using-vision-framework-ios-swiftui-b9c5df36ec32

import SwiftUI
import Vision

struct ContentView: View {
    
    @State var recognizedText = ""
    
    var body: some View {
        VStack {
            Text("OCR using Vission")
                .font(.title)
            
            Image("quote")
                .resizable()
                .scaledToFit()
            
            Button("Recognize Text"){
                ocr()
            }
            
            TextEditor(text: $recognizedText)
        }
        .padding()
        
    }
    
    func ocr() {
        let image = UIImage(named: "quote")
        
        if let cgImage = image?.cgImage {
            
            // Request handler
            let handler = VNImageRequestHandler(cgImage: cgImage)
            
            let recognizeRequest = VNRecognizeTextRequest { (request, error) in
                
                // Parse the results as text
                guard let result = request.results as? [VNRecognizedTextObservation] else {
                    return
                }
                
                // Extract the data
                let stringArray = result.compactMap { result in
                    result.topCandidates(1).first?.string
                }
                
                // Update the UI
                DispatchQueue.main.async {
                    recognizedText = stringArray.joined(separator: "\n")
                }
            }
            
            // Process the request
            recognizeRequest.recognitionLevel = .accurate
            do {
                try handler.perform([recognizeRequest])
            } catch {
                print(error)
            }
            
        }
    }
}

我访问了许多网站,但没有发现任何结果.

推荐答案

This answer tells how to recognize for sentences boundingboxes but not words Extracting Word-Level BoundingBoxes with VNRecognizeTextRequest's .accurate in Vision Framework - SwiftUI

func recognizeText(image: UIImage, completion: @escaping([String], [CGRect]) -> Void) {
    var texts: [String] = []
    var positions: [CGRect] = []
    
    guard let cgImage = image.cgImage else { return }
    let request = VNRecognizeTextRequest { (request, error) in
      guard let observations = request.results as? [VNRecognizedTextObservation], error == nil else {
        print("Text recognition error: \(error?.localizedDescription ?? "Unknown error")")
        return
      }
      for observation in observations {
        guard let topCandidate = observation.topCandidates(1).first else { continue }
        texts.append(topCandidate.string)
        positions.append(observation.boundingBox)
      }
      DispatchQueue.main.async {
        print(texts)
        print(positions)
        completion(texts, positions)
      }
    }
    request.recognitionLevel = .accurate
    
    let handler = VNImageRequestHandler(cgImage: cgImage)
    try? handler.perform([request])
  }

Swift相关问答推荐

数据不会被ARC删除在swift'

运行异步任务串行运行

SwiftUI - NavigationLink(value:)和navigationDestination不工作

如何才能在同一线程上调用类中的每个方法,而不对每个调用使用同步块?

如何使用模型在 SwiftUI 的列表中进行搜索

如何从 Swift 中隐藏 Objective-C 类接口的一部分?

在 SwiftUI 中将属性显式设置为其默认值

在 SwiftUI 中的 ForEach 中使用 id 时如何为数组设置动画索引

`let case(value)` 和 `case(let value)` 之间的区别 (Swift)

如何更改 Picker 的边框 colored颜色

Swift:在子类中覆盖 == 导致仅在超类中调用 ==

使 struct 可散列?

Swift 中 NSFetchRequest 的多个 NSPredicates?

如何快速截取 UIView 的屏幕截图?

iOS/Swift:如何检测 UITextField 上的touch 动作

哪些版本的 Xcode 支持哪些版本的 Swift?

playground 导入:没有这样的模块Foo

如何在 Swift 中重写 setter

在 Swift 中从服务器播放视频文件

我可以让#selector 引用 Swift 中的闭包吗?