Slide 1

Slide 1 text

ML Kit 使⽤用簡介 Elvis Lin @Android Taipei 2018-07-18

Slide 2

Slide 2 text

關於我 • Elvis Lin • Android 與 iOS 永遠的初學者 • Twitter: @elvismetaphor • Blog: https://blog.elvismetaphor.me

Slide 3

Slide 3 text

不是業配 https://youtu.be/Z-dqGRSsaBs

Slide 4

Slide 4 text

⼤大綱 • 什什麼是(我理理解的)機器學習 • 移動裝置上實作機器學習應⽤用的限制 • TensorFlow Lite 與 ML Kit • 範例例

Slide 5

Slide 5 text

機器學習的應⽤用

Slide 6

Slide 6 text

機器學習 • 從資料中歸納出有⽤用的規則 • 訓練模型 • 使⽤用模型 • Mobile Application Engineer 參參與開發主要是在「使⽤用模型」 這個範圍

Slide 7

Slide 7 text

Data Result (Trained)
 Model

Slide 8

Slide 8 text

移動裝置上
 實作機器學習應⽤用的限制 • 記憶體有限與儲存空間有限 • 計算能⼒力力不如⼤大型伺服器 • 電池容量量有限

Slide 9

Slide 9 text

移動裝置上
 實作機器學習應⽤用的改良⽅方向 • 記憶體有限與儲存空間有限 —> 減少模型(Model)的體積 • 計算能⼒力力不如⼤大型伺服器 —> 降低演算法的複雜度 • 電池容量量有限 —> 降低演算法的複雜度

Slide 10

Slide 10 text

Google 推出的解決⽅方案 • TensorFlow Lite • ML Kit

Slide 11

Slide 11 text

https://www.tensorflow.org/mobile/tflite/

Slide 12

Slide 12 text

Neural Networks API Metal

Slide 13

Slide 13 text

ML Kit • Cloud Vision API / Mobile Vision API • Tensorflow Lite • 整合 Firebase,託管「客製化的模型」

Slide 14

Slide 14 text

ML Kit Base APIs • Image labeling • Text recognition (OCR) • Face detection • Barcode scanning • Landmark detection • others……

Slide 15

Slide 15 text

使⽤用 ML Kit

Slide 16

Slide 16 text

建立⼀一個 Firebase 專案

Slide 17

Slide 17 text

建立⼀一個 Android app
 下載設定檔 設定好 Package Name 下載 google-service.json

Slide 18

Slide 18 text

/build.gradle dependencies { classpath 'com.android.tools.build:gradle:3.1.3' classpath 'com.google.gms:google-services:4.0.2' }

Slide 19

Slide 19 text

/app/build.gradle dependencies { // ... implementation 'com.google.firebase:firebase-ml-vision:16.0.0' }

Slide 20

Slide 20 text

掃描 barcode (local) FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(image); FirebaseVisionBarcodeDetectorOptions options = new FirebaseVisionBarcodeDetectorOptions.Builder() .setBarcodeFormats( FirebaseVisionBarcode.FORMAT_QR_CODE, FirebaseVisionBarcode.FORMAT_AZTEC ) .build(); FirebaseVisionBarcodeDetector detector = FirebaseVision.getInstance() .getVisionBarcodeDetector(options); detector.detectInImage(image) .addOnSuccessListener(
 new OnSuccessListener>() { @Override public void onSuccess(List barcodes) {} }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) {} });

Slide 21

Slide 21 text

初始化 Detector FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(image);
 FirebaseVisionBarcodeDetectorOptions options = new FirebaseVisionBarcodeDetectorOptions.Builder() .setBarcodeFormats( FirebaseVisionBarcode.FORMAT_QR_CODE, FirebaseVisionBarcode.FORMAT_AZTEC ) .build(); FirebaseVisionBarcodeDetector detector = 
 FirebaseVision
 .getInstance() .getVisionBarcodeDetector(options);

Slide 22

Slide 22 text

取得結果 detector.detectInImage(image) .addOnSuccessListener(
 new OnSuccessListener>() { @Override public void onSuccess(List barcodes) {} }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) {} });

Slide 23

Slide 23 text

⽀支援的 barcode 格式 • Code 128 (FORMAT_CODE_128) • Code 39 (FORMAT_CODE_39) • Code 93 (FORMAT_CODE_93) • Codabar (FORMAT_CODABAR) • EAN-13 (FORMAT_EAN_13) • EAN-8 (FORMAT_EAN_8) • ITF (FORMAT_ITF) • UPC-A (FORMAT_UPC_A) • UPC-E (FORMAT_UPC_E) •QR Code (FORMAT_QR_CODE) • PDF417 (FORMAT_PDF417) • Aztec (FORMAT_AZTEC) • Data Matrix (FORMAT_DATA_MATRIX)

Slide 24

Slide 24 text

辨識⽂文字 (local) FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(selectedImage); FirebaseVisionTextDetector detector = FirebaseVision.getInstance().getVisionTextDetector(); detector.detectInImage(image) .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(FirebaseVisionText text) {} }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) {} });

Slide 25

Slide 25 text

辨識⽂文字 (cloud) FirebaseVisionCloudDetectorOptions options = new FirebaseVisionCloudDetectorOptions.Builder() .setModelType(FirebaseVisionCloudDetectorOptions.LATEST_MODEL) .setMaxResults(15) .build(); FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(selectedImage); FirebaseVisionCloudDocumentTextDetector detector = FirebaseVision.getInstance() .getVisionCloudDocumentTextDetector(options); detector.detectInImage(image) .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(FirebaseVisionCloudText text) {} }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) {} });

Slide 26

Slide 26 text

補充資料 • ML Kit 簡介 (for Android)
 https://blog.elvismetaphor.me/ml-kit-fundamentals-for- android-6444e2db0fdb • ML Kit 簡介 (for iOS)
 https://blog.elvismetaphor.me/ml-kit-fundamentals-for- ios-cb705044e69b

Slide 27

Slide 27 text

參參考資料 • https://youtu.be/Z-dqGRSsaBs • https://codelabs.developers.google.com/codelabs/mlkit- android/ • https://github.com/firebase/quickstart-android/tree/ master/mlkit

Slide 28

Slide 28 text

No content