Исключение при обнаружении текста MLKit - [Not A Type _cfTypeID]: сообщение отправлено освобожденному экземпляру 0x106623e20 - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь создать приложение, которое распознает текст на фотографии, сделанной камерой устройства, с помощью функций обнаружения текста MLKit. Ниже приведен код в моем методе photoOutput, а также код метода, который он вызывает:

func photoOutput(_ output: AVCapturePhotoOutput,
                 didFinishProcessingPhoto photo: AVCapturePhoto,
                 error: Error?) {
    print("worked")
    PHPhotoLibrary.shared().performChanges( {
        let creationRequest = PHAssetCreationRequest.forAsset()
        creationRequest.addResource(with: PHAssetResourceType.photo, data: photo.fileDataRepresentation()!, options: nil)
    }, completionHandler: nil)

    let cgImage = photo.cgImageRepresentation()!.takeRetainedValue()
    print(cgImage)
    let orientation = photo.metadata[kCGImagePropertyOrientation as String] as! NSNumber
    let uiOrientation = UIImage.Orientation(rawValue: orientation.intValue)!
    let image = UIImage(cgImage: cgImage, scale: 1, orientation: uiOrientation)

    self.runTextRecognition(with: image)
}

func runTextRecognition(with image: UIImage) {
    let visionImage = VisionImage(image: image)
    textRecognizer.process(visionImage) { features, error in
        self.processResult(from: features, error: error)
    }
}

func processResult(from text: VisionText?, error: Error?) {
    guard error == nil, let text = text else {
        print("oops")
        return
    }

    print(text.text)

}

Всякий раз, когда я запускаю приложение и делаю фотографию, все работает нормально до строки textRecognizer.process (visionImage). Сообщение консоли - [Not A Type _cfTypeID]: сообщение отправлено освобожденному экземпляру 0x106623e20.

Любая помощь или предложения будут высоко оценены! Пожалуйста, дайте мне знать, если я должен включить дополнительную информацию.

1 Ответ

0 голосов
/ 02 ноября 2018

Неважно, я исправил это! Я должен был использовать .takeUnretainedValue () вместо .takeRetainedValue (), так как ARC выпускал для меня объект CGImage, прежде чем я его использовал.

...