투케이2K

396. (ios/swift5) VNRecognizeTextRequest 사용해 OCR 기능 수행 - 이미지 텍스트 변환 본문

IOS

396. (ios/swift5) VNRecognizeTextRequest 사용해 OCR 기능 수행 - 이미지 텍스트 변환

투케이2K 2023. 12. 19. 19:27

[개발 환경 설정]

개발 툴 : 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)
            }
        }

    }
 

[결과 출력]


반응형
Comments