[flutter] Firebase_core를 사용하여 플러터 앱에서 ML Kit 활용하기

Firebase는 개발자가 앱을 구축하고 관리하는 데 도움을 주는 종합적인 플랫폼입니다. Firebase는 서버 관리, 사용자 인증, 데이터베이스, 스토리지 및 기타 다양한 기능을 제공합니다. 이 중 Firebase ML Kit는 머신러닝을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다.

이번에는 Firebase ML Kit를 사용하여 플러터 앱에서 머신러닝 기능을 구현하는 방법에 대해 알아보겠습니다. Firebase ML Kit를 사용하려면 먼저 Firebase를 설정해야 합니다. Firebase 설정 방법에 대해서는 다른 블로그 포스트에서 자세히 설명하겠습니다.

Firebase 설정

Firebase를 사용하기 위해서는 프로젝트에 Firebase를 추가하고 구성해야 합니다. Firebase 프로젝트를 생성한 후, google-services.json 파일을 프로젝트의 android/app 폴더에 추가해야 합니다. 이 파일은 Firebase 설정 정보가 저장되어 있습니다.

Firebase 프로젝트에 ML Kit를 추가하기 위해서는 firebase_ml_vision 패키지를 pubspec.yaml 파일에 추가해야 합니다. 아래 코드를 dependencies 섹션에 추가하세요:

dependencies:
  flutter:
    sdk: flutter
  firebase_ml_vision: ^0.11.0

pubspec.yaml 파일을 업데이트한 후, 터미널에서 flutter packages get 명령어를 실행하여 패키지를 설치하세요.

ML Kit를 통한 이미지 레이블링

이제 ML Kit를 사용하여 플러터 앱에서 이미지 레이블링을 구현해 보겠습니다. 먼저 FirebaseVisionImage.fromFile 메서드를 사용하여 이미지를 로드합니다. 다음으로 FirebaseVision.instance.imageLabeler()를 호출하여 이미지 레이블링 기능을 가져옵니다. 그런 다음 이미지를 레이블링하고 결과를 받아올 수 있습니다.

아래는 플러터 앱에서 ML Kit를 사용하여 이미지 레이블링을 구현하는 예제 코드입니다:

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:firebase_ml_vision/firebase_ml_vision.dart';

class ImageLabelingPage extends StatefulWidget {
  @override
  _ImageLabelingPageState createState() => _ImageLabelingPageState();
}

class _ImageLabelingPageState extends State<ImageLabelingPage> {
  File _imageFile;
  List<ImageLabel> _labels = [];

  Future<void> _pickImage() async {
    final File imageFile = // 이미지 파일을 가져오는 코드
    if (imageFile != null) {
      setState(() {
        _imageFile = imageFile;
        _labels = [];
      });
      await _labelImage();
    }
  }

  Future<void> _labelImage() async {
    final FirebaseVisionImage visionImage = FirebaseVisionImage.fromFile(_imageFile);
    final ImageLabeler labeler = FirebaseVision.instance.imageLabeler();

    final List<ImageLabel> labels = await labeler.processImage(visionImage);
    setState(() {
      _labels = labels;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Labeling'),
      ),
      body: Center(
        child: Column(
          children: [
            _imageFile != null ? Image.file(_imageFile) : Container(),
            SizedBox(height: 16),
            RaisedButton(
              onPressed: _pickImage,
              child: Text('Pick Image'),
            ),
            SizedBox(height: 16),
            Text(
              'Labels:',
              style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
            ),
            SizedBox(height: 8),
            Expanded(
              child: ListView.builder(
                itemCount: _labels.length,
                itemBuilder: (BuildContext context, int index) {
                  return ListTile(
                    title: Text(_labels[index].label),
                    subtitle: Text('${_labels[index].confidence.toStringAsFixed(2)}%'),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

위 코드는 사용자가 앱에서 이미지를 선택하고, ML Kit를 통해 이미지를 레이블링하여 결과를 표시합니다. 결과는 리스트 형태로 출력되며, 각 레이블에는 해당하는 라벨과 신뢰도가 표시됩니다.

이제 Firebase와 ML Kit를 사용하여 플러터 앱에서 머신러닝 기능을 구현하는 방법을 알아보았습니다. Firebase를 활용하면 개발자는 머신러닝을 쉽고 간편하게 구현할 수 있습니다. 머신러닝을 사용하여 앱의 사용자 경험을 향상시키고, 다양한 기능을 구현해보세요!

참고 자료