งานตัวแยกประเภทรูปภาพให้คุณทําการแยกประเภทรูปภาพได้ คุณสามารถใช้ งานนี้เพื่อระบุว่ารูปภาพแสดงถึงอะไรในชุดหมวดหมู่ที่กำหนดไว้ ในเวลาฝึกอบรม คำแนะนำเหล่านี้จะแสดงวิธีการใช้ตัวแยกประเภทรูปภาพใน แอป 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_classification/ios/
หลังจากสร้างโค้ดตัวอย่างในเวอร์ชันในเครื่องแล้ว คุณสามารถติดตั้ง ไลบรารีงาน MediaPipe เปิดโปรเจ็กต์โดยใช้ Xcode และเรียกใช้แอป สำหรับ โปรดดูวิธีการในคู่มือการการตั้งค่าสำหรับ iOS
องค์ประกอบสำคัญ
ไฟล์ต่อไปนี้มีโค้ดที่สำคัญสำหรับตัวอย่างตัวแยกประเภทรูปภาพ แอปพลิเคชัน:
- ImageClassifierService.swift: เริ่มต้นตัวแยกประเภทรูปภาพ จัดการการเลือกโมเดล และเรียกใช้การอนุมานเกี่ยวกับข้อมูลอินพุต
- CameraViewController.swift: ใช้ UI สำหรับโหมดป้อนข้อมูลฟีดกล้องแบบสดและแสดงภาพผลลัพธ์
- MediaLibraryViewController.swift ใช้ UI สำหรับโหมดป้อนข้อมูลภาพนิ่งและไฟล์วิดีโอ และแสดงภาพผลลัพธ์
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ และ เพื่อใช้ตัวแยกประเภทรูปภาพ สำหรับข้อมูลทั่วไปเกี่ยวกับการตั้งค่า สภาพแวดล้อมในการพัฒนาซอฟต์แวร์สำหรับการใช้งาน MediaPipe ซึ่งรวมถึงเวอร์ชันแพลตฟอร์ม โปรดดูคู่มือการตั้งค่าสำหรับ iOS
การอ้างอิง
ตัวแยกประเภทรูปภาพใช้ไลบรารี MediaPipeTasksVision
ซึ่งต้องติดตั้ง
ด้วยการใช้ CocoaPods ไลบรารีใช้งานได้ทั้งกับแอป Swift และ Objective-C
และไม่จำเป็นต้องมีการตั้งค่าเฉพาะภาษาใดๆ เพิ่มเติม
ดูวิธีการติดตั้ง CocoaPods ใน macOS ได้ที่ CocoaPods
คู่มือการติดตั้ง
หากต้องการทราบวิธีการสร้าง Podfile
ด้วยพ็อดที่จำเป็นสำหรับ
โปรดดูที่การใช้
CocoaPods
เพิ่มพ็อด MediaPipeTasksVision ใน Podfile
โดยใช้โค้ดต่อไปนี้
target 'MyImageClassifierApp' do
use_frameworks!
pod 'MediaPipeTasksVision'
end
หากแอปของคุณมีเป้าหมายการทดสอบ 1 หน่วย โปรดดูคู่มือการตั้งค่าสำหรับ
iOS หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า
Podfile
ของคุณ
รุ่น
งานตัวแยกประเภทรูปภาพ MediaPipe ต้องใช้โมเดลที่ผ่านการฝึกและเข้ากันได้ กับงานนี้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกที่ใช้ได้สำหรับ ตัวแยกประเภทรูปภาพ ดูภาพรวมงาน โมเดล
เลือกและดาวน์โหลดโมเดล แล้วเพิ่มลงในไดเรกทอรีโปรเจ็กต์โดยใช้ Xcode โปรดดูวิธีเพิ่มไฟล์ลงในโปรเจ็กต์ Xcode ที่หัวข้อการจัดการ ไฟล์และโฟลเดอร์ใน Xcode โปรเจ็กต์
ใช้พร็อพเพอร์ตี้ BaseOptions.modelAssetPath
เพื่อระบุเส้นทางไปยังโมเดล
ใน App Bundle ของคุณ ดูตัวอย่างโค้ดได้ในส่วนถัดไป
สร้างงาน
คุณสร้างงานตัวแยกประเภทรูปภาพได้โดยเรียกใช้ตัวเริ่มต้นรายการใดรายการหนึ่ง
ตัวเริ่มต้น ImageClassifier(options:)
กำหนดค่าตัวเลือกการกำหนดค่า
รวมทั้งโหมดการวิ่ง ภาษาของชื่อที่แสดง จำนวนผลลัพธ์สูงสุด ความเชื่อมั่น
เกณฑ์ รายการที่อนุญาตของหมวดหมู่ และรายการที่ปฏิเสธ
หากคุณไม่ต้องการให้ตัวแยกประเภทรูปภาพเริ่มต้นการกำหนดค่าที่กำหนดเองแล้ว
คุณสามารถใช้เครื่องมือเริ่มต้น ImageClassifier(modelPath:)
เพื่อสร้าง
ตัวแยกประเภทรูปภาพที่มีตัวเลือกเริ่มต้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่า
โปรดดูที่ภาพรวมการกำหนดค่า
งานตัวแยกประเภทรูปภาพรองรับอินพุตข้อมูล 3 ประเภท ได้แก่ ภาพนิ่ง ไฟล์วิดีโอ
และสตรีมวิดีโอสด โดยค่าเริ่มต้น ImageClassifier(modelPath:)
จะเริ่มต้น
สำหรับภาพนิ่ง เมื่อต้องการให้งานเริ่มต้นดำเนินการเพื่อประมวลผลวิดีโอ
หรือสตรีมวิดีโอสด ให้ใช้ ImageClassifier(options:)
เพื่อระบุ
โหมดทำงานแบบวิดีโอหรือสตรีมแบบสด นอกจากนี้ โหมดสตรีมแบบสดยังต้องใช้
ตัวเลือกการกำหนดค่า imageClassifierLiveStreamDelegate
เพิ่มเติม
ทำให้ตัวแยกประเภทรูปภาพสามารถแสดงผลการจัดประเภทรูปภาพไปยังฟังก์ชัน
มอบสิทธิ์แบบไม่พร้อมกัน
เลือกแท็บที่ตรงกับโหมดการวิ่งของคุณเพื่อดูวิธีสร้างงาน และเรียกใช้การอนุมาน
Swift
รูปภาพ
import MediaPipeTasksVision let modelPath = Bundle.main.path(forResource: "model", ofType: "tflite") let options = ImageClassifierOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .image options.maxResults = 5 let imageClassifier = try ImageClassifier(options: options)
วิดีโอ
import MediaPipeTasksVision let modelPath = Bundle.main.path(forResource: "model", ofType: "tflite") let options = ImageClassifierOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .video options.maxResults = 5 let imageClassifier = try ImageClassifier(options: options)
ไลฟ์สด
import MediaPipeTasksVision // Class that conforms to the `ImageClassifierLiveStreamDelegate` protocol and // implements the method that the image classifier calls once it // finishes performing classification on each input frame. class ImageClassifierResultProcessor: NSObject, ImageClassifierLiveStreamDelegate { func imageClassifier( _ imageClassifier: ImageClassifier, didFinishClassification result: ImageClassifierResult?, timestampInMilliseconds: Int, error: Error?) { // Process the image classifier result or errors here. } } let modelPath = Bundle.main.path( forResource: "model", ofType: "tflite") let options = ImageClassifierOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .liveStream options.maxResults = 5 // Assign an object of the class to the `imageClassifierLiveStreamDelegate` // property. let processor = ImageClassifierResultProcessor() options.imageClassifierLiveStreamDelegate = processor let imageClassifier = try ImageClassifier(options: options)
Objective-C
รูปภาพ
@import MediaPipeTasksVision; NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model" ofType:@"tflite"]; MPPImageClassifierOptions *options = [[MPPImageClassifierOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeImage; options.maxResults = 5; MPPImageClassifier *imageClassifier = [[MPPImageClassifier alloc] initWithOptions:options error:nil];
วิดีโอ
@import MediaPipeTasksVision; NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model" ofType:@"tflite"]; MPPImageClassifierOptions *options = [[MPPImageClassifierOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeVideo; options.maxResults = 5; MPPImageClassifier *imageClassifier = [[MPPImageClassifier alloc] initWithOptions:options error:nil];
ไลฟ์สด
@import MediaPipeTasksVision; // Class that conforms to the `MPPImageClassifierLiveStreamDelegate` protocol // and implements the method that the image classifier calls once it finishes // performing classification on each input frame. @interface APPImageClassifierResultProcessor : NSObject@end @implementation APPImageClassifierResultProcessor - (void)imageClassifier:(MPPImageClassifier *)imageClassifier didFinishClassificationWithResult:(MPPImageClassifierResult *)imageClassifierResult timestampInMilliseconds:(NSInteger)timestampInMilliseconds error:(NSError *)error { // Process the image classifier result or errors here. } @end NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model" ofType:@"tflite"]; MPPImageClassifierOptions *options = [[MPPImageClassifierOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeLiveStream; options.maxResults = 5; // Assign an object of the class to the `imageClassifierLiveStreamDelegate` // property. APPImageClassifierResultProcessor *processor = [APPImageClassifierResultProcessor new]; options.imageClassifierLiveStreamDelegate = processor; MPPImageClassifier *imageClassifier = [[MPPImageClassifier alloc] initWithOptions:options error:nil];
ตัวเลือกการกำหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับแอป iOS
ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
---|---|---|---|
runningMode |
ตั้งค่าโหมดการทำงานสำหรับงาน มี 3 แบบ
โหมด: รูปภาพ: โหมดสำหรับอินพุตรูปภาพเดียว วิดีโอ: โหมดสำหรับเฟรมที่ถอดรหัสของวิดีโอ LIVE_STREAM: โหมดสำหรับสตรีมแบบสดของอินพุต เช่น ข้อมูลจากกล้อง ในโหมดนี้ resultsListener ต้องเป็น ถูกเรียกให้ตั้งค่า Listener เพื่อรับผลลัพธ์ แบบไม่พร้อมกัน |
{RunningMode.image, RunningMode.video, RunningMode.liveStream } |
RunningMode.image |
displayNamesLocale |
ตั้งค่าภาษาของป้ายกำกับที่จะใช้กับชื่อที่แสดงซึ่งระบุไว้ใน
ข้อมูลเมตาของโมเดลงาน (หากมี) ค่าเริ่มต้นคือ en สำหรับ
ภาษาอังกฤษ คุณเพิ่มป้ายกำกับที่แปลแล้วลงในข้อมูลเมตาของโมเดลที่กำหนดเองได้
โดยใช้ TensorFlow Lite Metadata Writer API |
รหัสภาษา | en |
maxResults |
ตั้งค่าจำนวนผลลัพธ์การจัดประเภทที่มีคะแนนสูงสุด (ไม่บังคับ) เป็น ผลตอบแทน ถ้า < 0 ระบบจะแสดงผลลัพธ์ที่ใช้ได้ทั้งหมด | จำนวนบวกใดก็ได้ | -1 |
scoreThreshold |
ตั้งค่าเกณฑ์คะแนนการคาดการณ์ซึ่งจะลบล้างเกณฑ์ที่ระบุไว้ใน ข้อมูลเมตาของโมเดล (หากมี) ผลลัพธ์ที่ต่ำกว่าค่านี้ถูกปฏิเสธ | ทศนิยมใดก็ได้ | ไม่ได้ตั้งค่า |
categoryAllowlist |
ตั้งค่ารายการชื่อหมวดหมู่ที่อนุญาตซึ่งไม่บังคับ หากไม่ว่างเปล่า
ผลลัพธ์การจัดหมวดหมู่ที่มีชื่อหมวดหมู่ที่ไม่ได้อยู่ในชุดนี้จะ
ถูกกรองออก ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก
ตัวเลือกนี้ไม่เกี่ยวข้องกับ categoryDenylist และใช้
ทั้งคู่จะทําให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
categoryDenylist |
ตั้งค่ารายการตัวเลือกชื่อหมวดหมู่ที่ไม่ได้รับอนุญาต ถ้า
ไม่ว่างเปล่า ระบบจะกรองผลลัพธ์การจัดประเภทที่มีชื่อหมวดหมู่ในชุดนี้
ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก ตัวเลือกนี้มีผลร่วมกัน
เฉพาะตัวสำหรับ categoryAllowlist และการใช้ทั้ง 2 อย่างจะทำให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
resultListener |
ตั้งค่า Listener ผลลัพธ์เพื่อรับผลลัพธ์การจัดประเภท
แบบไม่พร้อมกันเมื่อตัวแยกประเภทรูปภาพอยู่ในสตรีมแบบสด
ใช้ได้เมื่อตั้งค่าโหมดวิ่งเป็น LIVE_STREAM เท่านั้น |
ไม่มี | ไม่ได้ตั้งค่า |
การกำหนดค่าสตรีมแบบสด
เมื่อตั้งค่าโหมดเรียกใช้เป็นสตรีมแบบสด ตัวแยกประเภทรูปภาพจำเป็นต้องใช้
ตัวเลือกการกำหนดค่า imageClassifierLiveStreamDelegate
เพิ่มเติม
ทำให้ตัวแยกประเภทสามารถส่งผลการจัดประเภทแบบไม่พร้อมกัน
ผู้รับมอบสิทธิ์เป็นผู้ติดตั้งใช้งาน
imageClassifier(_:didFinishClassification:timestampInMilliseconds:error:)
ซึ่งตัวแยกประเภทรูปภาพเรียกใช้หลังจากประมวลผลการจัดประเภท
ผลลัพธ์สำหรับแต่ละเฟรม
ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
---|---|---|---|
imageClassifierLiveStreamDelegate |
เปิดใช้ตัวแยกประเภทรูปภาพเพื่อรับผลการจัดประเภทแบบไม่พร้อมกัน
ในโหมดสตรีมแบบสด คลาสที่มีการตั้งค่าอินสแตนซ์เป็นพร็อพเพอร์ตี้นี้จะต้อง
ติดตั้งใช้งาน
imageClassifier(_:didFinishClassification: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
นักพัฒนาซอฟต์แวร์
เอกสารประกอบ
เรียกใช้งาน
หากต้องการเรียกใช้ตัวแยกประเภทรูปภาพ ให้ใช้เมธอด classify()
เฉพาะ
โหมดทำงาน:
- ภาพนิ่ง:
classify(image:)
- วิดีโอ:
classify(videoFrame:timestampInMilliseconds:)
- สตรีมแบบสด:
classifyAsync(image:timestampInMilliseconds:)
ตัวแยกประเภทรูปภาพจะแสดงหมวดหมู่ที่เป็นไปได้สำหรับวัตถุภายใน รูปภาพหรือเฟรมที่ป้อน
ตัวอย่างโค้ดต่อไปนี้แสดงตัวอย่างพื้นฐานของวิธีเรียกใช้ตัวแยกประเภทรูปภาพใน โหมดการทำงานต่างๆ ต่อไปนี้
Swift
รูปภาพ
let result = try imageClassifier.classify(image: image)
วิดีโอ
let result = try imageClassifier.classify( videoFrame: image, timestampInMilliseconds: timestamp)
ไลฟ์สด
try imageClassifier.classifyAsync( image: image, timestampInMilliseconds: timestamp)
Objective-C
รูปภาพ
MPPImageClassifierResult *result = [imageClassifier classifyImage:image error:nil];
วิดีโอ
MPPImageClassifierResult *result = [imageClassifier classifyVideoFrame:image timestampInMilliseconds:timestamp error:nil];
ไลฟ์สด
BOOL success = [imageClassifier classifyAsyncImage:image timestampInMilliseconds:timestamp error:nil];
ตัวอย่างโค้ดตัวแยกประเภทรูปภาพแสดงการใช้งานแต่ละโหมดเหล่านี้
รายละเอียดเพิ่มเติม classify(image:)
classify(videoFrame:timestampInMilliseconds:)
และ
classifyAsync(image:timestampInMilliseconds:)
โค้ดตัวอย่างนี้ช่วยให้
ผู้ใช้เพื่อเปลี่ยนโหมดการประมวลผลซึ่งอาจไม่จำเป็นสำหรับการใช้งานของคุณ
โปรดทราบดังต่อไปนี้
เมื่อทำงานในโหมดวิดีโอหรือโหมดสตรีมแบบสด คุณต้องระบุ การประทับเวลาของเฟรมอินพุตในงานตัวแยกประเภทรูปภาพ
เมื่อทำงานในโหมดรูปภาพหรือวิดีโอ งานตัวแยกประเภทรูปภาพจะบล็อก เทรดปัจจุบันจนกว่าจะประมวลผลรูปภาพหรือเฟรมอินพุตเสร็จสิ้น ถึง หลีกเลี่ยงการบล็อกเทรดปัจจุบัน เรียกใช้การประมวลผลในเบื้องหลัง เทรดโดยใช้ iOS ผู้มอบหมายหรือ NSOperation ของ Google
เมื่อทำงานในโหมดสตรีมแบบสด งานตัวแยกประเภทรูปภาพจะแสดงผลทันที และไม่บล็อกชุดข้อความปัจจุบัน โดยเรียกใช้
imageClassifier(_:didFinishClassification:timestampInMilliseconds:error:)
กับผลลัพธ์การจัดประเภทหลังจากประมวลผลเฟรมอินพุตแต่ละเฟรม ตัวแยกประเภทรูปภาพเรียกใช้เมธอดนี้แบบไม่พร้อมกันในอนุกรมเฉพาะ คิวการจัดส่งสินค้า สำหรับการแสดงผลลัพธ์ในอินเทอร์เฟซผู้ใช้ ให้ ไปยังคิวหลักหลังจากประมวลผลผลลัพธ์ หาก เรียกใช้ฟังก์ชันclassifyAsync
เมื่องานตัวแยกประเภทรูปภาพไม่ว่าง ประมวลผลอีกเฟรมหนึ่ง ตัวแยกประเภทรูปภาพจะไม่สนใจเฟรมอินพุตใหม่
จัดการและแสดงผลลัพธ์
เมื่อใช้การอนุมาน งานตัวแยกประเภทรูปภาพจะแสดงผล
ออบเจ็กต์ ImageClassifierResult
รายการที่มีรายการหมวดหมู่ที่เป็นไปได้
สำหรับวัตถุภายในรูปภาพหรือเฟรมอินพุต
ตัวอย่างต่อไปนี้แสดงตัวอย่างข้อมูลเอาต์พุตจากงานนี้
ImageClassifierResult:
Classifications #0 (single classification head):
head index: 0
category #0:
category name: "/m/01bwb9"
display name: "Passer domesticus"
score: 0.91406
index: 671
category #1:
category name: "/m/01bwbt"
display name: "Passer montanus"
score: 0.00391
index: 670
ผลลัพธ์นี้มาจากการเรียกใช้ Bird Classifier ใน:
โค้ดตัวอย่างของตัวแยกประเภทรูปภาพแสดงวิธีแสดงการจัดประเภท ผลลัพธ์ที่แสดงผลจากงาน โปรดดู โค้ด ตัวอย่าง เพื่อดูรายละเอียด