Objecten bijsnijden met Ultralytics YOLOv8 🚀
Wat is object bijsnijden?
Objecten bijsnijden met Ultralytics YOLOv8 Het isoleren en extraheren van specifieke gedetecteerde objecten uit een afbeelding of video. De mogelijkheden van het YOLOv8 model worden gebruikt om objecten nauwkeurig te identificeren en af te bakenen, zodat ze nauwkeurig kunnen worden bijgesneden voor verdere analyse of manipulatie.
Voordelen van object bijsnijden?
- Gerichte analyse: YOLOv8 vergemakkelijkt het gericht uitsnijden van objecten, waardoor afzonderlijke items in een scène diepgaand kunnen worden onderzocht of bewerkt.
- Gereduceerd gegevensvolume: Door alleen relevante objecten te extraheren, helpt het bijsnijden van objecten bij het minimaliseren van de datagrootte, waardoor het efficiënt is voor opslag, verzending of volgende rekentaken.
- Verbeterde precisie: YOLOv8's objectdetectie nauwkeurigheid zorgt ervoor dat de bijgesneden objecten hun ruimtelijke relaties behouden, waardoor de integriteit van de visuele informatie behouden blijft voor gedetailleerde analyse.
Beeldmateriaal
Luchthaven Bagage |
---|
Koffers op de lopende band van luchthaven met behulp van Ultralytics YOLOv8 |
Object bijsnijden met YOLOv8 Voorbeeld
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()
Argumenten model.predict
Naam | Type | Standaard | Beschrijving |
---|---|---|---|
source |
str |
'ultralytics/assets' |
bronmap voor afbeeldingen of video's |
conf |
float |
0.25 |
objectbetrouwbaarheidsdrempel voor detectie |
iou |
float |
0.7 |
intersectie over unie (IoU) drempel voor NMS |
imgsz |
int or tuple |
640 |
afbeeldingsgrootte als scalair of (h, w) lijst, bijv. (640, 480) |
half |
bool |
False |
gebruik halve precisie (FP16) |
device |
None or str |
None |
apparaat om op te draaien, bijvoorbeeld cuda device=0/1/2/3 of device=cpu |
max_det |
int |
300 |
maximum aantal detecties per afbeelding |
vid_stride |
bool |
False |
video frame-rate stap |
stream_buffer |
bool |
False |
buffer alle streaming frames (True) of retourneer het meest recente frame (False) |
visualize |
bool |
False |
modeleigenschappen visualiseren |
augment |
bool |
False |
beeldvergroting toepassen op voorspellingsbronnen |
agnostic_nms |
bool |
False |
klassennagnostische NMS |
classes |
list[int] |
None |
filter resultaten op klasse, d.w.z. classes=0, of classes=[0,2,3] |
retina_masks |
bool |
False |
segmentatiemaskers met hoge resolutie gebruiken |
embed |
list[int] |
None |
retourneer kenmerkvectoren/embeddingen van gegeven lagen |
Gemaakt op 2024-01-09, Bijgewerkt op 2024-03-03
Auteurs: glenn-jocher (2), RizwanMunawar (2), AyushExel (1)