You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift图像文本识别问题:调用recogText函数无输出求助

解决截图文本解析无输出的问题

核心问题

你误用了VNDetectTextRectanglesRequest——这个请求仅能检测文本的矩形区域,无法识别文本内容。要实现文本识别,必须替换为VNRecognizeTextRequest。

修正后的完整代码

struct ContentView: View {
    @State var selectedItems: PhotosPickerItem?
    @State var selectedPhotoData: Data?
    
    func recogText(selData: Data?) {
        guard let selData = selData, let image = UIImage(data: selData), let cgImage = image.cgImage else {
            print("无法加载图片")
            return
        }
        
        // 替换为文本识别专用请求
        let request = VNRecognizeTextRequest { request, error in
            guard let observations = request.results as? [VNRecognizedTextObservation], error == nil else {
                print("识别失败: \(error?.localizedDescription ?? "未知错误")")
                return
            }
            
            // 提取所有识别到的文本内容
            let text = observations.compactMap { observation in
                observation.topCandidates(1).first?.string
            }.joined(separator: "\n")
            
            print("识别到的文本:\n\(text)")
            print("文本长度: \(text.count)")
        }
        
        // 可选:配置识别参数
        request.recognitionLevel = .accurate // 精准识别(适合静态截图,速度稍慢)
        request.usesLanguageCorrection = true // 启用语言修正
        
        let handler = VNImageRequestHandler(cgImage: cgImage)
        do {
            try handler.perform([request])
        } catch {
            print("执行请求失败: \(error)")
        }
    }
    
    var body: some View {
        VStack{
            mainImage()
            
            PhotosPicker(selection: $selectedItems, matching: .images) {
                Label("选择照片", systemImage: "photo")
            }
            .tint(.blue)
            .controlSize(.large)
            .buttonStyle(.borderedProminent)
            .onChange(of: selectedItems) { newItem in
                Task {
                    guard let data = try? await newItem?.loadTransferable(type: Data.self) else {
                        print("无法加载图片数据")
                        return
                    }
                    selectedPhotoData = data
                    recogText(selData: data) // 直接调用即可,无需接收返回值
                }
            }
        }
    }
}

额外注意事项

  1. 权限配置:在项目的Info.plist中添加NSPhotoLibraryUsageDescription键,填写访问照片库的原因(比如“需要访问照片库以解析截图文本”),否则iOS 14+系统会禁止应用访问照片。
  2. 识别参数调整:如果追求识别速度,可以把recognitionLevel改为.fast;不需要语言修正时,可关闭usesLanguageCorrection。
  3. 错误排查:代码中添加了多处打印日志,可根据输出定位问题(比如图片加载失败、识别请求执行错误等)。

内容的提问来源于stack exchange,提问作者Priyan Rai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:50:25