如何处理 Tesseract OCR 4.0 中的致命错误 iOS Swift
How to handle Fatal Error in Tesseract OCR 4.0 iOS Swift
我在我的应用程序中使用 Tesseract OCR。对于图库图片,如果我使用非常清晰的图片(例如这张图片),效果很好
5 text image
但对于某些图像,它会给我一个错误,并且应用程序在我的 iPhone 中崩溃。当我也使用相机图像时,应用程序几乎总是崩溃。现在我想知道如何处理 Swift 2.2 中的致命错误。我怎样才能显示图像不可读的警报而不是让我的应用程序崩溃。我试过 do {} 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([=12=]) })
myImageView.image = tesseract.image
convertCurrency(Float(trimmedText)!) //convert the tesseract text
}
}
SwiftSpinner.hide()
}
这是错误:
识别文本:
致命错误:在展开可选值
时意外发现 nil
我知道为什么会出现这个错误,因为我上面提到的行没有值。如果发生此错误而不是崩溃,我如何显示警告框。
P.S: I tried if ( ocrSample!.fixOrientation().g8_blackAndWhite() != nil ) {}
没用
UIImageView
上的 image
是一个 UIImage
可选的,这意味着它可以有一个值(包含图像),也可以是 nil
。
所以,当你说:
let ocrSample = myImageView.image
你的 ocrSample
现在是一个 UIImage
可选的,你必须在使用前打开它。
当你说:
tesseract.image = ocrSample!.fixOrientation().g8_blackAndWhite()
你是通过使用 !
强制解包你的 ocrSample
,这意味着你告诉编译器只解包并使用可选的,不管它是否是 nil
。当您尝试使用包含 nil
.
的解包可选时,这会导致崩溃
您可以使用 if let
解包 ocrSample
,如下所示:
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([=12=]) })
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
并且可以使用它开始。如果失败,那么您可以进行错误处理、显示警报视图以及您需要做的任何其他事情。
希望对你有所帮助。
我在我的应用程序中使用 Tesseract OCR。对于图库图片,如果我使用非常清晰的图片(例如这张图片),效果很好 5 text image
但对于某些图像,它会给我一个错误,并且应用程序在我的 iPhone 中崩溃。当我也使用相机图像时,应用程序几乎总是崩溃。现在我想知道如何处理 Swift 2.2 中的致命错误。我怎样才能显示图像不可读的警报而不是让我的应用程序崩溃。我试过 do {} 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([=12=]) })
myImageView.image = tesseract.image
convertCurrency(Float(trimmedText)!) //convert the tesseract text
}
}
SwiftSpinner.hide()
}
这是错误: 识别文本: 致命错误:在展开可选值
时意外发现 nil我知道为什么会出现这个错误,因为我上面提到的行没有值。如果发生此错误而不是崩溃,我如何显示警告框。
P.S: I tried if ( ocrSample!.fixOrientation().g8_blackAndWhite() != nil ) {}
没用
UIImageView
上的 image
是一个 UIImage
可选的,这意味着它可以有一个值(包含图像),也可以是 nil
。
所以,当你说:
let ocrSample = myImageView.image
你的 ocrSample
现在是一个 UIImage
可选的,你必须在使用前打开它。
当你说:
tesseract.image = ocrSample!.fixOrientation().g8_blackAndWhite()
你是通过使用 !
强制解包你的 ocrSample
,这意味着你告诉编译器只解包并使用可选的,不管它是否是 nil
。当您尝试使用包含 nil
.
您可以使用 if let
解包 ocrSample
,如下所示:
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([=12=]) })
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
并且可以使用它开始。如果失败,那么您可以进行错误处理、显示警报视图以及您需要做的任何其他事情。
希望对你有所帮助。