YOLOv8 получить предсказанное имя класса

Я просто хочу получить данные класса в своем скрипте Python, например: человек, автомобиль, грузовик, собака, но мой результат больше, чем это. Также я не могу использовать результаты в виде строки.

Скрипт Python:

from ultralytics import YOLO

model = YOLO("yolov8n.pt") 
results = model.predict(source = "0")

Выход:

0: 480x640 1 person, 1 car, 7.1ms
0: 480x640 1 person, 1 car, 7.2ms
0: 480x640 1 person, 1 car, 7.1ms
0: 480x640 1 person, 1 car, 7.1ms
0: 480x640 1 person, 1 car, 7.1ms
0: 480x640 1 person, 7.9ms
0: 480x640 1 person, 7.1ms
0: 480x640 1 person, 1 car, 7.1ms
0: 480x640 1 person, 1 car, 7.1ms

Простой поиск в Интернете поможет вам пройти долгий путь: inside-machinelearning.com/en/yolov8-how-to-use

Eiron 30.01.2023 10:33

Перебрать результаты[0].boxes.boxes, они имеют формат [x1, y1, x2, y2, оценка, метка]. Используйте int(label) в качестве индекса для вашего списка классов.

Eiron 30.01.2023 10:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
398
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете передать каждый класс в имя модели следующим образом:

from ultralytics.yolo.engine.model import YOLO
  
model = YOLO("yolov8n.pt")
results = model.predict(stream=True, imgsz=512) # source already setup

for r in results:
    for c in r.boxes.cls:
        print(model.names[int(c)])

выход:

YOLOv8n summary (fused): 168 layers, 3151904 parameters, 0 gradients, 8.7 GFLOPs
bus
person
person
person
person
image 1/2 /home/xyz/ultralytics/ultralytics/assets/bus.jpg: 512x384 4 persons, 1 bus, 35.7ms
person
person
person
tie
tie
image 2/2 /home/xyz/ultralytics/ultralytics/assets/zidane.jpg: 288x512 3 persons, 2 ties, 199.0ms
Speed: 3.9ms pre-process, 117.4ms inference, 27.9ms postprocess per image at shape (1, 3, 512, 512)

Тот же результат from ultralytics.yolo.engine.model import YOLO def main(): model = YOLO("yolov8n.pt") results = model.predict(imgsz=512, stream=True, source = "0") # source already setup for r in results: for c in r.boxes.cls: print(model.names[int(c)]) main()

gurselturkeri 31.01.2023 10:12

Вы добавили печать, поэтому что-то должно измениться

Mike B 31.01.2023 10:15

печать ни на что не влияет. Я пытался много раз. Также мой путь к файлу: /home/gursel/ultralytics/test.py это нормально?

gurselturkeri 31.01.2023 10:17

попробуй: pip install --upgrade ultralytics

Mike B 31.01.2023 10:18

Я сделал это, но при добавлении потока получаю сообщение об ошибке: поток не является допустимым ключом. Аналогичные клавиши: []

gurselturkeri 31.01.2023 10:30

Это решено, я переклонировал репозиторий Ultralytics. Также код работает правильно, спасибо! @Майк Б

gurselturkeri 31.01.2023 10:40

У меня есть другой вопрос по этому поводу: Как мне указать обнаруживать только определенные классы при использовании предварительно обученной модели. Например, если я хочу обнаружить только класс человека.

Я помню, что мы можем сделать это с Yolov5, я не мог сделать то же самое с YOLOv8:

model.classes = [0] # this will force the model to detect person class only in YOLOv5.

Другие вопросы по теме