Swift 中图像中的文本识别

问题描述 投票:0回答:1

我是 Swift 新手,我正在尝试制作一个可以解析屏幕截图上的应用程序。到目前为止,我有以下代码,但我无法找到在我的

recognize
中调用
ContentView
函数的正确方法:

struct ContentView: View {
    @State var selectedItems: PhotosPickerItem?
    @State var selectedPhotoData: Data?
    
    func recogText(selData: Data?)
    {
        if let selData = selData, let image = UIImage(data: selData){
            guard let cgImage = image.cgImage else {return}
            let handler = VNImageRequestHandler(cgImage: cgImage)
            let request = VNDetectTextRectanglesRequest { request, error in
                guard let observations = request.results as? [VNRecognizedTextObservation],
                      error == nil else {return}
                let text = observations.compactMap({
                    $0.topCandidates(1).first?.string
                    }).joined(separator: ", ")
                print(text.count)
            }
            
            do {
                try handler.perform([request])
            }
            catch {
                print("Unable to perform the requests: \(error).")
            }
        }
    }
    
    var body: some View {
        VStack{
            
            //Icon
            mainImage()
            
            //Button
            PhotosPicker(selection: $selectedItems, matching: .images) {
                Label("Select a photo", systemImage: "photo")
            }
            .tint(.blue)
            .controlSize(.large)
            .buttonStyle(.borderedProminent)
            .onChange(of: selectedItems) { newItem in
                Task {
                    if let data = try? await newItem?.loadTransferable(type: Data.self) {
                        selectedPhotoData = data
                        let _ = recogText(selData: data)
                    }
                }
            }
        }
    }
}

期望打印解析后的文本,但未找到输出。

ios swift vision
1个回答
0
投票

您好,这里是一个示例函数,可能会对您有所帮助。当然,您必须用您的替换 TestImage。这可能对你有用,你需要导入 Vision

func recogText() {
    let textRecognitionRequest = VNRecognizeTextRequest { (request, error) in
        // Insert code to process the text recognition results here
        guard let observations = request.results as? [VNRecognizedTextObservation] else { return }

        for observation in observations {
            let topCandidate = observation.topCandidates(1).first
            if let recognizedText = topCandidate?.string {
                print(recognizedText)
            }
        }
    }
    
    textRecognitionRequest.recognitionLevel = .accurate
    
    let image = UIImage(named: "TestImage")
    let imageRequestHandler = VNImageRequestHandler(cgImage: (image?.cgImage!)!, options: [:])

    do {
        try imageRequestHandler.perform([textRecognitionRequest])
    } catch {
        print(error)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.