Notice
Recent Posts
Recent Comments
Link
투케이2K
396. (ios/swift5) VNRecognizeTextRequest 사용해 OCR 기능 수행 - 이미지 텍스트 변환 본문
[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT5
[소스 코드]
// -----------------------------------------------------------------------------------------
// MARK: - [테스트 메인 함수 정의 실시]
// -----------------------------------------------------------------------------------------
func testMain() {
S_Log._D_(description: "테스트 함수 시작 실시", data: nil)
/*
// -------------------------------------------------------
[요약 설명]
// -------------------------------------------------------
1. VisionKit : OCR (Image To Text) 작업 수행할 수 있는 프레임워크 입니다
// -------------------------------------------------------
2. 필요 import :
import VisionKit
import Vision
// -------------------------------------------------------
*/
// [로직 처리 실시]
DispatchQueue.main.async {
// [UIImage 선언] : [Image 파일은 PNG]
let image = UIImage(named: "koImage")
guard let cgImage = image?.cgImage else { // [cgImage 변환]
S_Log._D_(description: "[Error] : Get Image", data: nil)
return
}
// [OCR 요청 핸들러]
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
// [OCR 실제 수행 부분]
let request = VNRecognizeTextRequest{ [weak self]request, error in
guard let observations = request.results as? [VNRecognizedTextObservation], error == nil
else{
S_Log._D_(description: "[Error] : VNRecognizeTextRequest Error", data: nil)
return
}
// [스캔된 문자열 결합]
let text = observations.compactMap({
$0.topCandidates(1).first?.string
}).joined(separator: "\n")
S_Log._D_(description: "[OCR] : Get Text", data: [
"\(text)"
])
}
// [IOS 버전 분기 처리] : Language 설정
if #available(iOS 16.0, *) {
let revision3 = VNRecognizeTextRequestRevision3
request.revision = revision3
request.recognitionLevel = .accurate // [정확도 우선]
request.recognitionLanguages = ["ko-KR"]
request.usesLanguageCorrection = true
do {
var possibleLanguages: Array<String> = []
possibleLanguages = try request.supportedRecognitionLanguages()
S_Log._D_(description: "[Supported] : [Languages] : \(possibleLanguages)", data: nil)
} catch {
S_Log._D_(description: "[Catch] : [Languages] : \(error)", data: nil)
}
}
else {
request.recognitionLanguages = ["en-US"]
request.usesLanguageCorrection = true
}
// [OCR 수행 핸들러 요청]
do{
try handler.perform([request])
} catch {
S_Log._D_(description: "[Catch] : [Handler] : \(error)", data: nil)
}
}
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
Comments