Я использую API обнаружения текста Google от MLKit для обнаружения текста по изображениям. Кажется, что он отлично работает на скриншотах, но когда я пытаюсь использовать его на изображениях, сделанных в приложении (с помощью AVFoundation) или на фотографиях, загруженных с камеры, он выдает небольшое количество, казалось бы, случайных символов.
Это мой код для запуска фактического обнаружения текста:
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
}
let detectedText = text.text
let okAlert = UIAlertAction(title: "OK", style: .default) { (action) in
// handle user input
}
let alert = UIAlertController(title: "Detected text", message: detectedText, preferredStyle: .alert)
alert.addAction(okAlert)
self.present(alert, animated: true) {
print("alert was presented")
}
}
Это мой код для использования изображений с камеры (работает для скриншотов, а не для изображений, снятых камерой):
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[.originalImage] as? UIImage {
self.runTextRecognition(with: image)
uploadView.image = image
} else {
print("error")
}
self.dismiss(animated: true, completion: nil)
}
Это мой код для использования фотографий, сделанных на камеру внутри приложения (никогда не работает, результаты всегда чепуха):
func photoOutput(_ output: AVCapturePhotoOutput,
didFinishProcessingPhoto photo: AVCapturePhoto,
error: Error?) {
PHPhotoLibrary.shared().performChanges( {
let creationRequest = PHAssetCreationRequest.forAsset()
creationRequest.addResource(with: PHAssetResourceType.photo, data: photo.fileDataRepresentation()!, options: nil)
}, completionHandler: nil)
let testImage = UIImage(data: photo.fileDataRepresentation()!)
self.runTextRecognition(with: testImage!)
}
И это то, что я сделал для использования тестовых изображений, которые я поместил в Assets.xcassets (это единственный, который последовательно работает хорошо):
let uiimage = UIImage(named: "testImage")
self.runTextRecognition(with: uiimage!)
Я думаю, что мои проблемы могут лежать в ориентации UIImage, но я не уверен. Любая помощь будет высоко ценится!