반응형
개요
- 플러터에서 ML을 사용하기 위해서 다양한 방법이 있는데 그중 Python으로 만들 수 있는 Pytorch를 활용하여 이미지 분류를 하는 앱을 만들어 보고자 한다
- 이전에 이미지를 불러오는 Image_picker를 활용하여 선택한 이미지를 분류하게 할 수도 있다
[Flutter] Image_picker 갤러리, 카메라에서 사진 선택하고 보여주기.
개요 플러터에서 갤러리에 접근하거나 사진을 찍어서 해당 사진을 활용해야 하는 경우가 있다. 이때 사용할 수 있는 플러그인을 알아보자 라이브러리 image_picker 이미지 피커 라이브러리 사이트.
ai-sw.tistory.com
사용한 플러그인
- pytorch_mobile: ^0.2.2 : https://pub.dev/packages/pytorch_mobile/install
pytorch_mobile | Flutter Package
A flutter plugin for pytorch model inference. Supports image models as well as custom models.
pub.dev
설치
- 터미널에서 아래의 커맨드 실행
flutter pub add pytorch_mobile
- 사용하고자 하는 파일 상단에 임포트
import 'package:pytorch_mobile/pytorch_mobile.dart';
import 'package:pytorch_mobile/model.dart';
Android SDK 버전 설정
- android/app/build.gradle에서 SDK최소 버전 21이상으로 설정
defaultConfig {
minSdkVersion 21
...
assets
https://drive.google.com/drive/folders/1JlvXWGAsHXe5_fXQNJHfNtFCyhV4WZrY?usp=share_link
share - Google Drive
이 폴더에 파일이 없습니다.이 폴더에 파일을 추가하려면 로그인하세요.
drive.google.com
- 위의 파일을 다운로드 받아서 프로젝트 Root에서 assets/ 폴더를 만들어준 다음 resnet.pt, labels.csv파일을 넣어준다
pubspec.yaml
- assets을 추가한것을 알리기 위해 다음과 같이 파일이 위치함을 알려준다
flutter:
assets:
- assets/labels.csv
- assets/resnet.pt
lib/main.dart
- main 다트 페이지는 다음과 같은 상태에서 별다른 조작은 안 할 것이다.
import 'package:flutter/material.dart';
import 'classifier.dart'; // 새로 만들어줄 dart파일
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Classifier(),
);
}
}
lib/classifier.dart
기본 틀 제작
- 적당한 statefullWidget을 생성해 준다.
class Classifier extends StatefulWidget {
const Classifier({Key? key}) : super(key: key);
@override
State<Classifier> createState() => _ClassifierState();
}
class _ClassifierState extends State<Classifier> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Container(
height: 500,
),
SizedBox(
child: null // 여기다가 추론 결과 넣어줄꺼임
)
],
),
);
}
}
모델 불러오기
- 모델을 저장해 줄 객체 선언
late Model model;
- 모델을 불러오는 함수 선언 // 모델을 불러와서 객체에 저장
Future loadmodel() async{
Model imagemodel = await PyTorchMobile.loadModel('assets/resnet.pt');
setState(() {
model = imagemodel;
});
}
- 생성자 선언 // 앱이 실행되면 모델을 불러옴
@override
void initState(){
super.initState();
loadmodel().then((value){
print('load model');
setState(() {});
});
}
여기까지 잘 따라왔다면 앱을 실행했을때 다음과 같이 load model이 출력될 것이다
다음 게시물에서 image_picker를 통해서 이미지를 불러오고
해당 이미지를 분류해서 라벨을 지정하는 것을 구현해 보겠다.
반응형
'[FrameWork]Flutter' 카테고리의 다른 글
[FireBase] 파이어베이스 CLI 설치하기 (0) | 2022.12.06 |
---|---|
[Flutter]플러터에서 파이토치 사용해서 이미지 분류하기_2(pytorch_mobile) (0) | 2022.12.06 |
[Flutter] Image_picker 갤러리, 카메라에서 사진 선택하고 보여주기. (0) | 2022.12.05 |
[Dart] Flutter에 쓰이는 다트 Dart 언어 (특징,기초) (0) | 2022.09.20 |
[Flutter]플러터_설치하기_01 (윈도우) (2) | 2022.09.20 |