ios - 如何处理 Tesseract OCR 4.0 iOS Swift 中的 fatal error

标签 ios swift swift2

我在我的应用程序中使用 Tesseract OCR。对于画廊图像,如果我使用像这样的非常清晰的图像,则效果很好 5 text image

但对于某些图像,它会给我一个错误,并且应用程序在我的 iPhone 中崩溃。当我使用相机图像时,应用程序几乎总是崩溃。现在我想知道如何处理 Swift 2.2 中的 FATAL Error 。如何显示图像不可读的警报而不是使我的应用程序崩溃。我尝试过执行 {} catch {},但没有成功。

 func checkWithOCR() throws{

    let ocrSample = myImageView.image //image picker from gallery

    //FATAL ERROR ON THIS LINE.  
    tesseract.image = ocrSample!.fixOrientation().g8_blackAndWhite() 
        if(tesseract.recognize()){
            let recognizedText = tesseract.recognizedText
            if recognizedText != nil{
                print("recognizedText: \(recognizedText)")

                let trimmedText = String(recognizedText.characters.filter { !" \n\t\r,".characters.contains($0) })
                myImageView.image = tesseract.image
                convertCurrency(Float(trimmedText)!) //convert the tesseract text
            }
        }

    SwiftSpinner.hide()
}

错误如下: 识别文本: fatal error :在解包可选值时意外发现 nil

我知道为什么会发生这个错误,因为我上面提到的行没有值。如果发生此错误而不是崩溃,如何显示警告框。

P.S: I tried if ( ocrSample!.fixOrientation().g8_blackAndWhite() != nil ) {} 

没用

最佳答案

imageUIImageView上是 UIImage可选,这意味着它可以有一个值(包含图像),也可以是 nil .

所以,当你说:

let ocrSample = myImageView.image

您的ocrSample现在是UIImage可选,您必须在使用之前将其打开。

当你说:

tesseract.image = ocrSample!.fixOrientation().g8_blackAndWhite()

您正在强制打开您的 ocrSample通过使用! ,这意味着您告诉编译器仅解包并使用可选值,无论它是 nil或不。当您尝试使用该未包装的选项(如果它包含 nil )时,这会导致崩溃。 .

你能做的就是打开ocrSample使用if let像这样:

func checkWithOCR() throws{

    if let ocrSample = myImageView.image {
        tesseract.image = ocrSample.fixOrientation().g8_blackAndWhite() 
        if(tesseract.recognize()){
            let recognizedText = tesseract.recognizedText
            if recognizedText != nil{
                print("recognizedText: \(recognizedText)")

                let trimmedText = String(recognizedText.characters.filter { !" \n\t\r,".characters.contains($0) })
                myImageView.image = tesseract.image
                convertCurrency(Float(trimmedText)!) //convert the tesseract text
            }
        }
        SwiftSpinner.hide()
    } else {
        //No value could be found, do your error handling here
    }
}

这里:

if let ocrSample = myImageView.image

您正在尝试解开 myImageView.image 的值进入ocrSample ,如果成功,那么您肯定知道 ocrSample不是nil并可以继续使用它。如果失败,那么您可以进行错误处理、显示警报 View 以及您需要执行的任何其他操作。

希望对您有帮助。

关于ios - 如何处理 Tesseract OCR 4.0 iOS Swift 中的 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39078337/

相关文章:

ios - iOS-5 中 UIButton 标题中带下划线的多行

ios - 在单元测试中使用不可用的初始值设定项模拟 Cocoa 对象

ios - 数据类型为 double 的无后端列将导致 nil 值

ios - 组合:监听内部集合变化

swift - 如何为 RealmSwift 中的对象生成 ID?

ios - 如何打开/关闭 iPhone 相机闪光灯 swift 2?

ios - ALAsset 和 PHAsset 有什么区别?

ios - 如何使用 REST API 从 Parse.com 下载文件?

swift - 指定多态函数的类型以将其作为参数传递

swift - 使用嵌套函数作为 Action 的选择器 - swift