Π Π°Π·ΠΌΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ultralytics YOLOv8 π.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°Π·ΠΌΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²?
Π Π°Π·ΠΌΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ultralytics YOLOv8 ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΡΠ°Π·ΠΌΡΡΠΈΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎ. ΠΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ YOLOv8 Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π½Π΅.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠ°Π·ΠΌΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²?
- ΠΠ°ΡΠΈΡΠ° ΡΠ°ΡΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ: Π Π°Π·ΠΌΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² - ΡΡΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎ.
- ΠΡΠ±ΠΎΡΠΎΡΠ½Π°Ρ ΡΠΎΠΊΡΡΠΈΡΠΎΠ²ΠΊΠ°: YOLOv8 ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΠΎ ΡΠ°Π·ΠΌΡΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π΄Π°Π²Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π½Π°ΡΠ΅Π»ΠΈΠ²Π°ΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ Π±Π°Π»Π°Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΡΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ: YOLOv8'ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΠΌΡΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΡΠ΅Π±ΡΡΡΠΈΡ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΠΈ Π½Π° Π»Π΅ΡΡ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΡΡ ΡΡΠ΅Π΄Π°Ρ .
Π Π°Π·ΠΌΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° YOLOv8
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
import cv2
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))
# Blur ratio
blur_ratio = 50
# Video writer
video_writer = cv2.VideoWriter("object_blurring_output.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps, (w, h))
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):
annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])
obj = im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
blur_obj = cv2.blur(obj, (blur_ratio, blur_ratio))
im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])] = blur_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 |
ΠΠΎΡΠΎΠ³ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π°Π΄ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ (IoU) Π΄Π»Ρ NMS |
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 |
Π€ΠΈΠ»ΡΡΡΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΡΠΎ Π΅ΡΡΡ classes=0, ΠΈΠ»ΠΈ classes=[0,2,3] |
retina_masks |
bool |
False |
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΠΌΠ°ΡΠΊΠΈ Π΄Π»Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Ρ Π²ΡΡΠΎΠΊΠΈΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ |
embed |
list[int] |
None |
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΠΉ Π²Π΅ΠΊΡΠΎΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ²/Π²ΠΊΡΠ°ΠΏΠ»Π΅Π½ΠΈΡ ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠ»ΠΎΠ΅Π² |
Π‘ΠΎΠ·Π΄Π°Π½ΠΎ 2024-01-09, ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ 2024-01-15
ΠΠ²ΡΠΎΡΡ: glenn-jocher (2), AyushExel (1), RizwanMunawar (1)