머신러닝

1-17 TensorFlow Lite 안드로이드 스튜디오 업로딩 예제

coding art 2020. 2. 17. 15:02
728x90

2017년 구글 TensorFlow 홈페이지에는 MNIST 손글씨 숫자 예제로부터 시작하여 그 다음에는 Iris Flowers 분류문제 그리고 TensorFlow 2.0을 배포하는 최근에는 Keras MNIST TensorFlow Lite 예제들을 게시하고 있다. 수년 전 TensorFlow를 연습하던 초기에는 머신러닝 학습 결과를 스마트폰과 같은 IOT 디바이스에 포팅하는 작업을 감히 넘볼 수 조차 없었으나 그간 초보적이긴 하지만 안드로이드 코딩에 익숙해졌기때문에 안드로이드 스마트폰에  파이선 머신러닝 결과를 안드로이드 코드에 첨부하여 업로딩 하는 것이 가능한 정도가 되었다.

 

안드로이드 스튜디오 자바 코딩의 아주 기초적인 사용법은 다음의 최근 블로그 요약을 참조하자.

2-1 Android Studio 설치

http://blog.daum.net/ejleep1/942

2.2 안드로이드 스튜디오 “Hello World!” OEM 드라이버 설치

http://blog.daum.net/ejleep1/943

2.3 앱인벤터 코딩을 생각하면서 배워보는 안드로이드 스튜디오 코딩

http://blog.daum.net/ejleep1/941

2.4 안드로이드 스튜디오 CrunchifyCaculator 코딩

http://blog.daum.net/ejleep1/946

2.5 안드로이드 스튜디오 Camera 코딩

http://blog.daum.net/ejleep1/947

2.6 SimpleCameraMainActivity 코딩에 의해 카메라 기능 ON 시키기

http://blog.daum.net/ejleep1/948

2.7 SimpleCameraMainActivity 코딩에 의해 촬영된 카메라 이미지 가져오기

http://blog.daum.net/ejleep1/950

2.8 앱인벤터와 비교해본 안드로이드 스튜디오 LOGIN 코딩

http://blog.daum.net/ejleep1/951

 

tflite 확장자 파일로 변환(convert)시킨 TensorFlow 학습 결과를 IOT 디바이스에 import 시켜 실시간으로 머신 러닝을 해 보자. 구글 홈페이지에 거론되는 IOT 디바이스로는 안드로이드나 IOS 스마트폰, 라즈베리 파이 보드 및 32비트 급 마이크로 콘트롤러(STM, ESP) 들을 포함한다. 그 중에서도 스마트 폰은 내부에 이미 카메라, 입출력 디바이스 및 각종 센서를 포함하고 있어 머신 러닝을 적용하기에 흥미로운 디바이스라 할 수 있을 것이다.

 

다음의 Github URL 주소에서 찾아 볼 수 있는 구글 홈페이지의 TensorFlow Lite 스마트폰 업로딩 예제를 다루어보기로 하자. 즉 업로딩 하는 과정에 중점을 둘 것이며 안드로이드 스튜디오 코딩 자체도 배우기에 상당한 노력이 필요하므로 단지 제공되는 코드를 열어서 디바이스에 임베딩하는 과정에 한하기로 한다.

https://github.com/tensorflow/examples/tree/master/lite/examples

 

대표적인 첫 번째 예제 digit_classfier 는 스마트폰 화면에서 손가락으로 숫자를 쓰면 하단에서 인식된 결과가 곧바로 나타나며, image_classification 의 경우는 카메라로 오브젝트를 비추면 검출된 오브젝트의 클라스 명과 인식 확률이 하단에 출력된다.

크롬 브라우저에서 이 예제들이 포함되어 있는 예제를 다운받기 위해서는 URLhttps://github.com/tensorflow/examples 로 옮기면 초록색 Clone or download 버튼을 볼 수 있으며 여기서 안드로이드 스튜디오(Version 3.5.3)가 설치되어 있는 윈도우즈10 시스템에 다운로드 하도록 하자

다운로드 폴더에서 압축을 해제하고 예제 하나하나를 적절한 파일명을 주어서 사용자(User) 폴더 내에 있는 AndroidStudioProjects 폴더에 복사해 넣도록 한다. 다음 그림은 예제 digit_classifier 내부에 android, ios, ml 3종의 폴더가 있음을 알 수 있다. 그 중에서 android 폴더를 android_digit 이란 명칭으로 변경하여 AndroidStudioProjects 폴더로 복사하도록 하자.

다음 그림에서처럼 바탕화면의 사용자 폴더 내부의 AndroidStudioProjects 폴더에 저장된 안드로이드 스튜디오용 app 파일 폴더들을 관찰 할 수 있다.

한편 안드로이드 스튜디오에는 가상 (virtual device) 에뮬레이터 말고 이미 자신의 물리적(physical device) 안드로이드 스마트폰 디바이스가 설정되어 있어야 한다. 안드로이드 스튜디오를 불러 오는 과정에서 바로 앞서 작업을 대상으로 Gradle 작업을 하는 경향이 있음에 유의하자. 결 국 한 번 더 Gradle 작업을 실행하여 빌드(Build) 작업을 했으며 시간도 제법 걸린다.

 

다음은 android_image 예제를 실행한 상태이므로 이 단계에서 android_digit 예제를 실행해 보도록 하자. 자신의 스마트폰 디바이스가 USB 케이블로 연결이 되어 있거나 아니면 WiFi 로 설정되어 있어야 함에 주의하자.

예제 앱을 불러 오는 방식은 Open이 아니고 Import Project 임에 유의하자.

Import 창에서 android_digit app을 선택하자.

다음과 같이 android_digit Import 되었음을 확인한 후에 RUN app 명령을 실행하자.

Import 창에서 android_digit app을 선택하자.

Install successfully 메시지와 함께 스마트폰에 화면이 니타난다. 화면에 숫자를 쓰고 인식 결과를 확인해 보자.

스마트폰에서 직접 손글씨를 작성하여 인식률과 정확도를 체크해보자.

Project Tree 구조를 살펴보자. assets 폴더에 mnist.tflite 파일이 있으며, 이 파일은 TensorFlow 코드 실행과정에서 학습 결과로 얻어지는 파일이다.

윈도우즈10AndroidStudioProjects/android_digit/app/src/main/assets 폴더에서 mnist.tflite 파일을 확인해 보자.

이상으로 구글 홈페이지에 올려 둔 TensorFlow Lite 예제 처리 과정을 살펴본 결과 머신 러닝 코드 작성과는 별개로 Java 또는 Kotlin 기반 안드로이드 스튜디오 코드 작성도 상당한 난이도가 있으므로 어느정도 초보단계까지는 훈련이 필요하다.