Код: Выделить всё
import UIKit
import Vision
func convertCanvasToImage(view: UIView) -> UIImage {
let renderer = UIGraphicsImageRenderer(size: view.bounds.size)
return renderer.image { ctx in
view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
}
}
func runVisionRecognition(canvas: Canvas) {
NSLog("Start runVisionRecognition")
let uiImage = convertCanvasToImage(view: canvas)
guard let cgImage = uiImage.cgImage else { return }
let requestHandler = VNImageRequestHandler(cgImage: cgImage, options: [:])
let request = VNRecognizeTextRequest(completionHandler: recognizeTextHandler)
request.recognitionLevel = .accurate
request.recognitionLanguages = ["en-US"]
//request.minimumTextHeight = 0.1
request.usesLanguageCorrection = true
// request.maximumRecognitionCandidates = 10
do {
try requestHandler.perform([request])
} catch {
NSLog("Uh oh! \(error).")
}
}
func recognizeTextHandler(request: VNRequest, error: Error?) {
guard let observations =
request.results as? [VNRecognizedTextObservation] else {
NSLog("Whoops, observations like \(request.results)")
return
}
let recognizedStrings = observations.compactMap { observation in
return observation.topCandidates(1).first?.string
}
NSLog("Observation: \(observations)")
NSLog("Recognised Strings: \(recognizedStrings)")
}
Ниже приведены некоторые из них. примеры моего почерка на Холсте. NSLog возвращает «Наблюдение: [], Распознанные строки: []», но, как вы можете видеть, приложение «Фотографии», похоже, нормально распознает входные данные!
Вид моего приложения с буквами нарисовано на холсте.
Скриншот из приложения «Фото», показывающий четко читаемые буквы (как на английском, так и на японском языках).
Моя теория: что-то происходит ошибка между преобразованием Canvas в cgImage, но если вы посмотрите на первое изображение, верхнее «APPLE» — это преобразованное изображение из моего нижнего рисунка «APPLE».
Источник: https://stackoverflow.com/questions/779 ... om-cgimage
Мобильная версия