คู่มือการแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟสำหรับ Android

งานเครื่องมือแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟ MediaPipe จะใช้ตำแหน่งในรูปภาพ ซึ่งเป็นการประมาณขอบเขตของ ที่ตำแหน่งนั้น และแสดงการแบ่งกลุ่มของออบเจ็กต์เป็น ข้อมูลภาพ คำแนะนำต่อไปนี้แสดงวิธีใช้ตัวจัดกลุ่มรูปภาพแบบโต้ตอบ แอป Android ตัวอย่างโค้ดที่อธิบายในวิธีการเหล่านี้มีอยู่ใน GitHub สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ โปรดดูภาพรวม

ตัวอย่างโค้ด

ตัวอย่างโค้ดงาน MediaPipe คือการใช้งานตัวจัดกลุ่มรูปภาพแบบอินเทอร์แอกทีฟอย่างง่ายๆ แอปสำหรับ Android ตัวอย่างนี้ใช้ได้กับรูปภาพที่เลือกจากแกลเลอรีของอุปกรณ์

คุณสามารถใช้แอปนี้เป็นจุดเริ่มต้นสำหรับแอป Android ของคุณเอง หรืออ้างอิงถึงแอปนั้น เมื่อแก้ไขแอปที่มีอยู่ โค้ดตัวอย่างเครื่องมือแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟโฮสต์อยู่บน GitHub

ดาวน์โหลดโค้ด

วิธีการต่อไปนี้แสดงวิธีสร้างสำเนาตัวอย่างในเครื่อง โดยใช้เครื่องมือบรรทัดคำสั่ง git

วิธีดาวน์โหลดโค้ดตัวอย่าง

  1. โคลนที่เก็บ Git โดยใช้คำสั่งต่อไปนี้
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. คุณสามารถกำหนดค่าอินสแตนซ์ Git ให้ใช้การชำระเงินแบบกระจัดกระจายได้ เพื่อให้คุณมีเพียงไฟล์สำหรับแอปตัวอย่างเครื่องมือแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟ
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/interactive_segmentation/android
    

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

องค์ประกอบสำคัญ

ไฟล์ต่อไปนี้มีโค้ดที่สำคัญสำหรับภาพนี้ การประยุกต์ใช้ตัวอย่างการแบ่งกลุ่มลูกค้า:

  • InteractiveSegmentationHelper.kt - เริ่มต้นงานเครื่องมือแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟและจัดการโมเดลและมอบสิทธิ์ มากมาย
  • OverlayView.kt - จัดการและจัดรูปแบบผลการแบ่งกลุ่ม

ตั้งค่า

ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ และ เพื่อใช้เครื่องมือแบ่งกลุ่มรูปภาพเชิงโต้ตอบ สำหรับข้อมูลทั่วไปเกี่ยวกับ การตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ของคุณสำหรับการใช้งาน MediaPipe ซึ่งรวมถึง โปรดดูข้อกำหนดเวอร์ชันของแพลตฟอร์ม คู่มือการตั้งค่าสำหรับ Android

การอ้างอิง

เครื่องมือแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟใช้ไลบรารี com.google.mediapipe:tasks-vision เพิ่มรายการนี้ จะขึ้นอยู่กับไฟล์ build.gradle ของไฟล์ โปรเจ็กต์การพัฒนาแอป Android นำเข้าทรัพยากร Dependency ที่จำเป็นด้วย โค้ดต่อไปนี้

dependencies {
    ...
    implementation 'com.google.mediapipe:tasks-vision:latest.release'
}

รุ่น

งานเครื่องมือแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟ MediaPipe ต้องใช้โมเดลที่ผ่านการฝึก ซึ่งสามารถทำงานร่วมกับฟังก์ชันดังกล่าว งาน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกที่ใช้ได้สำหรับเครื่องมือแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟ โปรดดู ภาพรวมงานส่วนโมเดล

เลือกและดาวน์โหลดโมเดล จากนั้นเก็บโมเดลไว้ในไดเรกทอรีโปรเจ็กต์ของคุณ:

<dev-project-root>/src/main/assets

ใช้เมธอด BaseOptions.Builder.setModelAssetPath() เพื่อระบุเส้นทาง ที่โมเดลใช้อยู่ วิธีนี้จะปรากฏในตัวอย่างโค้ดใน

ในตัวแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟ โค้ดตัวอย่าง มีการกำหนดโมเดลในInteractiveSegmenterHelper.kt ในฟังก์ชัน setupInteractiveSegmenter()

สร้างงาน

คุณใช้ฟังก์ชัน createFromOptions เพื่อสร้างงานได้ ฟังก์ชัน createFromOptions ยอมรับตัวเลือกการกำหนดค่าดังต่อไปนี้ ประเภทเอาต์พุตของมาสก์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่า โปรดดูที่ภาพรวมการกำหนดค่า

InteractiveSegmenterOptions options =
  InteractiveSegmenterOptions.builder()
    .setBaseOptions(
      BaseOptions.builder().setModelAssetPath("model.tflite").build())
    .setOutputCategoryMask(true)
    .setOutputConfidenceMasks(false)
    .setResultListener((result, inputImage) -> {
         // Process the segmentation result here.
    })
    .setErrorListener(exception -> {
         // Process the segmentation errors here.
    })    
    .build();
interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);

สำหรับตัวอย่างโดยละเอียดเพิ่มเติมของการตั้งค่านี้ โปรดดูที่ InteractiveSegmenterHelper ฟังก์ชันคลาส setupInteractiveSegmenter()

ตัวเลือกการกำหนดค่า

งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับแอป Android

ชื่อตัวเลือก คำอธิบาย ช่วงค่า ค่าเริ่มต้น
outputCategoryMask หากตั้งค่าเป็น True เอาต์พุตจะมีมาสก์การแบ่งกลุ่ม เป็นรูปภาพ uint8 โดยที่ค่าพิกเซลแต่ละค่าจะระบุว่าพิกเซลเป็นส่วนหนึ่งของ วัตถุที่อยู่บริเวณที่สนใจ {True, False} False
outputConfidenceMasks หากตั้งค่าเป็น True เอาต์พุตจะมีมาสก์การแบ่งกลุ่ม เป็นภาพค่าจำนวนลอยตัว โดยที่ค่าจำนวนลอยตัวแต่ละค่าแสดงความเชื่อมั่น พิกเซลเป็นส่วนหนึ่งของวัตถุที่อยู่บริเวณที่สนใจ {True, False} True
displayNamesLocale ตั้งค่าภาษาของป้ายกำกับที่จะใช้กับชื่อที่แสดงซึ่งระบุไว้ใน ข้อมูลเมตาของโมเดลงาน (หากมี) ค่าเริ่มต้นคือ en สำหรับ ภาษาอังกฤษ คุณเพิ่มป้ายกำกับที่แปลแล้วลงในข้อมูลเมตาของโมเดลที่กำหนดเองได้ โดยใช้ TensorFlow Lite Metadata Writer API รหัสภาษา en
errorListener ตั้งค่า Listener ข้อผิดพลาดที่ไม่บังคับ ไม่มี ไม่ได้ตั้งค่า

เตรียมข้อมูล

ตัวแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟจะทำงานร่วมกับรูปภาพ และงานดังกล่าวจะจัดการอินพุตข้อมูล การประมวลผลล่วงหน้า ซึ่งรวมถึงการปรับขนาด การหมุน และการปรับค่าให้เป็นมาตรฐาน คุณจะต้องแปลงรูปภาพอินพุตเป็น com.google.mediapipe.framework.image.MPImage ก่อนที่จะส่งไปยัง งาน

import com.google.mediapipe.framework.image.BitmapImageBuilder;
import com.google.mediapipe.framework.image.MPImage;

// Load an image on the users device as a Bitmap object using BitmapFactory.

// Convert an Androids Bitmap object to a MediaPipes Image object.
MPImage mpImage = new BitmapImageBuilder(bitmap).build();
RegionOfInterest roi = RegionOfInterest.create(
    NormalizedKeypoint.create(
        normX * it.width,
        normY * it.height
    )
);

ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);

ในโค้ดตัวอย่างของเครื่องมือแบ่งกลุ่มรูปภาพแบบอินเทอร์แอกทีฟ มีการกำหนดฟังก์ชัน segment ใน InteractiveSegmenterHelper.kt

จัดการและแสดงผลลัพธ์

เมื่อเรียกใช้การอนุมาน งานของตัวจัดกลุ่มรูปภาพแบบอินเทอร์แอกทีฟจะแสดงผล ImageSegmenterResult ซึ่งมีผลลัพธ์ของ การแบ่งกลุ่มลูกค้า เนื้อหาของเอาต์พุตอาจมีมาสก์หมวดหมู่ มาสก์ความเชื่อมั่น หรือทั้งสองอย่าง ขึ้นอยู่กับสิ่งที่คุณตั้งค่าไว้เมื่อ กำหนดค่างานไว้

ส่วนต่อไปนี้จะอธิบายเพิ่มเติมถึงข้อมูลเอาต์พุตจากงานนี้

มาสก์หมวดหมู่

รูปภาพต่อไปนี้แสดงภาพเอาต์พุตงานสำหรับหมวดหมู่ มาสก์ค่าที่มีการระบุจุดที่น่าสนใจ แต่ละพิกเซลคือ uint8 ที่ระบุว่าพิกเซลเป็นส่วนหนึ่งของวัตถุที่อยู่ในพื้นที่ของ ความสนใจ วงกลมสีขาวดำในรูปภาพที่ 2 ระบุถึงรูปภาพที่เลือก สถานที่ที่สนใจ

ผลลัพธ์มาสก์รูปภาพและหมวดหมู่ต้นฉบับ แหล่งที่มาของรูปภาพจาก VOC ของ Pascal ปี 2012 ชุดข้อมูล

หน้ากากเสริมความมั่นใจ

เอาต์พุตสำหรับมาสก์ความเชื่อมั่นมีค่าแบบลอยระหว่าง [0, 1] สำหรับ ในแต่ละช่องทางป้อนภาพ ค่าที่สูงขึ้นแสดงถึงความเชื่อมั่นที่สูงขึ้นว่า พิกเซลภาพเป็นส่วนหนึ่งของวัตถุที่อยู่บริเวณที่สนใจ