Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ultralytics YOLOv8 π.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ?
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ultralytics YOLOv8 ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΡ, ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΡ ΠΌΠ΅ΡΡΠ° ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡ ΠΈΡ Π½Π°Π»ΠΈΡΠΈΠ΅. YOLOv8 ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΡΡΠΈΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΡΡΠΈ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΈ.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ?
- ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ: Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠΊΠΎΠ²ΠΎΡΠ½ΡΡ ΠΌΠ΅ΡΡ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π·Π°ΡΠΎΡΡ.
- ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΎΡ ΡΠ°Π½Π°: Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ YOLOv8 ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΊΠ°ΠΊ Π»ΡΠ΄Π΅ΠΉ, ΡΠ°ΠΊ ΠΈ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² Π·Π° ΡΡΠ΅Ρ Π²ΠΈΠ΄Π΅ΠΎΠ½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΌΠ΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.
- Π‘ΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ±ΡΠΎΡΠΎΠ²: Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ YOLOv8 ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΡΠΎΡ ΠΈ Π²ΡΠ΅Π΄Π½ΡΠ΅ Π²ΡΠ±ΡΠΎΡΡ Π½Π° ΡΡΠΎΡΠ½ΠΊΠ°Ρ .
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΌΠΈΡΠ΅
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ | Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ |
---|---|
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ Aeriel View Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ultralytics YOLOv8 | Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ ΠΠΈΠ΄ ΡΠ²Π΅ΡΡ Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ultralytics YOLOv8 |
Π Π°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΊΠΎΠ΄Π° ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ
ΠΡΠ±ΠΎΡ ΡΠΎΡΠ΅ΠΊ
ΠΡΠ±ΡΠ°ΡΡ ΡΠΎΡΠΊΡ ΡΠ΅ΠΏΠ΅ΡΡ Π»Π΅Π³ΠΊΠΎ
ΠΡΠ±ΠΎΡ ΡΠΎΡΠ΅ΠΊ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΈ - Π²Π°ΠΆΠ½Π°Ρ ΠΈ ΡΠ»ΠΎΠΆΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠ°ΠΌΠΈ. Ultralytics ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠ΅Π±Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π·ΠΎΠ½Ρ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
- ΠΠ°Ρ Π²Π°ΡΠΈ ΠΊΠ°Π΄Ρ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ° Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ»ΠΈ ΠΊΠ°ΠΌΠ΅ΡΡ, Π³Π΄Π΅ ΡΡ Ρ ΠΎΡΠ΅ΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π³Π΄Π΅ ΡΡ ΡΠΌΠΎΠΆΠ΅ΡΡ Π²ΡΠ±ΡΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΡΠ°ΡΡ ΠΎΡΠ΅ΡΡΠΈΠ²Π°ΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΈ ΠΊΠ»ΠΈΠΊΠΎΠΌ ΠΌΡΡΠΈ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Ρ.
Π Π°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ 1920*1080
from ultralytics.solutions.parking_management import ParkingPtsSelection, tk
root = tk.Tk()
ParkingPtsSelection(root)
root.mainloop()
- ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ» Π·ΠΎΠ½Ρ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ², Π½Π°ΠΆΠΌΠΈ
save
ΡΡΠΎΠ±Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ JSON-ΡΠ°ΠΉΠ» Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ.
Python ΠΠΎΠ΄ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ YOLOv8 ΠΡΠΈΠΌΠ΅Ρ
import cv2
from ultralytics.solutions.parking_management import ParkingManagement
# Path to json file, that created with above point selection app
polygon_json_path = "bounding_boxes.json"
# Video capture
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))
# Video writer
video_writer = cv2.VideoWriter("parking management.avi",
cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
# Initialize parking management object
management = ParkingManagement(model_path="yolov8n.pt")
while cap.isOpened():
ret, im0 = cap.read()
if not ret:
break
json_data = management.parking_regions_extraction(polygon_json_path)
results = management.model.track(im0, persist=True, show=False)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu().tolist()
clss = results[0].boxes.cls.cpu().tolist()
management.process_data(json_data, im0, boxes, clss)
management.display_frames(im0)
video_writer.write(im0)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ParkingManagement()
ΠΠΌΡ | Π’ΠΈΠΏ | ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|---|
occupied_region_color |
RGB Color |
(0, 255, 0) |
Π¦Π²Π΅Ρ ΡΠ΅Π³ΠΈΠΎΠ½Π°, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°ΡΠΊΠΎΠ²ΠΎΡΠ½ΡΠΌ ΠΌΠ΅ΡΡΠΎΠΌ |
available_region_color |
RGB Color |
(0, 0, 255) |
ΠΠ°ΡΠΊΠΎΠ²ΠΎΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π² Π½Π°Π»ΠΈΡΠΈΠΈ Π¦Π²Π΅Ρ ΡΠ΅Π³ΠΈΠΎΠ½Π° |
margin |
int |
10 |
Π Π°Π·ΡΡΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ° Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² |
txt_color |
RGB Color |
(255, 255, 255) |
Π¦Π²Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ° ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² |
bg_color |
RGB Color |
(255, 255, 255) |
Π¦Π²Π΅Ρ ΡΠΎΠ½Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π·Π° ΡΠ΅ΠΊΡΡΠΎΠΌ |
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ model.track
ΠΠΌΡ | Π’ΠΈΠΏ | ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|---|
source |
im0 |
None |
ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎ |
persist |
bool |
False |
Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ°Π΄ΡΠ°ΠΌΠΈ |
tracker |
str |
botsort.yaml |
ΠΠ΅ΡΠΎΠ΄ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ 'bytetrack' ΠΈΠ»ΠΈ 'botsort' |
conf |
float |
0.3 |
ΠΠΎΡΠΎΠ³ Π΄ΠΎΠ²Π΅ΡΠΈΡ |
iou |
float |
0.5 |
ΠΠΎΡΠΎΠ³ IOU |
classes |
list |
None |
Π€ΠΈΠ»ΡΡΡΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΡΠΎ Π΅ΡΡΡ classes=0, ΠΈΠ»ΠΈ classes=[0,2,3] |
verbose |
bool |
True |
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² |