TensorFlow Lite๋ฅผ ์๊ฒ ๋ ์ดํ๋ก Android์์ model์ ์ด๋ป๊ฒ ์ ์ฉํ๋์ง๋ ์์์ผ๋...๊ฐ์ฅ ์ค์ํ ์ผ ์ด์๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ ํ
์ ์ด๋ฏธ์ง๋ก ๋ณํํ๋ ๊ฒ์ ๋ํ ๋ง์ ๊ณ ๋์ ๊ตฌ๊ธ๋ง์ด ์์๋ค.
ํ์ง๋ง ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊น๋จน๊ณ ์์๋ค!! TensorFlow Lite๋ฅผ ์์์ผ๋ฉด์๋ ๋ฐ๋ณด๊ฐ์ด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์์๋ค. TensorFlow Lite์ ๋น์ฐํ ๊ทธ๋ฐ ๋๊ตฌ๋ค์ด ์๊ฒ ์ง!! ์ด ์ฌ์ค์ ์กฐ๊ธ๋ง ๋ ๋นจ๋ฆฌ ๊นจ๋ฌ์์์ผ๋ฉด ์ข์์ํ
๋ฐ...๐ซ
๐ ์๋ ๋์ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ Android์์๋ง ์ง์ํ๋ค!!
์ผ๋จ Android Studio์ ๋น ํ๋ก์ ํธ ํ๋๋ฅผ ์์ฑํ๋ค.
File > New > Folder > Assets Folder๋ฅผ ๋๋ฌ app ํด๋์ assets ํด๋๋ฅผ ์๋ก ๋ง๋ค์ด์ค๋ค. ์๋ ์ฌ์ง์ ๋ณด์ด๋ ๊ฒ ๊ฐ์ด ํด๋ ์ด๋ฏธ์ง์ ์ฃผํฉ์ ๋ค๋ชจ๊ฐ์ ํ์๊ฐ ์์ด์ผ ์ ๋ง๋ค์ด ์ง ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ .tfliteํ์ผ๋ก ์ ์ฅํ ๋ชจ๋ธ์ Android studio์ assets ํด๋์ ๋ณต์ฌํ๋ค.
์ด ์์
์ผ๋ก ์ฐ๋ฆฌ๋ Android studio์ model์ ์ถ๊ฐํ๋ค.
๋ค์์ผ๋ก๋ ๋ชจ๋ธ ํ์ผ์ด ์์ถ๋์ง ์๋๋ก gradleํ์ผ์ ์์ ํด์ค์ผํ๋ค. Gradle Scripts๋ฅผ ๋ณด๋ฉด build.gradle ํ์ผ์ด ๋๊ฐ๊ฐ ์๋๋ฐ build.gradle(Module: app)ํ์ผ์ ์์ ํด์ผํ๋ค!!!
android {
// ๋ค๋ฅธ settings
// ์์ถ๋์ง ์๋๋ก ์ค์
aaptOptions {
noCompress "tflite"
}
}
dependencies {
// ๋ค๋ฅธ ์ฝ๋๋ค~
// Import tflite ์ข
์์ฑ
implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
// GPU ๋ผ์ด๋ธ๋ฌ๋ฆฌ...์ด๊ฒ์ ์ ํ์ฌํญ
implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly-SNAPSHOT'
implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly-SNAPSHOT'
}
๋ค ์ ๋ ฅํ์ผ๋ฉด ์ค๋ฅธ์ชฝ ์๋จ์ [Sync Now]๋ฅผ ๋๋ฌ์ฃผ์ด ๋๊ธฐํ๋ฅผ ์งํํ๋ค.
๋ด๊ฐ ๊ฐ์ฅ ๊ณ ๋ฏผํ ๋ฌธ์ ๊ฐ ๋ฐ๋ก ์ด๊ฒ์ด์๋ค. ์ด๋ฏธ์ง์ resize์ ์ด๋ฏธ์ง๋ฅผ ํ ์์ด๋ฏธ์ง๋ก ๋ณํํ๋ ๊ฒ์ ์ด๋ป๊ฒ ํ๋์ง ๊ต์ฅํ ๊ณ ๋ฏผ์ ํ์๋ค. ๊ทธ๋ฐ๋ฐ ์๊ณ ๋ณด๋๊น ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. ๊ฐ์ด ํด๋ณด์!!
import org.tensorflow.lite.support.image.ImageProcessor;
import org.tensorflow.lite.support.image.TensorImage;
import org.tensorflow.lite.support.image.ops.ResizeOp;
// ImageProcessor๋ฅผ ์ ์ํ๋ค.
ImageProcessor imageProcessor =
new ImageProcessor.Builder()
.add(new ResizeOp(224, 224, ResizeOp.ResizeMethod.BILINEAR))
.build();
// ์ด๋ฏธ์ง๋ฅผ Tensor Image๋ก ๋ฐ๊พผ๋ค.
TensorImage tImage = new TensorImage(DataType.๋ฐ์ดํฐํ์
);
// Processing
tImage.load(bitmap);
tImage = imageProcessor.process(tImage);
์์ ์ฝ๋๋ก ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ ํ ์ ์ด๋ฏธ์ง๋ก ๋ณํ์ ํ ์ ์๋ค.
์ด๋ฒ ๊ธ์์๋ Android studio์์ ์ด๋ป๊ฒ ๋ชจ๋ธ์ ์ฐ๋ํ๋์ง์ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ Tensor Image๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์๋ค. ๋ค์ ๊ธ์์๋ Android studio์์ predict๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ๋ฆฌ๋ทฐํด๋ณด๋๋ก ํ๊ฒ ๋ค. ๊ทธ๋ผ ๋ชจ๋ Bamboo๐!!