ใช้โมเดล TensorFlow Lite ที่กำหนดเองกับ Flutter

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

โมเดล 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 หรือ SDK ของ Python และ Node.js ของผู้ดูแลระบบ Firebase โปรดดู จัดการและทำให้โมเดลที่กำหนดเองใช้งานได้

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

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

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

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

คุณเลือกพฤติกรรมการดาวน์โหลดได้ 3 แบบดังนี้

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

คุณควรปิดใช้ฟังก์ชันการทำงานที่เกี่ยวข้องกับโมเดล เช่น เป็นสีเทาหรือ ซ่อนบางส่วนของ 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 จะจัดเก็บเนื้อหาในรูปแบบ Protocolbuf แบบอนุกรมมาตรฐานใน ที่จัดเก็บข้อมูลในตัวเครื่อง

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