コンテンツへスキップ

Ultralytics YOLOv8 🚀を使ったオブジェクトの切り取り

オブジェクトの切り抜きとは?

によるオブジェクトの切り出し Ultralytics YOLOv8でのオブジェクトの切り出しは、画像やビデオから検出された特定のオブジェクトを分離して抽出することです。YOLOv8 のモデル機能を利用して物体を正確に識別し、輪郭を描くことで、さらなる分析や操作のための正確な切り出しが可能になります。

オブジェクトクロッピングの利点

  • フォーカス分析:YOLOv8 は、ターゲットを絞ったオブジェクトの切り取りを容易にし、シーン内の個々のアイテムの詳細な検査や処理を可能にします。
  • データ量の削減:関連性のあるオブジェクトのみを抽出することで、オブジェクトの切り出しはデータサイズを最小化するのに役立ち、保存、送信、またはその後の計算タスクを効率化する。
  • 精度の向上:YOLOv8 のオブジェクト検出精度は、切り取られたオブジェクトの空間的な関係を維持し、詳細な分析のための視覚情報の完全性を維持します。

ビジュアル

空港の手荷物
空港のベルトコンベア スーツケースのクロッピングUltralytics YOLOv8
空港のベルトコンベアーでスーツケースが切り取られる。Ultralytics YOLOv8

YOLOv8 例を用いたオブジェクトの切り抜き

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
import cv2
import os

model = YOLO("yolov8n.pt")
names = model.names

cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
    os.mkdir(crop_dir_name)

# Video writer
video_writer = cv2.VideoWriter("object_cropping_output.avi",
                               cv2.VideoWriter_fourcc(*'mp4v'),
                               fps, (w, h))

idx = 0
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = model.predict(im0, show=False)
    boxes = results[0].boxes.xyxy.cpu().tolist()
    clss = results[0].boxes.cls.cpu().tolist()
    annotator = Annotator(im0, line_width=2, example=names)

    if boxes is not None:
        for box, cls in zip(boxes, clss):
            idx += 1
            annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])

            crop_obj = im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])]

            cv2.imwrite(os.path.join(crop_dir_name, str(idx)+".png"), crop_obj)

    cv2.imshow("ultralytics", im0)
    video_writer.write(im0)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
video_writer.release()
cv2.destroyAllWindows()

論争 model.predict

名称 タイプ デフォルト 説明
source str 'ultralytics/assets' 画像またはビデオのソース・ディレクトリ
conf float 0.25 検出のためのオブジェクト信頼度閾値
iou float 0.7 NMSのIoU(Intersection Over Union)しきい値
imgsz int or tuple 640 スカラーまたは (h, w) リストとしての画像サイズ,すなわち (640, 480)
half bool False 半精度(FP16)を使用
device None or str None 実行するデバイス(例:cuda device=0/1/2/3またはdevice=cpu
max_det int 300 画像あたりの最大検出数
vid_stride bool False ビデオ・フレームレート・ストライド
stream_buffer bool False すべてのストリーミングフレームをバッファリングするか (True) 、最新のフレームを返す (False)
visualize bool False モデルの特徴を可視化する
augment bool False 予測ソースに画像補強を適用
agnostic_nms bool False クラス不可知NMS
classes list[int] None つまり、class=0、またはclass=[0,2,3]。
retina_masks bool False 高解像度のセグメンテーション・マスクを使用する
embed list[int] None 与えられたレイヤーから特徴ベクトル/埋め込みを返す


作成日:2024-01-09 更新日:2024-03-03
著者:glenn-jocher(2),chr043416@gmail.com(2),AyushExel(1)

コメント