[swift] Firebase ML Kit를 이용한 이미지 인식 기능 구현하기

Firebase ML Kit은 개발자들이 머신러닝을 쉽게 활용할 수 있도록 도와주는 도구입니다. 이번 튜토리얼에서는 Firebase ML Kit를 사용하여 이미지 인식 기능을 구현하는 방법에 대해 알아보겠습니다.

준비물

1. Firebase 프로젝트 설정하기

Firebase 콘솔에 접속하여 새 프로젝트를 생성하고, 프로젝트에 iOS 앱을 추가합니다. Firebase SDK를 다운로드하고, 앱에 SDK를 연결하는 작업을 완료합니다.

2. ML Kit 라이브러리 추가하기

Firebase ML Kit를 사용하기 위해서는 ML Vision 라이브러리를 추가해야 합니다. Xcode에서 프로젝트를 열고, Cocoapods를 이용하여 ML Vision 라이브러리를 설치합니다. Podfile에 다음 코드를 추가한 후, 터미널에서 pod install 명령어를 실행합니다. 설치가 완료되면 .xcworkspace 파일을 열어서 작업을 이어갑니다.

pod 'Firebase/MLVision'

3. 이미지 인식 기능 구현하기

3.1. 이미지 선택 기능 추가하기

이미지를 인식하기 위해서는 먼저 사용자가 이미지를 선택할 수 있는 기능이 필요합니다. Xcode 프로젝트에서 이미지를 선택할 수 있는 화면을 구현하고, 선택된 이미지를 Firebase 서버로 업로드합니다.

import UIKit
import FirebaseMLVision

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    let imagePickerController = UIImagePickerController()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 이미지 선택 기능을 사용할 수 있는 UIImagePickerController 설정
        setupImagePickerController()
    }
    
    func setupImagePickerController() {
        imagePickerController.delegate = self
        imagePickerController.sourceType = .photoLibrary
        imagePickerController.allowsEditing = false
    }
    
    @IBAction func chooseImageTapped(_ sender: UIButton) {
        present(imagePickerController, animated: true, completion: nil)
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            // Firebase 서버로 이미지 업로드
            uploadImage(selectedImage)
        }
        
        picker.dismiss(animated: true, completion: nil)
    }
    
    func uploadImage(_ image: UIImage) {
        // 이미지 업로드 로직 작성
    }
}

3.2. 이미지 인식 기능 추가하기

Firebase의 ML Vision 라이브러리를 이용하여 이미지 인식 기능을 추가해보겠습니다. 이미지 업로드가 완료된 후에 다음 코드를 추가하여 이미지 인식을 수행합니다.

// 이미지를 Firebase 서버로 업로드 한 후
// VisionImage 객체를 생성하고, 이미지를 인식하는 기능을 추가합니다.
func uploadImage(_ image: UIImage) {
    guard let imageData = image.jpegData(compressionQuality: 0.8) else { return }
    
    let visionImage = VisionImage(image: image)
    
    let labelDetector = Vision.vision().labelDetector()
    labelDetector.detect(in: visionImage) { (labels, error) in
        if let error = error {
            print("Error detecting labels: \(error.localizedDescription)")
        } else {
            guard let labels = labels, !labels.isEmpty else {
                print("No labels found.")
                return
            }
            
            // 이미지에서 인식된 라벨들을 출력합니다.
            for label in labels {
                print("Label: \(label.label), Confidence: \(label.confidence)")
            }
        }
    }
}

위 코드에서 VisionImage 객체를 생성하고, labelDetector를 이용하여 이미지에서 라벨을 인식합니다. 인식된 라벨 정보는 labels 변수에 저장되며, 각 라벨은 labelconfidence로 구성된 객체로 표현됩니다.

이제 앱을 빌드하고 실행하면, 이미지를 선택한 후 해당 이미지에서 인식된 라벨을 출력할 수 있습니다.

결론

Firebase ML Kit의 ML Vision 라이브러리를 사용하면 이미지 인식 기능을 손쉽게 구현할 수 있습니다. 위 예시를 참고하여, 사용자가 선택한 이미지에서 특정 객체를 인식하거나 이미지의 내용을 분석하는 기능을 추가할 수 있습니다. Firebase ML Kit의 다양한 기능을 활용하여 앱의 사용자 경험을 향상시켜보세요.

참고 자료