ios - 如何判断图片中是否没有文字--MLKit VisionCloudTextRecognizer

标签 ios swift firebase firebase-mlkit text-recognition

我有一个名为 MLVision 的类来处理文本识别。

class MLVision {

    lazy var vision = Vision.vision()
    var textRecognizer: VisionTextRecognizer!
    var textArray = [] as Array<String>
    var lineText :String = ""

    func startRecognising(image : UIImage,completion: @escaping (_ result: [String]) -> ()){

        let visionImage = VisionImage(image: image)

        let options = VisionCloudTextRecognizerOptions()
        options.languageHints = ["en","hi"]
        textRecognizer = vision.cloudTextRecognizer(options: options)

        textRecognizer.process(visionImage, completion: { (features, error) in
            guard error == nil, let features = features else {
                print("No text Found!!")
                return
            }

            for block in features.blocks {
                for line in block.lines{


                    self.lineText = line.text
                    self.separate(lineText: self.lineText)

                }
            }
            completion(self.textArray)
        })
    }

    func separate(lineText : String){
        let separators = CharacterSet(charactersIn: (":)(,•/·]["))
        let ofWordsArray = lineText.components(separatedBy: separators)

        for word in ofWordsArray{

            let low = word.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
            if low != ""{
                textArray.append(low)
            }
        }
    }
}

这就是我称之为 Mlvision 类的 ViewController。

let mlVision = MLVision()

override func viewDidLoad() {
        super.viewDidLoad()
    mlVision.startRecognising(image: croppedImage!){ result in

                self.textArray = result
                self.searchIngredients(textArray: self.textArray)
        }
}

所以基本上我的应用程序识别文本然后将其分开并将其传递到数组中。

如果我检查没有文本的图像以显示警报,我想处理。 我知道 guard error == nil, let features = features else {return} 处理它,但我想从我的 ViewController 中检查它。有办法吗?

最佳答案

如果我答对了你的问题 - 你只想处理你开始它的范围内的识别错误,如果是这样你可以使用 Result 修改你的代码到下面.

// add your own Errors
enum RecognitionError: Error {
    case textNotFound
}

//modify `completion` closure by passing `Result` object instead of array
func startRecognising(image : UIImage,
                  completion: @escaping (_ result: Result<[String], RecognitionError>) -> ()){

    let visionImage = VisionImage(image: image)

    let options = VisionCloudTextRecognizerOptions()
    options.languageHints = ["en","hi"]
    textRecognizer = vision.cloudTextRecognizer(options: options)

    textRecognizer.process(visionImage, completion: { (features, error) in
        guard error == nil, let features = features else {
            print("No text Found!!")
            completion(.failure(.textNotFound))
            return
        }

        for block in features.blocks {
            for line in block.lines{


                self.lineText = line.text
                self.separate(lineText: self.lineText)

            }
        }
        completion(.success(self.textArray))
    })
}

并在您的 ViewController 中处理它:

override func viewDidLoad() {
    super.viewDidLoad()
    mlVision.startRecognising(image: croppedImage!){ result in
        switch result {

        case .success(let array):
            self.textArray = result
            self.searchIngredients(textArray: self.textArray)

        case .failure(let error):
            print(error)
        }
    }
}

关于ios - 如何判断图片中是否没有文字--MLKit VisionCloudTextRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735886/

相关文章:

android - 无法更改从 Firebase 控制台发送的 Firebase 云消息传递通知的默认图标

ios - 在 textview -xcode 中添加按钮

ios - 使用 Parse : kPFErrorPaymentDisabled 在 App Purchase 中进行沙盒测试

ios - 在 Objective-C 中以编程方式创建 UIView 并将其放入闭包中

ios - 在 Swift 中寻找像 Uber 这样的司机动画

firebase - Flutter Firebase (firebase_core) 不在 Android 上构建

ios - iOS:本地化/德语(德国),英语(世界其他地区)

ios - 在 Core Data 中存储用于绘图的数据集的最佳方式是什么?

ios - Swift - 在用户输入时获取键盘输入

ios - 将 Firebase 图像显示到数组中