[swift] Firebase ML Kit를 사용하여 텍스트 감지 및 번역 기능 구현하기

Firebase ML Kit는 모바일 앱에 머신러닝 기능을 쉽게 추가할 수 있는 도구입니다. 이번 포스트에서는 Firebase ML Kit를 사용하여 텍스트 감지 및 번역 기능을 구현하는 방법에 대해 알아보겠습니다.

1. Firebase ML Kit 설정하기

Firebase console에서 프로젝트를 생성하고, ML Kit를 활성화해야 합니다. Firebase ML Kit는 Firebase SDK와 함께 사용되므로, Firebase 프로젝트에 필요한 기본 구성을 수행해야 합니다.

  1. Firebase 콘솔에서 프로젝트를 생성하고, 앱을 추가합니다.
  2. Firebase SDK를 프로젝트에 추가합니다.
  3. Firebase ML Kit API를 사용하기 위해 Firebase ML Kit 모듈도 추가합니다.

2. 텍스트 감지하기

Firebase ML Kit는 텍스트 감지를 위한 Vision API를 제공합니다. 텍스트 감지를 위해서는 이미지에서 텍스트 영역을 찾아야 합니다.

import FirebaseMLVision

// 이미지에서 텍스트 영역을 검출하는 함수
func detectTextInImage(image: UIImage, completion: @escaping (_ text: String?) -> Void) {
    let vision = Vision.vision()
    let textRecognizer = vision.onDeviceTextRecognizer()
    
    let visionImage = VisionImage(image: image)
    
    textRecognizer.process(visionImage) { result, error in
        guard error == nil, let result = result else {
            completion(nil)
            return
        }
        
        var detectedText = ""
        for block in result.blocks {
            for line in block.lines {
                for element in line.elements {
                    detectedText += element.text
                }
            }
        }
        
        completion(detectedText)
    }
}

위의 코드는 Firebase ML Kit의 Vision API를 사용하여 이미지에서 텍스트 영역을 검출하는 간단한 함수입니다. detectTextInImage 메서드는 인자로 이미지와 완료 핸들러를 받습니다. 검출된 텍스트를 완료 핸들러를 통해 반환합니다.

3. 텍스트 번역하기

Firebase ML Kit는 텍스트 번역을 위한 Natural Language API를 제공합니다. 텍스트 번역을 위해서는 감지된 텍스트를 번역할 언어로 설정해야 합니다.

import FirebaseMLNLLanguageID

// 텍스트를 번역하는 함수
func translateText(text: String, sourceLanguage: TranslateLanguage, targetLanguage: TranslateLanguage, completion: @escaping (_ translatedText: String?) -> Void) {
    let options = TranslateOptions(sourceLanguage: sourceLanguage, targetLanguage: targetLanguage)
    let translator = NaturalLanguage.naturalLanguage().translator(options: options)
    
    translator.downloadModelIfNeeded { error in
        guard error == nil else {
            completion(nil)
            return
        }
        
        translator.translate(text) { translatedText, error in
            guard error == nil else {
                completion(nil)
                return
            }
            
            completion(translatedText)
        }
    }
}

위의 코드는 Firebase ML Kit의 Natural Language API를 사용하여 텍스트를 번역하는 함수입니다. translateText 메서드는 번역할 텍스트와 소스 언어, 대상 언어, 완료 핸들러를 인자로 받습니다. 번역된 텍스트를 완료 핸들러를 통해 반환합니다.

4. 텍스트 감지 및 번역하기

이제 이미지에서 텍스트를 감지하고, 해당 텍스트를 번역하는 예제를 보겠습니다.

// 이미지에서 텍스트를 감지하고 번역하는 함수
func detectTextAndTranslate(image: UIImage, completion: @escaping (_ translatedText: String?) -> Void) {
    detectTextInImage(image: image) { detectedText in
        guard let text = detectedText else {
            completion(nil)
            return
        }
        
        translateText(text: text, sourceLanguage: .english, targetLanguage: .korean) { translatedText in
            completion(translatedText)
        }
    }
}

위의 코드는 detectTextInImage 함수와 translateText 함수를 활용하여 이미지에서 텍스트를 감지하고 번역하는 함수입니다. 인자로 이미지와 완료 핸들러를 받습니다. 번역된 텍스트를 완료 핸들러를 통해 반환합니다.

결론

이번 포스트에서는 Firebase ML Kit를 사용하여 텍스트 감지 및 번역 기능을 구현하는 방법에 대해 알아보았습니다. Firebase ML Kit을 활용하면 앱에 머신러닝 기능을 쉽게 추가할 수 있고, 텍스트 인식과 번역 기능을 쉽게 구현할 수 있습니다. 이를 통해 사용자에게 더욱 편리하고 다국어 지원을 제공할 수 있습니다.

참고 자료