別のものが終了したときに関数を呼び出そうとしていますが、画像が0ピクセル以上でないことを示すエラーが発生し続けるので、関数の前のイメージが呼び出されます。私がOCRを呼び出す関数のどこにブレークポイントを追加すると、アプリケーションはこの時点で画面上に画像を表示しないので、私はその結論に至りました。別の終了時に関数を実行する、iOS、Swift
ここはocrからのエラーです。
NSAssert(widthOfImage> 0 & & heightOfImage> 0、@ "合格画像は空であってはならない - それは、少なくとも1ピクセル身長と幅でなければなりません")。
以下は、私がフローを見るためにプリントを置いた私のコンソールです。
トニー要求1 .... トニー3ランOCR .... トニー2ハンドル長方形.... トニー:ここでCorected画像...... (lldb)
以下は私のコードです。私は完了する必要があります機能は、画像が配置されるまで呼び出されていないことを確認しますか?
func startOCR() {
swiftOCRInstance.recognize(correctedImageView.image!) {recognizedString in
print(recognizedString)
self.classificationLabel.text = recognizedString
}
}
lazy var rectanglesRequest: VNDetectRectanglesRequest = {
print("Tony 1 Requested....")
return VNDetectRectanglesRequest(completionHandler: self.handleRectangles)
}()
func handleRectangles(request: VNRequest, error: Error?) {
guard let observations = request.results as? [VNRectangleObservation]
else { fatalError("unexpected result type from VNDetectRectanglesRequest") }
guard let detectedRectangle = observations.first else {
DispatchQueue.main.async {
self.classificationLabel.text = "No rectangles detected."
}
return
}
let imageSize = inputImage.extent.size
// Verify detected rectangle is valid.
let boundingBox = detectedRectangle.boundingBox.scaled(to: imageSize)
guard inputImage.extent.contains(boundingBox)
else { print("invalid detected rectangle"); return }
// Rectify the detected image and reduce it to inverted grayscale for applying model.
let topLeft = detectedRectangle.topLeft.scaled(to: imageSize)
let topRight = detectedRectangle.topRight.scaled(to: imageSize)
let bottomLeft = detectedRectangle.bottomLeft.scaled(to: imageSize)
let bottomRight = detectedRectangle.bottomRight.scaled(to: imageSize)
let correctedImage = inputImage
.cropped(to: boundingBox)
.applyingFilter("CIPerspectiveCorrection", parameters: [
"inputTopLeft": CIVector(cgPoint: topLeft),
"inputTopRight": CIVector(cgPoint: topRight),
"inputBottomLeft": CIVector(cgPoint: bottomLeft),
"inputBottomRight": CIVector(cgPoint: bottomRight)
])
// .applyingFilter("CIColorControls", parameters: [
// kCIInputSaturationKey: 0,
// kCIInputContrastKey: 32
// ])
// Show the pre-processed image
DispatchQueue.main.async {
self.correctedImageView.image = UIImage(ciImage: correctedImage)
if self.correctedImageView.image != nil {
print("Tony 2 Handle Rectangle....")
print("Tony: Corected image here......")
}else {
print("Tony: No corected image......")
}
}
print("Tony 3 run OCR....")
self.startOCR()
}
私はまた、「あなたはいつでもあなたのメインスレッドを使用する必要が
このエラーは、 'UIImage'ではなく、メインスレッドから' UIImageView'を使用するべきだと伝えています。 –