บทช่วยสอนนี้จะแสดงวิธีสร้างแอป Android โดยใช้ TensorFlow Lite เพื่อตรวจจับวัตถุในเฟรมที่กล้องของอุปกรณ์ถ่ายอย่างต่อเนื่อง แอปพลิเคชันนี้ออกแบบมาสำหรับอุปกรณ์ Android จริง หากคุณกำลังอัปเดตโปรเจ็กต์ที่มีอยู่ คุณสามารถใช้ตัวอย่างโค้ดเป็นข้อมูลอ้างอิง และข้ามไปยังคำแนะนำใน การแก้ไขโปรเจ็กต์ของคุณ
ภาพรวมการตรวจจับวัตถุ
การตรวจจับวัตถุ เป็นงานการเรียนรู้ของเครื่องในการระบุการมีอยู่และตำแหน่งของวัตถุหลายคลาสภายในรูปภาพ แบบจำลองการตรวจจับออบเจ็กต์ได้รับการฝึกฝนบนชุดข้อมูลที่มีชุดของออบเจ็กต์ที่รู้จัก
โมเดลที่ได้รับการฝึกจะได้รับเฟรมรูปภาพเป็นอินพุต และพยายามจัดหมวดหมู่รายการในภาพจากชุดของคลาสที่รู้จักซึ่งได้รับการฝึกให้จดจำ สำหรับแต่ละกรอบภาพ แบบจำลองการตรวจจับวัตถุจะแสดงรายการวัตถุที่ตรวจพบ ตำแหน่งของกรอบขอบเขตสำหรับวัตถุแต่ละชิ้น และคะแนนที่บ่งชี้ความเชื่อมั่นของวัตถุที่ถูกจำแนกอย่างถูกต้อง
โมเดลและชุดข้อมูล
บทช่วยสอนนี้ใช้แบบจำลองที่ได้รับการฝึกโดยใช้ ชุดข้อมูล COCO COCO เป็นชุดข้อมูลการตรวจจับวัตถุขนาดใหญ่ที่ประกอบด้วยรูปภาพ 330,000 รายการ อินสแตนซ์ออบเจ็กต์ 1.5 ล้านรายการ และหมวดหมู่ออบเจ็กต์ 80 หมวดหมู่
คุณมีตัวเลือกในการใช้โมเดลที่ได้รับการฝึกล่วงหน้าอย่างใดอย่างหนึ่งต่อไปนี้:
EfficientDet-Lite0 [แนะนำ] - โมเดลการตรวจจับวัตถุน้ำหนักเบาพร้อมตัวแยกคุณสมบัติ BiFPN ตัวทำนายกล่องที่ใช้ร่วมกัน และการสูญเสียโฟกัส mAP (ค่าเฉลี่ยความแม่นยำเฉลี่ย) สำหรับชุดข้อมูลการตรวจสอบ COCO 2017 คือ 25.69%
EfficientDet-Lite1 - โมเดลการตรวจจับวัตถุ EfficientDet ขนาดกลาง mAP สำหรับชุดข้อมูลการตรวจสอบ COCO 2017 คือ 30.55%
EfficientDet-Lite2 - โมเดลการตรวจจับวัตถุ EfficientDet ที่ใหญ่กว่า mAP สำหรับชุดข้อมูลการตรวจสอบ COCO 2017 คือ 33.97%
MobileNetV1-SSD - รุ่นที่มีน้ำหนักเบาเป็นพิเศษซึ่งปรับให้ทำงานร่วมกับ TensorFlow Lite สำหรับการตรวจจับวัตถุ mAP สำหรับชุดข้อมูลการตรวจสอบ COCO 2017 คือ 21%
สำหรับบทช่วยสอนนี้ โมเดล EfficientDet-Lite0 มีความสมดุลที่ดีระหว่างขนาดและความแม่นยำ
การดาวน์โหลด การแตกไฟล์ และวางโมเดลลงในโฟลเดอร์ Asset จะได้รับการจัดการโดยอัตโนมัติโดยไฟล์ download.gradle
ซึ่งทำงานในขณะสร้าง คุณไม่จำเป็นต้องดาวน์โหลดโมเดล TFLite ลงในโปรเจ็กต์ด้วยตนเอง
ตัวอย่างการติดตั้งและรัน
หากต้องการตั้งค่าแอปการตรวจจับวัตถุ ให้ดาวน์โหลดตัวอย่างจาก GitHub และเรียกใช้โดยใช้ Android Studio ส่วนต่อไปนี้ของบทช่วยสอนนี้จะสำรวจส่วนที่เกี่ยวข้องของตัวอย่างโค้ด เพื่อให้คุณสามารถนำไปใช้กับแอป Android ของคุณเองได้
ความต้องการของระบบ
- Android Studio เวอร์ชัน 2021.1.1 (Bumblebee) หรือสูงกว่า
- Android SDK เวอร์ชัน 31 ขึ้นไป
- อุปกรณ์ Android ที่มีระบบปฏิบัติการเวอร์ชันขั้นต่ำ SDK 24 (Android 7.0 - Nougat) พร้อมเปิดใช้งานโหมดนักพัฒนาซอฟต์แวร์
รับโค้ดตัวอย่าง
สร้างสำเนาโค้ดตัวอย่างในเครื่อง คุณจะใช้โค้ดนี้เพื่อสร้างโปรเจ็กต์ใน Android Studio และเรียกใช้แอปพลิเคชันตัวอย่าง
หากต้องการโคลนและตั้งค่าโค้ดตัวอย่าง:
- โคลนที่เก็บ git
git clone https://github.com/tensorflow/examples.git
- คุณสามารถเลือกกำหนดค่าอินสแตนซ์ git ของคุณเพื่อใช้การชำระเงินแบบกระจัดกระจาย เพื่อให้คุณมีเฉพาะไฟล์สำหรับแอปตัวอย่างการตรวจจับออบเจ็กต์:
cd examples git sparse-checkout init --cone git sparse-checkout set lite/examples/object_detection/android
นำเข้าและรันโครงการ
สร้างโปรเจ็กต์จากโค้ดตัวอย่างที่ดาวน์โหลด สร้างโปรเจ็กต์ จากนั้นรัน
หากต้องการนำเข้าและสร้างโปรเจ็กต์โค้ดตัวอย่าง:
- เริ่ม Android สตูดิโอ
- จาก Android Studio ให้เลือก File > New > Import Project
- นำทางไปยังไดเร็กทอรีโค้ดตัวอย่างที่มีไฟล์ build.gradle (
.../examples/lite/examples/object_detection/android/build.gradle
) และเลือกไดเร็กทอรีนั้น - หาก Android Studio ขอ Gradle Sync ให้เลือกตกลง
- ตรวจสอบให้แน่ใจว่าอุปกรณ์ Android ของคุณเชื่อมต่อกับคอมพิวเตอร์และเปิดใช้งานโหมดนักพัฒนาซอฟต์แวร์แล้ว คลิกลูก
Run
สีเขียว
หากคุณเลือกไดเร็กทอรีที่ถูกต้อง Android Studio จะสร้างโปรเจ็กต์ใหม่และสร้างมันขึ้นมา กระบวนการนี้อาจใช้เวลาสักครู่ ขึ้นอยู่กับความเร็วของคอมพิวเตอร์ และหากคุณใช้ Android Studio สำหรับโปรเจ็กต์อื่นหรือไม่ เมื่อการสร้างเสร็จสมบูรณ์ Android Studio จะแสดงข้อความ BUILD SUCCESSFUL
ในแผงสถานะ Build Output
ทางเลือก: หากต้องการแก้ไขข้อผิดพลาดของบิลด์โดยอัปเดตเวอร์ชันปลั๊กอิน Android:
- เปิดไฟล์ build.gradle ในไดเร็กทอรีโปรเจ็กต์
เปลี่ยนเวอร์ชันเครื่องมือ Android ดังต่อไปนี้:
// from: classpath 'com.android.tools.build:gradle:4.2.2' // to: classpath 'com.android.tools.build:gradle:4.1.2'
ซิงค์โปรเจ็กต์โดยเลือก: ไฟล์ > ซิงค์โปรเจ็กต์กับไฟล์ Gradle
ในการดำเนินโครงการ:
- จาก Android Studio ให้รันโปรเจ็กต์โดยเลือก Run > Run…
- เลือกอุปกรณ์ Android ที่เชื่อมต่อกับกล้องเพื่อทดสอบแอป
ส่วนถัดไปจะแสดงให้คุณเห็นการแก้ไขที่คุณต้องทำกับโปรเจ็กต์ที่มีอยู่เพื่อเพิ่มฟังก์ชันการทำงานนี้ให้กับแอปของคุณเอง โดยใช้แอปตัวอย่างนี้เป็นจุดอ้างอิง
เพิ่มการพึ่งพาโครงการ
ในแอปพลิเคชันของคุณเอง คุณต้องเพิ่มการพึ่งพาโปรเจ็กต์เฉพาะเพื่อรันโมเดลแมชชีนเลิร์นนิงของ TensorFlow Lite และเข้าถึงฟังก์ชันยูทิลิตี้ที่แปลงข้อมูล เช่น รูปภาพ ให้เป็นรูปแบบข้อมูลเทนเซอร์ที่โมเดลที่คุณใช้ประมวลผลได้
แอปตัวอย่างใช้ ไลบรารีงาน TensorFlow Lite สำหรับการมองเห็น เพื่อเปิดใช้งานการดำเนินการโมเดลการเรียนรู้ของเครื่องตรวจจับวัตถุ คำแนะนำต่อไปนี้จะอธิบายวิธีเพิ่มการพึ่งพาไลบรารีที่จำเป็นให้กับโปรเจ็กต์แอป Android ของคุณ
คำแนะนำต่อไปนี้จะอธิบายวิธีเพิ่มการขึ้นต่อกันของโปรเจ็กต์และโมดูลที่จำเป็นให้กับโปรเจ็กต์แอป Android ของคุณเอง
ในการเพิ่มการพึ่งพาโมดูล:
ในโมดูลที่ใช้ TensorFlow Lite ให้อัปเดตไฟล์
build.gradle
ของโมดูลเพื่อรวมการอ้างอิงต่อไปนี้ ในโค้ดตัวอย่าง ไฟล์นี้อยู่ที่นี่:...examples/lite/examples/object_detection/android/app/build.gradle
( การอ้างอิงโค้ด )dependencies { ... implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.0' // Import the GPU delegate plugin Library for GPU inference implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.0' implementation 'org.tensorflow:tensorflow-lite-gpu:2.9.0' }
โครงการจะต้องมีไลบรารีงาน Vision (
tensorflow-lite-task-vision
) ไลบรารีหน่วยประมวลผลกราฟิก (GPU) (tensorflow-lite-gpu-delegate-plugin
) จัดเตรียมโครงสร้างพื้นฐานเพื่อเรียกใช้แอปบน GPU และ Delegate (tensorflow-lite-gpu
) จัดเตรียมรายการความเข้ากันได้ใน Android Studio ให้ซิงค์การขึ้นต่อกันของโปรเจ็กต์โดยเลือก: ไฟล์ > ซิงค์โปรเจ็กต์กับไฟล์ Gradle
เริ่มต้นโมเดล ML
ในแอป Android คุณต้องเริ่มต้นโมเดลแมชชีนเลิร์นนิง TensorFlow Lite ด้วยพารามิเตอร์ก่อนที่จะเรียกใช้การคาดการณ์ด้วยโมเดล พารามิเตอร์การเริ่มต้นเหล่านี้มีความสอดคล้องกันในโมเดลการตรวจจับวัตถุ และสามารถรวมการตั้งค่าต่างๆ เช่น เกณฑ์ความแม่นยำขั้นต่ำสำหรับการคาดการณ์
โมเดล TensorFlow Lite มีไฟล์ .tflite
ที่มีรหัสโมเดล และบ่อยครั้งจะมีไฟล์ป้ายกำกับที่มีชื่อของคลาสที่โมเดลคาดการณ์ไว้ ในกรณีของการตรวจจับวัตถุ คลาสคือวัตถุ เช่น บุคคล สุนัข แมว หรือรถยนต์
ตัวอย่างนี้ดาวน์โหลดหลายโมเดลที่ระบุไว้ใน download_models.gradle
และคลาส ObjectDetectorHelper
มีตัวเลือกสำหรับโมเดล:
val modelName =
when (currentModel) {
MODEL_MOBILENETV1 -> "mobilenetv1.tflite"
MODEL_EFFICIENTDETV0 -> "efficientdet-lite0.tflite"
MODEL_EFFICIENTDETV1 -> "efficientdet-lite1.tflite"
MODEL_EFFICIENTDETV2 -> "efficientdet-lite2.tflite"
else -> "mobilenetv1.tflite"
}
ในการเริ่มต้นโมเดลในแอปของคุณ:
- เพิ่มไฟล์โมเดล
.tflite
ลงในไดเร็กทอรีsrc/main/assets
ของโปรเจ็กต์การพัฒนาของคุณ เช่น: EfficientDet-Lite0 - ตั้งค่าตัวแปรคงที่สำหรับชื่อไฟล์โมเดลของคุณ ในแอปตัวอย่าง คุณตั้งค่าตัวแปร
modelName
เป็นMODEL_EFFICIENTDETV0
เพื่อใช้โมเดลการตรวจจับ EfficientDet-Lite0 ตั้งค่าตัวเลือกสำหรับโมเดล เช่น เกณฑ์การคาดการณ์ ขนาดชุดผลลัพธ์ และทางเลือก ผู้รับมอบสิทธิ์การเร่งความเร็วด้วยฮาร์ดแวร์:
val optionsBuilder = ObjectDetector.ObjectDetectorOptions.builder() .setScoreThreshold(threshold) .setMaxResults(maxResults)
ใช้การตั้งค่าจากออบเจ็กต์นี้เพื่อสร้างออบเจ็กต์ TensorFlow Lite
ObjectDetector
ที่มีโมเดล:objectDetector = ObjectDetector.createFromFileAndOptions( context, modelName, optionsBuilder.build())
setupObjectDetector
จะตั้งค่าพารามิเตอร์โมเดลต่อไปนี้:
- เกณฑ์การตรวจจับ
- จำนวนผลลัพธ์การตรวจจับสูงสุด
- จำนวนเธรดการประมวลผลที่จะใช้ (
BaseOptions.builder().setNumThreads(numThreads)
) - รุ่นจริง (
modelName
) - วัตถุ ObjectDetector (
objectDetector
)
กำหนดค่าตัวเร่งฮาร์ดแวร์
เมื่อเริ่มต้นโมเดล TensorFlow Lite ในแอปพลิเคชันของคุณ คุณสามารถใช้คุณลักษณะการเร่งด้วยฮาร์ดแวร์เพื่อเพิ่มความเร็วในการคำนวณการคาดการณ์ของโมเดลได้
ผู้ร่วมประชุม TensorFlow Lite คือโมดูลซอฟต์แวร์ที่เร่งการดำเนินการโมเดลการเรียนรู้ของเครื่องโดยใช้ฮาร์ดแวร์การประมวลผลเฉพาะทางบนอุปกรณ์เคลื่อนที่ เช่น หน่วยประมวลผลกราฟิก (GPU) หน่วยประมวลผล Tensor (TPU) และตัวประมวลผลสัญญาณดิจิทัล (DSP) แนะนำให้ใช้ผู้รับมอบสิทธิ์เพื่อเรียกใช้โมเดล TensorFlow Lite แต่ไม่จำเป็น
ตัวตรวจจับวัตถุจะเริ่มต้นได้โดยใช้การตั้งค่าปัจจุบันบนเธรดที่ใช้งานอยู่ คุณสามารถใช้ผู้รับมอบสิทธิ์ CPU และ NNAPI กับตัวตรวจจับที่สร้างขึ้นบนเธรดหลักและใช้กับเธรดพื้นหลัง แต่เธรดที่เตรียมใช้งานตัวตรวจจับต้องใช้ผู้รับมอบสิทธิ์ GPU
ผู้รับมอบสิทธิ์ถูกตั้งค่าภายในฟังก์ชัน ObjectDetectionHelper.setupObjectDetector()
:
when (currentDelegate) {
DELEGATE_CPU -> {
// Default
}
DELEGATE_GPU -> {
if (CompatibilityList().isDelegateSupportedOnThisDevice) {
baseOptionsBuilder.useGpu()
} else {
objectDetectorListener?.onError("GPU is not supported on this device")
}
}
DELEGATE_NNAPI -> {
baseOptionsBuilder.useNnapi()
}
}
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้การเร่งความเร็วด้วยฮาร์ดแวร์ด้วย TensorFlow Lite โปรดดูที่ TensorFlow Lite Delegates
เตรียมข้อมูลสำหรับโมเดล
ในแอป Android โค้ดของคุณจะให้ข้อมูลแก่โมเดลสำหรับการตีความโดยการแปลงข้อมูลที่มีอยู่ เช่น กรอบรูปภาพ ให้เป็นรูปแบบข้อมูล Tensor ที่โมเดลของคุณสามารถประมวลผลได้ ข้อมูลในเทนเซอร์ที่คุณส่งไปยังโมเดลจะต้องมีขนาดหรือรูปร่างเฉพาะที่ตรงกับรูปแบบของข้อมูลที่ใช้ในการฝึกโมเดล
โมเดล EfficientDet-Lite0 ที่ใช้ในตัวอย่างโค้ดนี้ยอมรับเทนเซอร์ที่แสดงรูปภาพที่มีขนาด 320 x 320 โดยมีสามแชนเนล (แดง น้ำเงิน และเขียว) ต่อพิกเซล แต่ละค่าในเทนเซอร์จะมีไบต์เดียวระหว่าง 0 ถึง 255 ดังนั้น เพื่อเรียกใช้การคาดการณ์กับรูปภาพใหม่ แอปของคุณต้องแปลงข้อมูลรูปภาพนั้นเป็นออบเจ็กต์ข้อมูล Tensor ที่มีขนาดและรูปร่างดังกล่าว Vision API ของไลบรารีงาน TensorFlow Lite จัดการการเปลี่ยนแปลงข้อมูลให้กับคุณ
แอปใช้ออบเจ็กต์ ImageAnalysis
เพื่อดึงภาพจากกล้อง วัตถุนี้เรียกฟังก์ชัน detectObject
ด้วยบิตแมปจากกล้อง ข้อมูลจะถูกปรับขนาดและหมุนโดยอัตโนมัติโดย ImageProcessor
เพื่อให้ตรงตามข้อกำหนดข้อมูลรูปภาพของโมเดล จากนั้นภาพจะถูกแปลเป็นวัตถุ TensorImage
ในการเตรียมข้อมูลจากระบบย่อยของกล้องที่จะประมวลผลโดยรุ่น ML:
สร้างออบเจ็กต์
ImageAnalysis
เพื่อแยกรูปภาพในรูปแบบที่ต้องการ:imageAnalyzer = ImageAnalysis.Builder() .setTargetAspectRatio(AspectRatio.RATIO_4_3) .setTargetRotation(fragmentCameraBinding.viewFinder.display.rotation) .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) .setOutputImageFormat(OUTPUT_IMAGE_FORMAT_RGBA_8888) .build() ...
เชื่อมต่อเครื่องวิเคราะห์กับระบบย่อยของกล้องและสร้างบัฟเฟอร์บิตแมปเพื่อเก็บข้อมูลที่ได้รับจากกล้อง:
.also { it.setAnalyzer(cameraExecutor) { image -> if (!::bitmapBuffer.isInitialized) { bitmapBuffer = Bitmap.createBitmap( image.width, image.height, Bitmap.Config.ARGB_8888 ) } detectObjects(image) } }
แยกข้อมูลรูปภาพเฉพาะที่โมเดลต้องการ และส่งข้อมูลการหมุนรูปภาพ:
private fun detectObjects(image: ImageProxy) { //Copy out RGB bits to the shared bitmap buffer image.use {bitmapBuffer.copyPixelsFromBuffer(image.planes[0].buffer) } val imageRotation = image.imageInfo.rotationDegrees objectDetectorHelper.detect(bitmapBuffer, imageRotation) }
ทำการแปลงข้อมูลขั้นสุดท้ายให้เสร็จสิ้น และเพิ่มข้อมูลรูปภาพลงในออบเจ็กต์
TensorImage
ดังที่แสดงในเมธอดObjectDetectorHelper.detect()
ของแอปตัวอย่าง:val imageProcessor = ImageProcessor.Builder().add(Rot90Op(-imageRotation / 90)).build() // Preprocess the image and convert it into a TensorImage for detection. val tensorImage = imageProcessor.process(TensorImage.fromBitmap(image))
เรียกใช้การคาดการณ์
ในแอป Android เมื่อคุณสร้างออบเจ็กต์ TensorImage ด้วยข้อมูลรูปภาพในรูปแบบที่ถูกต้อง คุณจะเรียกใช้โมเดลกับข้อมูลนั้นเพื่อสร้างการคาดคะเนหรือ การอนุมาน ได้
ในคลาส fragments/CameraFragment.kt
ของแอปตัวอย่าง ออบเจ็กต์ imageAnalyzer
ภายในฟังก์ชัน bindCameraUseCases
จะส่งข้อมูลไปยังโมเดลโดยอัตโนมัติเพื่อการคาดการณ์เมื่อแอปเชื่อมต่อกับกล้อง
แอปใช้เมธอด cameraProvider.bindToLifecycle()
เพื่อจัดการตัวเลือกกล้อง หน้าต่างแสดงตัวอย่าง และการประมวลผลโมเดล ML คลาส ObjectDetectorHelper.kt
จัดการการส่งผ่านข้อมูลรูปภาพไปยังโมเดล หากต้องการรันโมเดลและสร้างการคาดการณ์จากข้อมูลรูปภาพ:
เรียกใช้การทำนายโดยส่งข้อมูลภาพไปยังฟังก์ชันการทำนายของคุณ:
val results = objectDetector?.detect(tensorImage)
ออบเจ็กต์ล่าม TensorFlow Lite รับข้อมูลนี้ รันกับโมเดล และสร้างรายการการคาดการณ์ สำหรับการประมวลผลข้อมูลอย่างต่อเนื่องโดยโมเดล ให้ใช้เมธอด runForMultipleInputsOutputs()
เพื่อไม่ให้อ็อบเจ็กต์ Interpreter ถูกสร้างขึ้น และถูกลบออกโดยระบบสำหรับการรันการคาดการณ์แต่ละครั้ง
จัดการเอาต์พุตโมเดล
ในแอป Android ของคุณ หลังจากที่คุณเรียกใช้ข้อมูลรูปภาพโดยเทียบกับโมเดลการตรวจจับออบเจ็กต์ แอปจะสร้างรายการการคาดการณ์ที่โค้ดแอปของคุณจะต้องจัดการโดยดำเนินการตรรกะทางธุรกิจเพิ่มเติม แสดงผลลัพธ์ให้ผู้ใช้เห็น หรือดำเนินการอื่นๆ
ผลลัพธ์ของโมเดล TensorFlow Lite ใดๆ จะแตกต่างกันไปในแง่ของจำนวนการคาดการณ์ที่สร้างขึ้น (หนึ่งรายการหรือหลายรายการ) และข้อมูลเชิงอธิบายสำหรับการคาดการณ์แต่ละรายการ ในกรณีของโมเดลการตรวจจับวัตถุ โดยทั่วไปการคาดการณ์จะรวมข้อมูลสำหรับกรอบขอบเขตซึ่งระบุตำแหน่งที่วัตถุถูกตรวจพบในรูปภาพ ในโค้ดตัวอย่าง ผลลัพธ์จะถูกส่งผ่านไปยังฟังก์ชัน onResults
ใน CameraFragment.kt
ซึ่งทำหน้าที่เป็น DetectorListener ในกระบวนการตรวจจับวัตถุ
interface DetectorListener {
fun onError(error: String)
fun onResults(
results: MutableList<Detection>?,
inferenceTime: Long,
imageHeight: Int,
imageWidth: Int
)
}
สำหรับแบบจำลองที่ใช้ในตัวอย่างนี้ การทำนายแต่ละรายการจะมีตำแหน่งของกรอบขอบเขตสำหรับออบเจ็กต์ ป้ายสำหรับออบเจ็กต์ และคะแนนการทำนายระหว่าง 0 ถึง 1 เป็นการลอยตัวที่แสดงถึงความเชื่อมั่นของการทำนาย โดย 1 คือคะแนนความเชื่อมั่นสูงสุด . โดยทั่วไป การทำนายที่มีคะแนนต่ำกว่า 50% (0.5) ถือว่าไม่สามารถสรุปได้ อย่างไรก็ตาม วิธีที่คุณจัดการกับผลลัพธ์การคาดการณ์ที่มีค่าต่ำนั้นขึ้นอยู่กับคุณและความต้องการของแอปพลิเคชันของคุณ
ในการจัดการผลลัพธ์การทำนายแบบจำลอง:
ใช้รูปแบบ Listener เพื่อส่งผลลัพธ์ไปยังโค้ดของแอปหรือออบเจ็กต์อินเทอร์เฟซผู้ใช้ แอปตัวอย่างใช้รูปแบบนี้เพื่อส่งผ่านผลลัพธ์การตรวจจับจากวัตถุ
ObjectDetectorHelper
ไปยังวัตถุCameraFragment
:objectDetectorListener.onResults( // instance of CameraFragment results, inferenceTime, tensorImage.height, tensorImage.width)
ดำเนินการกับผลลัพธ์ เช่น การแสดงคำทำนายแก่ผู้ใช้ ตัวอย่างวาดการซ้อนทับบนวัตถุ CameraPreview เพื่อแสดงผลลัพธ์:
override fun onResults( results: MutableList<Detection>?, inferenceTime: Long, imageHeight: Int, imageWidth: Int ) { activity?.runOnUiThread { fragmentCameraBinding.bottomSheetLayout.inferenceTimeVal.text = String.format("%d ms", inferenceTime) // Pass necessary information to OverlayView for drawing on the canvas fragmentCameraBinding.overlay.setResults( results ?: LinkedList<Detection>(), imageHeight, imageWidth ) // Force a redraw fragmentCameraBinding.overlay.invalidate() } }
เมื่อแบบจำลองส่งคืนผลลัพธ์การคาดการณ์ แอปพลิเคชันของคุณสามารถดำเนินการตามการคาดการณ์นั้นได้โดยการนำเสนอผลลัพธ์แก่ผู้ใช้ของคุณหรือดำเนินการตรรกะเพิ่มเติม ในกรณีของโค้ดตัวอย่าง แอปพลิเคชันจะวาดกรอบล้อมรอบวัตถุที่ระบุและแสดงชื่อคลาสบนหน้าจอ
ขั้นตอนถัดไป
- สำรวจการใช้งานต่างๆ ของ TensorFlow Lite ใน ตัวอย่าง
- เรียนรู้เพิ่มเติมเกี่ยวกับการใช้โมเดล Machine Learning กับ TensorFlow Lite ในส่วน โมเดล
- เรียนรู้เพิ่มเติมเกี่ยวกับการนำแมชชีนเลิร์นนิงไปใช้ในแอปพลิเคชันมือถือของคุณใน คู่มือนักพัฒนา TensorFlow Lite