Đếm đối tượng bằng cách sử dụng Ultralytics YOLOv8 🚀
Đếm đối tượng là gì?
Đếm đối tượng với Ultralytics YOLOv8 liên quan đến việc xác định và đếm chính xác các đối tượng cụ thể trong video và luồng camera. YOLOv8 Vượt trội trong các ứng dụng thời gian thực, cung cấp khả năng đếm đối tượng hiệu quả và chính xác cho các tình huống khác nhau như phân tích và giám sát đám đông, nhờ các thuật toán hiện đại và khả năng học sâu.
Xem: Đếm đối tượng bằng cách sử dụng Ultralytics YOLOv8
Ưu điểm của đếm đối tượng?
- Tối ưu hóa tài nguyên: Đếm đối tượng tạo điều kiện quản lý tài nguyên hiệu quả bằng cách cung cấp số lượng chính xác và tối ưu hóa phân bổ tài nguyên trong các ứng dụng như quản lý hàng tồn kho.
- Tăng cường bảo mật: Đếm đối tượng tăng cường an ninh và giám sát bằng cách theo dõi và đếm chính xác các thực thể, hỗ trợ phát hiện mối đe dọa chủ động.
- Ra quyết định sáng suốt: Đếm đối tượng cung cấp thông tin chi tiết có giá trị cho việc ra quyết định, tối ưu hóa các quy trình trong bán lẻ, quản lý lưu lượng truy cập và nhiều lĩnh vực khác.
Ứng dụng trong thế giới thực
Hậu cần | Nuôi trồng thủy sản |
---|---|
Đếm các gói băng tải bằng cách sử dụng Ultralytics YOLOv8 | Đếm cá trên biển bằng cách sử dụng Ultralytics YOLOv8 |
Đếm đối tượng bằng cách sử dụng YOLOv8 Ví dụ
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2
model = YOLO("yolov8n.pt")
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))
# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps,
(w, h))
# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
reg_pts=region_points,
classes_names=model.names,
draw_tracks=True,
line_thickness=2)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False)
im0 = counter.start_counting(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2
model = YOLO("yolov8n.pt")
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))
# Define region points as a polygon with 5 points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]
# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps,
(w, h))
# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
reg_pts=region_points,
classes_names=model.names,
draw_tracks=True,
line_thickness=2)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False)
im0 = counter.start_counting(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2
model = YOLO("yolov8n.pt")
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))
# Define line points
line_points = [(20, 400), (1080, 400)]
# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps,
(w, h))
# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
reg_pts=line_points,
classes_names=model.names,
draw_tracks=True,
line_thickness=2)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False)
im0 = counter.start_counting(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import object_counter
import cv2
model = YOLO("yolov8n.pt")
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))
line_points = [(20, 400), (1080, 400)] # line or region points
classes_to_count = [0, 2] # person and car classes for count
# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps,
(w, h))
# Init Object Counter
counter = object_counter.ObjectCounter()
counter.set_args(view_img=True,
reg_pts=line_points,
classes_names=model.names,
draw_tracks=True,
line_thickness=2)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False,
classes=classes_to_count)
im0 = counter.start_counting(im0, tracks)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
Khu vực có thể di chuyển
Bạn có thể di chuyển vùng bất cứ nơi nào trong khung bằng cách nhấp vào các cạnh của nó
Đối số tùy chọn set_args
Tên | Kiểu | Mặc định | Sự miêu tả |
---|---|---|---|
view_img |
bool |
False |
Hiển thị khung có số lượng |
view_in_counts |
bool |
True |
Chỉ hiển thị số lượng trên khung video |
view_out_counts |
bool |
True |
Chỉ hiển thị số lượng vượt trội trên khung hình video |
line_thickness |
int |
2 |
Tăng hộp giới hạn và đếm độ dày văn bản |
reg_pts |
list |
[(20, 400), (1260, 400)] |
Các điểm xác định Khu vực |
classes_names |
dict |
model.model.names |
Từ điển tên lớp |
count_reg_color |
RGB Color |
(255, 0, 255) |
Màu sắc của Vùng hoặc Đường đếm Đối tượng |
track_thickness |
int |
2 |
Độ dày của đường theo dõi |
draw_tracks |
bool |
False |
Bật vẽ Đường theo dõi |
track_color |
RGB Color |
(0, 255, 0) |
Màu sắc cho từng đường đua |
line_dist_thresh |
int |
15 |
Ngưỡng khoảng cách Euclide cho bộ đếm dòng |
count_txt_color |
RGB Color |
(255, 255, 255) |
Màu nền trước cho đối tượng đếm văn bản |
region_thickness |
int |
5 |
Độ dày cho vùng hoặc đường đối tượng |
count_bg_color |
RGB Color |
(255, 255, 255) |
Đếm màu tô sáng |
Lập luận model.track
Tên | Kiểu | Mặc định | Sự miêu tả |
---|---|---|---|
source |
im0 |
None |
Thư mục nguồn cho hình ảnh hoặc video |
persist |
bool |
False |
Các rãnh liên tục giữa các khung hình |
tracker |
str |
botsort.yaml |
Phương pháp theo dõi 'bytetrack' hoặc 'botsort' |
conf |
float |
0.3 |
Ngưỡng tin cậy |
iou |
float |
0.5 |
Ngưỡng IOU |
classes |
list |
None |
Lọc kết quả theo lớp, tức là lớp = 0 hoặc lớp = [0,2,3] |
verbose |
bool |
True |
Hiển thị kết quả theo dõi đối tượng |