Ultralytics YOLOv8 🚀を使ったオブジェクトの切り取り
オブジェクトの切り抜きとは?
によるオブジェクトの切り出し Ultralytics YOLOv8でのオブジェクトの切り出しは、画像やビデオから検出された特定のオブジェクトを分離して抽出することです。YOLOv8 のモデル機能を利用して物体を正確に識別し、輪郭を描くことで、さらなる分析や操作のための正確な切り出しが可能になります。
オブジェクトクロッピングの利点
- フォーカス分析:YOLOv8 は、ターゲットを絞ったオブジェクトの切り取りを容易にし、シーン内の個々のアイテムの詳細な検査や処理を可能にします。
- データ量の削減:関連性のあるオブジェクトのみを抽出することで、オブジェクトの切り出しはデータサイズを最小化するのに役立ち、保存、送信、またはその後の計算タスクを効率化する。
- 精度の向上: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 |
与えられたレイヤーから特徴ベクトル/埋め込みを返す |