Catch up on highlights from Firebase at Google I/O 2023. Learn more

ใช้รุ่น TensorFlow Lite แบบกำหนดเองกับ Flutter

หากแอปของคุณใช้ โมเดล TensorFlow Lite ที่กำหนดเอง คุณสามารถใช้ Firebase ML เพื่อปรับใช้โมเดลของคุณได้ เมื่อปรับใช้โมเดลกับ Firebase คุณจะสามารถลดขนาดการดาวน์โหลดเริ่มต้นของแอปและอัปเดตโมเดล ML ของแอปได้โดยไม่ต้องออกแอปเวอร์ชันใหม่ และด้วย Remote Config และ A/B Testing คุณสามารถให้บริการโมเดลต่างๆ แบบไดนามิกแก่กลุ่มผู้ใช้ที่แตกต่างกันได้

รุ่น TensorFlow Lite

รุ่น TensorFlow Lite เป็นรุ่น ML ที่ได้รับการปรับแต่งให้ทำงานบนอุปกรณ์เคลื่อนที่ ในการรับโมเดล TensorFlow Lite:

โปรดทราบว่าหากไม่มีไลบรารี TensorFlow Lite ที่บำรุงรักษาสำหรับ Dart คุณจะต้องผสานรวมกับไลบรารี TensorFlow Lite ดั้งเดิมสำหรับแพลตฟอร์มของคุณ การผสานรวมนี้ไม่ได้บันทึกไว้ที่นี่

ก่อนที่คุณจะเริ่มต้น

  1. ติดตั้งและเริ่มต้น Firebase SDK สำหรับ Flutter หากคุณยังไม่ได้ดำเนินการ

  2. จากไดเร็กทอรีรูทของโปรเจ็กต์ Flutter ให้รันคำสั่งต่อไปนี้เพื่อติดตั้งปลั๊กอินตัวดาวน์โหลดโมเดล ML:

    flutter pub add firebase_ml_model_downloader
    
  3. สร้างโครงการของคุณใหม่:

    flutter run
    

1. ปรับใช้โมเดลของคุณ

ปรับใช้โมเดล TensorFlow ที่กำหนดเองโดยใช้คอนโซล Firebase หรือ Firebase Admin Python และ Node.js SDK ดู ปรับใช้และจัดการโมเดลแบบกำหนดเอง

หลังจากเพิ่มโมเดลที่กำหนดเองในโครงการ Firebase แล้ว คุณจะอ้างอิงโมเดลในแอปได้โดยใช้ชื่อที่คุณระบุ คุณสามารถปรับใช้โมเดล TensorFlow Lite ใหม่ได้ทุกเมื่อ และดาวน์โหลดโมเดลใหม่ลงในอุปกรณ์ของผู้ใช้โดยเรียก getModel() (ดูด้านล่าง)

2. ดาวน์โหลดโมเดลลงในอุปกรณ์และเริ่มต้นล่าม TensorFlow Lite

หากต้องการใช้โมเดล TensorFlow Lite ในแอป ก่อนอื่นให้ใช้โปรแกรมดาวน์โหลดโมเดลเพื่อดาวน์โหลดเวอร์ชันล่าสุดของโมเดลลงในอุปกรณ์ จากนั้นสร้างอินสแตนซ์ของล่าม TensorFlow Lite ด้วยโมเดล

ในการเริ่มดาวน์โหลดโมเดล ให้เรียกใช้ getModel() ของตัวดาวน์โหลดโมเดล โดยระบุชื่อที่คุณกำหนดให้กับโมเดลเมื่ออัปโหลดโมเดล คุณต้องการดาวน์โหลดโมเดลล่าสุดเสมอหรือไม่ และเงื่อนไขที่คุณต้องการอนุญาตให้ดาวน์โหลด

คุณสามารถเลือกพฤติกรรมการดาวน์โหลดได้สามแบบ:

ประเภทการดาวน์โหลด คำอธิบาย
localModel รับโมเดลท้องถิ่นจากอุปกรณ์ หากไม่มีโมเดลโลคอล สิ่งนี้จะทำงานเหมือน latestModel ใช้ประเภทการดาวน์โหลดนี้หากคุณไม่สนใจที่จะตรวจสอบการอัปเดตโมเดล ตัวอย่างเช่น คุณกำลังใช้ Remote Config เพื่อดึงชื่อโมเดล และคุณมักจะอัปโหลดโมเดลโดยใช้ชื่อใหม่ (แนะนำ)
localModelUpdateInBackground รับโมเดลในเครื่องจากอุปกรณ์และเริ่มอัปเดตโมเดลในเบื้องหลัง หากไม่มีโมเดลโลคอล สิ่งนี้จะทำงานเหมือน latestModel
latestModel รับรุ่นใหม่ล่าสุด หากโมเดลโลคัลเป็นเวอร์ชันล่าสุด ให้ส่งคืนโมเดลโลคัล มิฉะนั้นให้ดาวน์โหลดโมเดลล่าสุด ลักษณะการทำงานนี้จะบล็อกจนกว่าจะดาวน์โหลดเวอร์ชันล่าสุด (ไม่แนะนำ) ใช้ลักษณะการทำงานนี้เฉพาะในกรณีที่คุณต้องการเวอร์ชันล่าสุดอย่างชัดเจน

คุณควรปิดใช้งานฟังก์ชันที่เกี่ยวข้องกับโมเดล เช่น สีเทาหรือซ่อนบางส่วนของ UI ของคุณ จนกว่าคุณจะยืนยันว่าดาวน์โหลดโมเดลแล้ว

FirebaseModelDownloader.instance
    .getModel(
        "yourModelName",
        FirebaseModelDownloadType.localModel,
        FirebaseModelDownloadConditions(
          iosAllowsCellularAccess: true,
          iosAllowsBackgroundDownloading: false,
          androidChargingRequired: false,
          androidWifiRequired: false,
          androidDeviceIdleRequired: false,
        )
    )
    .then((customModel) {
      // Download complete. Depending on your app, you could enable the ML
      // feature, or switch from the local model to the remote model, etc.

      // The CustomModel object contains the local path of the model file,
      // which you can use to instantiate a TensorFlow Lite interpreter.
      final localModelPath = customModel.file;

      // ...
    });

แอพจำนวนมากเริ่มงานดาวน์โหลดด้วยรหัสการเริ่มต้น แต่คุณสามารถทำได้ทุกเมื่อก่อนที่คุณจะต้องใช้โมเดล

3. ทำการอนุมานข้อมูลเข้า

ตอนนี้คุณมีไฟล์โมเดลบนอุปกรณ์แล้ว คุณสามารถใช้ไฟล์กับล่าม TensorFlow Lite เพื่อทำการอนุมานได้ ในกรณีที่ไม่มีไลบรารี TensorFlow Lite ที่บำรุงรักษาสำหรับ Dart คุณจะต้องรวมเข้ากับ ไลบรารี TensorFlow Lite ดั้งเดิม สำหรับ iOS และ Android

ภาคผนวก: ความปลอดภัยของโมเดล

ไม่ว่าคุณจะทำให้โมเดล TensorFlow Lite พร้อมใช้งานกับ Firebase ML ด้วยวิธีใด Firebase ML จะจัดเก็บโมเดลเหล่านั้นในรูปแบบ protobuf ที่ทำให้เป็นอนุกรมมาตรฐานในที่จัดเก็บในเครื่อง

ในทางทฤษฎีหมายความว่าใครก็ตามสามารถคัดลอกโมเดลของคุณได้ อย่างไรก็ตาม ในทางปฏิบัติ โมเดลส่วนใหญ่มีความเฉพาะเจาะจงกับแอปพลิเคชันและถูกทำให้ยุ่งเหยิงด้วยการปรับให้เหมาะสม ซึ่งมีความเสี่ยงใกล้เคียงกับคู่แข่งในการถอดประกอบและนำโค้ดของคุณกลับมาใช้ใหม่ อย่างไรก็ตาม คุณควรตระหนักถึงความเสี่ยงนี้ก่อนที่จะใช้โมเดลที่กำหนดเองในแอปของคุณ