งานเครื่องมือแบ่งรูปภาพแบบ MediaPipe ช่วยให้คุณแบ่งรูปภาพออกเป็นภูมิภาคตามหมวดหมู่ที่กำหนดไว้ล่วงหน้าสำหรับการนำเอฟเฟกต์ภาพไปใช้ เช่น การเบลอพื้นหลังได้ วิธีการเหล่านี้จะแสดงวิธีใช้เครื่องมือแบ่งรูปภาพกับภาษา Python ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่าของงานนี้ได้ที่ภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่างสำหรับเครื่องมือแบ่งรูปภาพแสดงการติดตั้งใช้งานที่สมบูรณ์ของงานนี้ใน Python เพื่อเป็นข้อมูลอ้างอิง โค้ดนี้จะช่วยให้คุณทดสอบงานนี้และเริ่มต้นใช้งาน การสร้างแอปพลิเคชันเครื่องมือแยกรูปภาพด้วยตัวคุณเอง คุณดู เรียกใช้ และแก้ไขโค้ดตัวอย่างของเครื่องมือแบ่งกลุ่มรูปภาพได้โดยใช้เพียงเว็บเบราว์เซอร์
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมการพัฒนาและโปรเจ็กต์โค้ดเพื่อใช้เครื่องมือแยกส่วนรูปภาพโดยเฉพาะ ดูข้อมูลทั่วไปเกี่ยวกับการตั้งค่าสภาพแวดล้อมการพัฒนาเพื่อใช้งาน MediaPipe รวมถึงข้อกำหนดเวอร์ชันแพลตฟอร์มได้ที่คู่มือการตั้งค่าสำหรับ Python คุณตรวจสอบซอร์สโค้ดของตัวอย่างนี้ได้ที่ GitHub
กล่องพัสดุ
งานเครื่องมือแบ่งส่วนรูปภาพ MediaPipe ต้องใช้แพ็กเกจ mediapipe
คุณติดตั้งทรัพยากร Dependency ที่จำเป็นได้ด้วยคำสั่งต่อไปนี้
$ python -m pip install mediapipe
การนำเข้า
นำเข้าคลาสต่อไปนี้เพื่อเข้าถึงฟังก์ชันงานเครื่องมือแบ่งรูปภาพ
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
รุ่น
งานเครื่องมือแบ่งส่วนรูปภาพ MediaPipe ต้องใช้โมเดลที่ผ่านการฝึกซึ่งเข้ากันได้กับงานนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ได้รับการฝึกแล้วที่พร้อมใช้งานสำหรับเครื่องมือแบ่งกลุ่มรูปภาพได้ที่ส่วนภาพรวมของงานโมเดล
เลือกและดาวน์โหลดโมเดล แล้วจัดเก็บไว้ในไดเรกทอรีโปรเจ็กต์ โดยทำดังนี้
model_path = '/absolute/path/to/model.tflite'
ระบุเส้นทางของโมเดลภายในพารามิเตอร์ชื่อรุ่น ตามที่แสดงด้านล่าง
base_options = BaseOptions(model_asset_path=model_path)
สร้างงาน
งานเครื่องมือแบ่งส่วนรูปภาพของ MediaPipe ใช้ฟังก์ชัน create_from_options
เพื่อตั้งค่างาน ฟังก์ชัน create_from_options
จะยอมรับค่าสำหรับตัวเลือกการกำหนดค่าที่ต้องจัดการ ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่างานได้ที่ตัวเลือกการกำหนดค่า
ตัวอย่างเหล่านี้ยังแสดงรูปแบบของการสร้างงานสำหรับรูปภาพ ไฟล์วิดีโอ และสตรีมวิดีโอแบบสดด้วย
รูปภาพ
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the image mode: options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
วิดีโอ
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the video mode: options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
สตรีมแบบสด
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the live stream mode: def print_result(result: List[Image], output_image: Image, timestamp_ms: int): print('segmented masks size: {}'.format(len(result))) options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
ตัวเลือกการกำหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าสำหรับแอปพลิเคชัน Python ดังต่อไปนี้
ชื่อตัวเลือก | คำอธิบาย | ช่วงของค่า | ค่าเริ่มต้น |
---|---|---|---|
running_mode |
ตั้งค่าโหมดการทำงาน มี 3 โหมดดังนี้ IMAGE: โหมดสำหรับการป้อนข้อมูลรูปภาพเดียว วิดีโอ: โหมดสำหรับเฟรมที่ถอดรหัสของวิดีโอ LIVE_Stream: โหมดสำหรับสตรีมแบบสดของข้อมูลอินพุต เช่น จากกล้อง ในโหมดนี้ ต้องมีการเรียกใช้ resultsListener เพื่อตั้งค่า Listener เพื่อรับผลลัพธ์แบบไม่พร้อมกัน |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
output_category_mask |
หากตั้งค่าเป็น True เอาต์พุตจะมีมาสก์การแบ่งกลุ่มเป็นรูปภาพ uint8 ซึ่งค่าพิกเซลแต่ละค่าบ่งชี้ถึงค่าหมวดหมู่ที่ชนะ |
{True, False } |
False |
output_confidence_masks |
หากตั้งค่าเป็น True เอาต์พุตจะมีมาสก์การแบ่งกลุ่มลูกค้าเป็นภาพค่าลอยตัว โดยค่าทศนิยมแต่ละค่าแสดงแมปคะแนนความเชื่อมั่นของหมวดหมู่ |
{True, False } |
True |
display_names_locale |
ตั้งค่าภาษาของป้ายกำกับที่จะใช้กับชื่อที่แสดงซึ่งระบุไว้ในข้อมูลเมตาของโมเดลของงาน หากมี ค่าเริ่มต้นคือ en สำหรับภาษาอังกฤษ คุณเพิ่มป้ายกำกับที่แปลเป็นภาษาท้องถิ่นลงในข้อมูลเมตาของโมเดลที่กำหนดเองได้โดยใช้ TensorFlow Lite Metadata Writer API
| รหัสภาษา | en |
result_callback |
ตั้งค่า Listener ผลลัพธ์ให้รับผลลัพธ์การแบ่งกลุ่มแบบไม่พร้อมกันเมื่อตัวแบ่งกลุ่มรูปภาพอยู่ในโหมดสตรีมแบบสด
ใช้ได้เมื่อตั้งค่าโหมดการทำงานเป็น LIVE_STREAM เท่านั้น |
ไม่มีข้อมูล | ไม่มีข้อมูล |
เตรียมข้อมูล
เตรียมอินพุตเป็นไฟล์ภาพหรืออาร์เรย์ตัวเลข แล้วแปลงเป็นออบเจ็กต์ mediapipe.Image
หากอินพุตเป็นไฟล์วิดีโอหรือสตรีมแบบสดจากเว็บแคม คุณจะใช้ไลบรารีภายนอก เช่น OpenCV เพื่อโหลดเฟรมอินพุตเป็นอาร์เรย์ตัวเลขได้
รูปภาพ
# Load the input image from an image file. mp_image = mp.Image.create_from_file('/path/to/image') # Load the input image from a numpy array. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
วิดีโอ
# Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You need the frame rate to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
สตรีมแบบสด
# Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
ดูตัวอย่างโค้ดที่แสดงการเตรียมข้อมูลสำหรับเครื่องมือแบ่งกลุ่มรูปภาพได้จากตัวอย่างโค้ด
เรียกใช้งาน
เครื่องมือแบ่งกลุ่มรูปภาพใช้ฟังก์ชัน segment
, segment_for_video
และ segment_async
เพื่อเรียกใช้การอนุมาน สำหรับการแบ่งกลุ่มรูปภาพ จะต้องมีการประมวลผลข้อมูลอินพุตล่วงหน้า การเรียกใช้โมเดลการแบ่งกลุ่ม และการประมวลผลภายหลังของโมเดลที่จะส่งออกไปยังมาสก์ที่แบ่งกลุ่ม
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีดำเนินการประมวลผลด้วยโมเดลงาน
รูปภาพ
# Perform image segmentation on the provided single image. # The image segmenter must be created with the image mode. segmented_masks = segmenter.segment(mp_image)
วิดีโอ
# Perform image segmentation on the provided single image. # The image segmenter must be created with the video mode. segmented_masks = segmenter.segment_for_video(mp_image, frame_timestamp_ms)
สตรีมแบบสด
# Send live image data to perform image segmentation. # The results are accessible via the `result_callback` provided in # the `ImageSegmenterOptions` object. # The image segmenter must be created with the live stream mode. segmenter.segment_async(mp_image, frame_timestamp_ms)
โปรดทราบดังต่อไปนี้
- เมื่อทำงานในโหมดวิดีโอหรือโหมดสตรีมแบบสด คุณต้องระบุการประทับเวลาของเฟรมอินพุตให้กับงานเครื่องมือแบ่งรูปภาพด้วย
- เมื่อทำงานในโมเดลรูปภาพหรือโมเดลวิดีโอ งานเครื่องมือแบ่งรูปภาพจะบล็อกชุดข้อความปัจจุบันจนกว่าจะประมวลผลรูปภาพหรือเฟรมอินพุตเสร็จ
ดูตัวอย่างที่สมบูรณ์ของการเรียกใช้การอนุมานเครื่องมือแบ่งกลุ่มรูปภาพได้ที่ตัวอย่างโค้ด
แฮนเดิลและแสดงผลลัพธ์
เครื่องมือแบ่งรูปภาพจะแสดงรายการข้อมูล Image
หาก output_type
คือ CATEGORY_MASK
เอาต์พุตจะเป็นลิสต์ที่มีมาสก์กลุ่มเดี่ยวเป็นภาพ uint8 พิกเซลจะแสดงดัชนีหมวดหมู่ที่รู้จักของภาพอินพุต หาก output_type
คือ CONFIDENCE_MASK
เอาต์พุตจะเป็นเวกเตอร์ที่มีขนาดของหมายเลขหมวดหมู่ มาสก์แต่ละกลุ่มเป็นภาพแบบลอยในช่วง [0,1]
ซึ่งแสดงคะแนนความเชื่อมั่นของพิกเซลที่อยู่ในหมวดหมู่
ส่วนต่อไปนี้แสดงตัวอย่างข้อมูลเอาต์พุตจากงานนี้
ความเชื่อมั่นของหมวดหมู่
รูปภาพต่อไปนี้แสดงภาพเอาต์พุตงานสำหรับมาสก์ความเชื่อมั่นของหมวดหมู่ เอาต์พุตมาสก์ความเชื่อมั่นมีค่าทศนิยมระหว่าง [0, 1]
เอาต์พุตมาสก์ความเชื่อมั่นของรูปภาพและหมวดหมู่ต้นฉบับ รูปภาพต้นฉบับจากชุดข้อมูล Pascal VOC 2012
ค่าของหมวดหมู่
รูปภาพต่อไปนี้แสดงภาพเอาต์พุตงานสำหรับมาสก์ค่าหมวดหมู่ ช่วงมาสก์หมวดหมู่คือ [0, 255]
และค่าพิกเซลแต่ละค่าแสดงถึงดัชนีหมวดหมู่ที่ชนะของเอาต์พุตโมเดล ดัชนีหมวดหมู่ที่ชนะจะมีคะแนนสูงสุดในหมวดหมู่ที่โมเดลจดจำได้
เอาต์พุตมาสก์รูปภาพและหมวดหมู่ต้นฉบับ รูปภาพต้นฉบับจากชุดข้อมูล Pascal VOC 2012