我在我的应用程序中使用 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 ) {}
没用
最佳答案
image
在UIImageView
上是 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/