다른 하나가 끝나면 함수를 호출하려고하는데 이미지가 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'가 아니라 'UIImageView'가 주 스레드에서 사용되어야한다는 오류가 표시됩니다. –