งานตัวแบ่งกลุ่มรูปภาพช่วยให้คุณแบ่งรูปภาพออกเป็นภูมิภาคต่างๆ ตามที่กำหนดไว้แล้วได้ และใช้เอฟเฟกต์ภาพ เช่น การเบลอพื้นหลัง เหล่านี้ แสดงวิธีการใช้การแบ่งกลุ่มภาพกับแอป iOS
ตัวอย่างโค้ดที่อธิบายไว้ในวิธีการเหล่านี้มีอยู่ใน GitHub
คุณสามารถดูการทำงานนี้ได้ โดยดูที่ เว็บ การสาธิต สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ ให้ดูที่ ภาพรวม
ตัวอย่างโค้ด
ตัวอย่างโค้ดงาน MediaPipe มีการติดตั้งโค้ด แอปตัวแบ่งกลุ่มรูปภาพสำหรับ iOS
ตัวอย่างนี้ใช้ตัวแบ่งกลุ่มรูปภาพที่เอาต์พุตมาสก์หมวดหมู่ โดยใช้ กล้องบนอุปกรณ์ iOS จริงเพื่อแบ่งกลุ่มรูปภาพในการถ่ายทอดสด ฟีดกล้อง หรือรูปภาพและวิดีโอจากแกลเลอรีของอุปกรณ์
คุณสามารถใช้แอปนี้เป็นจุดเริ่มต้นสำหรับแอป iOS ของคุณเอง หรืออ้างอิงถึงแอป เมื่อแก้ไขแอปที่มีอยู่ โค้ดตัวอย่างเครื่องมือแบ่งกลุ่มรูปภาพถูกโฮสต์บน GitHub
ดาวน์โหลดโค้ด
วิธีการต่อไปนี้แสดงวิธีสร้างสำเนาตัวอย่างในเครื่อง โดยใช้เครื่องมือบรรทัดคำสั่ง git
วิธีดาวน์โหลดโค้ดตัวอย่าง
โคลนที่เก็บ Git โดยใช้คำสั่งต่อไปนี้
git clone https://github.com/google-ai-edge/mediapipe-samples/
นอกจากนี้ คุณสามารถกำหนดค่าอินสแตนซ์ Git ให้ใช้จุดชำระเงินแบบกระจัดกระจายเพื่อให้คุณมี เฉพาะไฟล์สำหรับแอปตัวอย่างตัวแบ่งกลุ่มรูปภาพเท่านั้น
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/image_segmentation/ios/
หลังจากสร้างโค้ดตัวอย่างในเวอร์ชันในเครื่องแล้ว คุณสามารถติดตั้ง ไลบรารีงาน MediaPipe เปิดโปรเจ็กต์โดยใช้ Xcode และเรียกใช้แอป สำหรับ โปรดดูวิธีการในคู่มือการการตั้งค่าสำหรับ iOS
องค์ประกอบหลัก
ไฟล์ต่อไปนี้มีโค้ดที่สำคัญสำหรับตัวอย่างตัวแบ่งกลุ่มรูปภาพ แอปพลิเคชัน:
- ImageSegmenterService.swift: เริ่มต้นโปรแกรมแบ่งกลุ่มรูปภาพ จัดการการเลือกโมเดล และเรียกใช้ การอนุมานเกี่ยวกับข้อมูลอินพุต
- CameraViewController.swift: ใช้ UI สำหรับโหมดป้อนข้อมูลฟีดกล้องแบบสดและแสดงภาพ รายการ
- MediaLibraryViewController.swift ใช้ UI สำหรับโหมดป้อนข้อมูลไฟล์ภาพนิ่งและไฟล์วิดีโอ และ จะแสดงผลลัพธ์ออกมาเป็นภาพ
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ และ โปรเจ็กต์โค้ดเพื่อใช้เครื่องมือแบ่งกลุ่มรูปภาพ สำหรับข้อมูลทั่วไปเกี่ยวกับการตั้งค่า สภาพแวดล้อมในการพัฒนาซอฟต์แวร์สำหรับการใช้งาน MediaPipe ซึ่งรวมถึงเวอร์ชันแพลตฟอร์ม โปรดดูคู่มือการตั้งค่าสำหรับ iOS
การอ้างอิง
เครื่องมือแบ่งกลุ่มรูปภาพใช้ไลบรารี MediaPipeTasksVision
ซึ่งต้องติดตั้ง
ด้วยการใช้ CocoaPods ไลบรารีใช้งานได้ทั้งกับแอป Swift และ Objective-C
และไม่จำเป็นต้องมีการตั้งค่าเฉพาะภาษาใดๆ เพิ่มเติม
ดูวิธีการติดตั้ง CocoaPods ใน macOS ได้ที่ CocoaPods
คู่มือการติดตั้ง
หากต้องการทราบวิธีการสร้าง Podfile
ด้วยพ็อดที่จำเป็นสำหรับ
โปรดดูที่การใช้
CocoaPods
เพิ่มพ็อด MediaPipeTasksVision ใน Podfile
โดยใช้โค้ดต่อไปนี้
target 'MyImageSegmenterApp' do
use_frameworks!
pod 'MediaPipeTasksVision'
end
หากแอปของคุณมีเป้าหมายการทดสอบ 1 หน่วย โปรดดูคู่มือการตั้งค่าสำหรับ
iOS หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า
Podfile
ของคุณ
รุ่น
งานเครื่องมือแบ่งกลุ่มรูปภาพ MediaPipe ต้องใช้โมเดลที่ผ่านการฝึก ซึ่งเข้ากันได้ กับงานนี้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกที่ใช้ได้สำหรับ เครื่องมือแบ่งกลุ่มรูปภาพ ดูภาพรวมงาน โมเดล
เลือกและดาวน์โหลดโมเดล แล้วเพิ่มลงในไดเรกทอรีโปรเจ็กต์โดยใช้ Xcode โปรดดูวิธีเพิ่มไฟล์ลงในโปรเจ็กต์ Xcode ที่หัวข้อการจัดการ ไฟล์และโฟลเดอร์ใน Xcode โปรเจ็กต์
ใช้พร็อพเพอร์ตี้ BaseOptions.modelAssetPath
เพื่อระบุเส้นทางไปยังโมเดล
ใน App Bundle ของคุณ ดูตัวอย่างโค้ดได้ในส่วนถัดไป
สร้างงาน
คุณสามารถสร้างงานเครื่องมือแบ่งกลุ่มรูปภาพได้โดยเรียกใช้ตัวเริ่มต้นรายการใดรายการหนึ่ง
เครื่องมือเริ่มต้น ImageSegmenter(options:)
จะยอมรับค่าสำหรับการกำหนดค่านี้
ตัวเลือก
หากคุณไม่ต้องการเครื่องมือแบ่งกลุ่มรูปภาพที่เริ่มต้นด้วยการกำหนดค่าที่กำหนดเอง
คุณสามารถใช้เครื่องมือเริ่มต้น ImageSegmenter(modelPath:)
เพื่อสร้าง
เครื่องมือแบ่งกลุ่มรูปภาพที่มีตัวเลือกเริ่มต้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่า
โปรดดูที่ภาพรวมการกำหนดค่า
งานตัวแบ่งกลุ่มรูปภาพรองรับอินพุต 3 ประเภท ได้แก่ ภาพนิ่งและไฟล์วิดีโอ
และสตรีมวิดีโอสด โดยค่าเริ่มต้น ImageSegmenter(modelPath:)
จะเริ่มต้น
สำหรับภาพนิ่ง เมื่อต้องการให้งานเริ่มต้นดำเนินการเพื่อประมวลผลวิดีโอ
หรือสตรีมวิดีโอสด ให้ใช้ ImageSegmenter(options:)
เพื่อระบุวิดีโอ
หรือไลฟ์สตรีมโหมดทำงาน นอกจากนี้โหมดสตรีมแบบสดยังต้องใช้ส่วนเสริม
ตัวเลือกการกำหนดค่า imageSegmenterLiveStreamDelegate
ซึ่งทำให้
ตัวจัดกลุ่มรูปภาพเพื่อส่งผลการแบ่งกลุ่มรูปภาพไปยังผู้รับมอบสิทธิ์
แบบไม่พร้อมกัน
เลือกแท็บที่ตรงกับโหมดการวิ่งของคุณเพื่อดูวิธีสร้างงาน และเรียกใช้การอนุมาน
Swift
รูปภาพ
import MediaPipeTasksVision let modelPath = Bundle.main.path(forResource: "model", ofType: "tflite") let options = ImageSegmenterOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .image options.shouldOutputCategoryMask = true options.shouldOutputConfidenceMasks = false let imageSegmenter = try ImageSegmenter(options: options)
วิดีโอ
import MediaPipeTasksVision let modelPath = Bundle.main.path(forResource: "model", ofType: "tflite") let options = ImageSegmenterOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .video options.shouldOutputCategoryMask = true options.shouldOutputConfidenceMasks = false let imageSegmenter = try ImageSegmenter(options: options)
ไลฟ์สด
import MediaPipeTasksVision // Class that conforms to the `imageSegmenterLiveStreamDelegate` protocol and // implements the method that the image segmenter calls once it finishes // performing segmentation of each input frame. class ImageSegmenterResultProcessor: NSObject, ImageSegmenterLiveStreamDelegate { func imageSegmenter( _ imageSegmenter: ImageSegmenter, didFinishSegmentation result: ImageSegmenterResult?, timestampInMilliseconds: Int, error: Error?) { // Process the image segmentation result or errors here. } } let modelPath = Bundle.main.path(forResource: "model", ofType: "tflite") let options = ImageSegmenterOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .liveStream options.shouldOutputCategoryMask = true options.shouldOutputConfidenceMasks = false // Set `imageSegmenterLiveStreamDelegate` to the object of the class that // confirms to the `ImageSegmenterLiveStreamDelegate` protocol. let processor = ImageSegmenterResultProcessor() options.imageSegmenterLiveStreamDelegate = processor let imageSegmenter = try ImageSegmenter(options: options)
Objective-C
รูปภาพ
@import MediaPipeTasksVision; NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model" ofType:@"tflite"]; MPPImageSegmenterOptions *options = [[MPPImageSegmenterOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeImage; options.shouldOutputCategoryMask = YES; options.shouldOutputConfidenceMasks = NO; MPPImageSegmenter *imageSegmenter = [[MPPImageSegmenter alloc] initWithOptions:options error:nil];
วิดีโอ
@import MediaPipeTasksVision; NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model" ofType:@"tflite"]; MPPImageSegmenterOptions *options = [[MPPImageSegmenterOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeVideo; options.shouldOutputCategoryMask = YES; options.shouldOutputConfidenceMasks = NO; MPPImageSegmenter *imageSegmenter = [[MPPImageSegmenter alloc] initWithOptions:options error:nil];
ไลฟ์สด
@import MediaPipeTasksVision; // Class that conforms to the `MPPImageSegmenterLiveStreamDelegate` protocol // and implements the method that the image segmenter calls once it finishes // performing segmentation of each input frame. @interface APPImageSegmenterResultProcessor : NSObject@end @implementation APPImageSegmenterResultProcessor - (void)imageSegmenter:(MPPImageSegmenter *)imageSegmenter didFinishSegmentationWithResult:(MPPImageSegmenterResult *)imageSegmenterResult timestampInMilliseconds:(NSInteger)timestampInMilliseconds error:(NSError *)error { // Process the image segmentation result or errors here. } @end NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model" ofType:@"tflite"]; MPPImageSegmenterOptions *options = [[MPPImageSegmenterOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeLiveStream; options.shouldOutputCategoryMask = YES; options.shouldOutputConfidenceMasks = NO; // Set `imageSegmenterLiveStreamDelegate` to the object of the class that // confirms to the `MPPImageSegmenterLiveStreamDelegate` protocol. APPImageSegmenterResultProcessor *processor = [APPImageSegmenterResultProcessor new]; options.imageSegmenterLiveStreamDelegate = processor; MPPImageSegmenter *imageSegmenter = [[MPPImageSegmenter alloc] initWithOptions:options error:nil];
การใช้โค้ดตัวอย่างของเครื่องมือแบ่งกลุ่มรูปภาพช่วยให้ผู้ใช้สลับระหว่าง โหมดการประมวลผลข้อมูล วิธีนี้ทำให้โค้ดการสร้างงานซับซ้อนขึ้นและ อาจไม่เหมาะกับกรณีการใช้งานของคุณ
ตัวเลือกการกำหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับแอป iOS
ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
---|---|---|---|
runningMode |
ตั้งค่าโหมดการทำงานสำหรับงาน มี 3 แบบ
โหมด: รูปภาพ: โหมดสำหรับอินพุตรูปภาพเดียว วิดีโอ: โหมดสำหรับเฟรมที่ถอดรหัสของวิดีโอ LIVE_STREAM: โหมดสำหรับสตรีมแบบสดของอินพุต เช่น ข้อมูลจากกล้อง ในโหมดนี้ ImageSegmenterLiveStreamDelegate
ต้องตั้งค่าเป็นอินสแตนซ์ของคลาสที่นำฟังก์ชัน
ImageSegmenterLiveStreamDelegate เพื่อรับการแบ่งกลุ่ม
ไม่พร้อมกัน
|
{RunningMode.image, RunningMode.video, RunningMode.liveStream } |
RunningMode.image |
shouldOutputCategoryMask |
หากตั้งค่าเป็น True เอาต์พุตจะมีมาสก์การแบ่งกลุ่ม
เป็นรูปภาพ uint8 โดยที่ค่าพิกเซลแต่ละค่าจะระบุหมวดหมู่ที่ชนะ
|
{True, False } |
False |
shouldOutputConfidenceMasks |
หากตั้งค่าเป็น True เอาต์พุตจะมีมาสก์การแบ่งกลุ่ม
เป็นภาพค่าจำนวนลอยตัว โดยที่ค่าจำนวนลอยตัวแต่ละค่าแสดงความเชื่อมั่น
ตารางคะแนนของหมวดหมู่ |
{True, False } |
True |
displayNamesLocale |
ตั้งค่าภาษาของป้ายกำกับที่จะใช้กับชื่อที่แสดงซึ่งระบุไว้ใน
ข้อมูลเมตาของโมเดลงาน (หากมี) ค่าเริ่มต้นคือ en สำหรับ
ภาษาอังกฤษ คุณเพิ่มป้ายกำกับที่แปลแล้วลงในข้อมูลเมตาของโมเดลที่กำหนดเองได้
โดยใช้ TensorFlow Lite Metadata Writer API |
รหัสภาษา | en |
result_callback |
ตั้งค่า Listener ผลลัพธ์เพื่อรับผลลัพธ์การแบ่งกลุ่ม
แบบไม่พร้อมกันเมื่อตัวแบ่งกลุ่มรูปภาพอยู่ในโหมด LIVE_STREAM
ใช้ได้เมื่อตั้งค่าโหมดวิ่งเป็น LIVE_STREAM เท่านั้น |
ไม่มี | ไม่มี |
เมื่อตั้งค่าโหมดทำงานเป็น LIVE_STREAM
เครื่องมือแบ่งกลุ่มรูปภาพจำเป็นต้องใช้
ตัวเลือกการกำหนดค่าimageSegmenterLiveStreamDelegate
เพิ่มเติม
จะทำให้ตัวแบ่งกลุ่มรูปภาพแสดงผลลัพธ์การแบ่งกลุ่มรูปภาพแบบไม่พร้อมกัน
ผู้ได้รับมอบสิทธิ์ต้องใช้
imageSegmenter(_:didFinishSegmentation:timestampInMilliseconds:error:)
วิธี
ซึ่งโปรแกรมแบ่งกลุ่มรูปภาพเรียกใช้หลังจากประมวลผลผลลัพธ์ของการดำเนินการ
ในแต่ละเฟรม
ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
---|---|---|---|
imageSegmenterLiveStreamDelegate |
เปิดใช้ตัวแบ่งกลุ่มรูปภาพเพื่อรับผลลัพธ์ของรูปภาพที่ดำเนินการ
แบบไม่พร้อมกันในโหมดสตรีมแบบสด คลาสที่มีอินสแตนซ์
ที่ตั้งค่าเป็นพร็อพเพอร์ตี้นี้ต้องใช้ฟิลด์
imageSegmenter(_:didFinishSegmentation:timestampInMilliseconds:error:)
|
ไม่เกี่ยวข้อง | ไม่ได้ตั้งค่า |
เตรียมข้อมูล
คุณต้องแปลงรูปภาพหรือเฟรมอินพุตเป็นวัตถุ MPImage
ก่อน
แล้วส่งต่อไปยังตัวแบ่งกลุ่มรูปภาพ MPImage
รองรับรูปภาพ iOS หลายประเภท
และใช้รูปแบบดังกล่าวในโหมด
การทำงานใดก็ได้เพื่ออนุมาน สำหรับข้อมูลเพิ่มเติม
ข้อมูลเกี่ยวกับ MPImage
โปรดดู
MPImage API
เลือกรูปแบบรูปภาพ iOS ตามกรณีการใช้งานและโหมดการทำงาน
แอปพลิเคชันต้องการ MPImage
ยอมรับ UIImage
, CVPixelBuffer
และ
CMSampleBuffer
รูปแบบรูปภาพ iOS
UIImage
รูปแบบ UIImage
เหมาะกับโหมดการวิ่งต่อไปนี้
รูปภาพ: รูปภาพจาก App Bundle แกลเลอรีของผู้ใช้ หรือระบบไฟล์ที่จัดรูปแบบเป็น แปลงรูปภาพ
UIImage
รูปเป็นวัตถุMPImage
ได้วิดีโอ: ใช้ AVAssetImageGenerator เพื่อแยกเฟรมวิดีโอไปยัง CGImage รูปแบบ แล้วแปลงเป็น
UIImage
รูปภาพ
Swift
// Load an image on the user's device as an iOS `UIImage` object. // Convert the `UIImage` object to a MediaPipe's Image object having the default // orientation `UIImage.Orientation.up`. let image = try MPImage(uiImage: image)
Objective-C
// Load an image on the user's device as an iOS `UIImage` object. // Convert the `UIImage` object to a MediaPipe's Image object having the default // orientation `UIImageOrientationUp`. MPImage *image = [[MPPImage alloc] initWithUIImage:image error:nil];
ตัวอย่างนี้จะเริ่มต้น MPImage
ด้วยค่าเริ่มต้น
UIImage.Orientation.Up
การวางแนว คุณสามารถเริ่มต้น MPImage
ด้วย
UIImage.Orientation
ตัวแบ่งกลุ่มรูปภาพไม่รองรับการวางแนวแบบมิเรอร์ เช่น .upMirrored
.downMirrored
, .leftMirrored
, .rightMirrored
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ UIImage
โปรดดูที่ UIImage ของ Apple Developer
เอกสารประกอบ
CVPixelBuffer
รูปแบบ CVPixelBuffer
เหมาะกับแอปพลิเคชันที่สร้างเฟรม
และใช้ CoreImage ของ iOS
สำหรับการประมวลผลข้อมูล
รูปแบบ CVPixelBuffer
เหมาะกับโหมดการวิ่งต่อไปนี้
รูปภาพ: แอปที่สร้างรูปภาพ
CVPixelBuffer
รูปหลังจากประมวลผล ที่ใช้เฟรมเวิร์กCoreImage
ของ iOS สามารถส่งไปยังเครื่องมือแบ่งกลุ่มรูปภาพใน โหมดเรียกใช้รูปภาพวิดีโอ: แปลงเฟรมวิดีโอเป็นรูปแบบ
CVPixelBuffer
ได้สำหรับ การประมวลผล จากนั้นจึงส่งไปยังเครื่องมือแบ่งกลุ่มรูปภาพในโหมดวิดีโอสตรีมแบบสด: ระบบอาจแปลงแอปที่ใช้กล้อง iOS ในการสร้างเฟรม เป็นรูปแบบ
CVPixelBuffer
เพื่อการประมวลผลก่อนที่จะส่งไปยัง เครื่องมือแบ่งกลุ่มรูปภาพในโหมดสตรีมแบบสด
Swift
// Obtain a CVPixelBuffer. // Convert the `CVPixelBuffer` object to a MediaPipe's Image object having the default // orientation `UIImage.Orientation.up`. let image = try MPImage(pixelBuffer: pixelBuffer)
Objective-C
// Obtain a CVPixelBuffer. // Convert the `CVPixelBuffer` object to a MediaPipe's Image object having the // default orientation `UIImageOrientationUp`. MPImage *image = [[MPPImage alloc] initWithUIImage:image error:nil];
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับ CVPixelBuffer
ได้ที่ CVPixelBuffer Apple
นักพัฒนาซอฟต์แวร์
เอกสารประกอบ
CMSampleBuffer
รูปแบบ CMSampleBuffer
จะจัดเก็บตัวอย่างสื่อของประเภทสื่อแบบเดียวกัน และ
เหมาะกับโหมดทำงานของสตรีมแบบสด เฟรมแบบสดจากกล้อง iOS
ส่งแบบไม่พร้อมกันในรูปแบบ CMSampleBuffer
โดย iOS
AVCaptureVideoDataOutput
Swift
// Obtain a CMSampleBuffer. // Convert the `CMSampleBuffer` object to a MediaPipe's Image object having the default // orientation `UIImage.Orientation.up`. let image = try MPImage(sampleBuffer: sampleBuffer)
Objective-C
// Obtain a `CMSampleBuffer`. // Convert the `CMSampleBuffer` object to a MediaPipe's Image object having the // default orientation `UIImageOrientationUp`. MPImage *image = [[MPPImage alloc] initWithSampleBuffer:sampleBuffer error:nil];
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ CMSampleBuffer
โปรดดู CMSampleBuffer Apple
นักพัฒนาซอฟต์แวร์
เอกสารประกอบ
เรียกใช้งาน
หากต้องการเรียกใช้ตัวแบ่งกลุ่มรูปภาพ ให้ใช้เมธอด segment()
เฉพาะ
โหมดทำงาน:
- ภาพนิ่ง:
segment(image:)
- วิดีโอ:
segment(videoFrame:timestampInMilliseconds:)
- สตรีมสด:
segmentAsync(image:timestampInMilliseconds:)
ตัวอย่างโค้ดต่อไปนี้แสดงตัวอย่างง่ายๆ ของวิธีเรียกใช้เครื่องมือแบ่งกลุ่มรูปภาพใน โหมดการทำงานต่างๆ ต่อไปนี้
Swift
รูปภาพ
let result = try imageSegmenter.segment(image: image)
วิดีโอ
let result = try imageSegmenter.segment( videoFrame: image, timestampInMilliseconds: timestamp)
สตรีมแบบสด
try imageSegmenter.segmentAsync( image: image, timestampInMilliseconds: timestamp)
Objective-C
รูปภาพ
MPPImageSegmenterResult *result = [imageSegmenter segmentImage:image error:nil];
วิดีโอ
MPPImageSegmenterResult *result = [imageSegmenter segmentVideoFrame:image timestampInMilliseconds:timestamp error:nil];
สตรีมแบบสด
BOOL success = [imageSegmenter segmentAsyncImage:image timestampInMilliseconds:timestamp error:nil];
ตัวอย่างโค้ดตัวแบ่งกลุ่มรูปภาพแสดงการใช้งานของแต่ละโหมดเหล่านี้
รายละเอียดเพิ่มเติม segment(image:)
segment(videoFrame:timestampInMilliseconds:)
และ
segmentAsync(image:timestampInMilliseconds:)
โปรดทราบดังต่อไปนี้
เมื่อทำงานในโหมดวิดีโอหรือโหมดสตรีมแบบสด คุณต้องระบุ การประทับเวลาของเฟรมอินพุตเป็นงานตัวแบ่งกลุ่มรูปภาพ
เมื่อทำงานในโหมดรูปภาพหรือวิดีโอ งานเครื่องมือแบ่งกลุ่มรูปภาพจะบล็อก เทรดปัจจุบันจนกว่าจะประมวลผลรูปภาพหรือเฟรมอินพุตเสร็จสิ้น ถึง หลีกเลี่ยงการบล็อกเทรดปัจจุบัน เรียกใช้การประมวลผลในเบื้องหลัง เทรดโดยใช้ iOS ผู้มอบหมายหรือ NSOperation ของ Google
เมื่อทำงานในโหมดสตรีมแบบสด งานเครื่องมือแบ่งกลุ่มรูปภาพจะแสดงผลทันที และไม่บล็อกชุดข้อความปัจจุบัน โดยเรียกใช้
imageSegmenter(_:didFinishSegmentation:timestampInMilliseconds:error:)
ด้วยตัวแบ่งกลุ่มรูปภาพหลังจากประมวลผลเฟรมอินพุตแต่ละเฟรม ตัวจัดกลุ่มรูปภาพเรียกใช้เมธอดนี้แบบไม่พร้อมกันในอนุกรมเฉพาะ คิวการจัดส่งสินค้า สำหรับการแสดงผลลัพธ์ในอินเทอร์เฟซผู้ใช้ ให้ ไปยังคิวหลักหลังจากประมวลผลผลลัพธ์ หาก เรียกใช้ฟังก์ชันsegmentAsync
เมื่องานเครื่องมือแบ่งกลุ่มรูปภาพไม่ว่าง เพื่อประมวลผลเฟรมอื่น ตัวแบ่งกลุ่มรูปภาพจะไม่สนใจเฟรมอินพุตใหม่
จัดการและแสดงผลลัพธ์
หลังจากเรียกใช้การอนุมาน งานเครื่องมือแบ่งกลุ่มรูปภาพจะแสดงผล ImageSegmenterResult
ซึ่งมีผลลัพธ์ของงานการแบ่งกลุ่ม เนื้อหาของ
เอาต์พุตจะขึ้นอยู่กับประเภทเอาต์พุตที่คุณตั้งค่าไว้เมื่อ
กำหนดค่าแล้ว
งานนั้น
รูปภาพต่อไปนี้แสดงภาพเอาต์พุตงานสำหรับหมวดหมู่
มาสก์ค่า ช่วงมาสก์หมวดหมู่คือ [0, 255]
และค่าพิกเซลแต่ละค่า
แสดงดัชนีหมวดหมู่ที่ชนะของเอาต์พุตโมเดล หมวดหมู่ที่ชนะ
ดัชนีได้คะแนนสูงสุดในบรรดาหมวดหมู่ ที่โมเดลสามารถรับรู้ได้
ผลลัพธ์มาสก์รูปภาพและหมวดหมู่ต้นฉบับ แหล่งที่มาของรูปภาพจาก VOC ของ Pascal ปี 2012 ชุดข้อมูล
โค้ดตัวอย่างตัวแบ่งกลุ่มรูปภาพแสดงวิธีแสดงตัวแบ่งกลุ่มรูปภาพ ผลลัพธ์ โปรดดู โค้ด ตัวอย่าง เพื่อดูรายละเอียด