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) // 直接调用即可,无需接收返回值 } } } } }
额外注意事项
- 权限配置:在项目的
Info.plist中添加NSPhotoLibraryUsageDescription键,填写访问照片库的原因(比如“需要访问照片库以解析截图文本”),否则iOS 14+系统会禁止应用访问照片。 - 识别参数调整:如果追求识别速度,可以把
recognitionLevel改为.fast;不需要语言修正时,可关闭usesLanguageCorrection。 - 错误排查:代码中添加了多处打印日志,可根据输出定位问题(比如图片加载失败、识别请求执行错误等)。
内容的提问来源于stack exchange,提问作者Priyan Rai
相关产品推荐
相关产品推荐

