我有一个名为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中检查它。有办法吗?
答案 0 :(得分:2)
如果我的问题正确无误-您只想在启动它的范围内处理由于识别而引起的错误,如果可以,则可以使用official documentation在下面修改您的代码。
// 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)
}
}
}