Вывод вывода терминала YOLOv8 в поле Tkinter ScrolledText

поэтому в настоящее время я создаю графический интерфейс для обучения модели yolo с использованием tkinter, и я не могу получить вывод терминала для входа в мой графический интерфейс. Под этим я имею в виду стандартный вывод терминала YOLO, такой как

      Transferred 355/355 items from pretrained weights
train: Scanning C:\---\train\labels.cache... 1977 images, 81 
val: Scanning C:\---\valid\labels.cache... 145 images, 8 back
Plotting labels to runs\detect\train17\labels.jpg... 
optimizer: AdamW(lr=0.002, momentum=0.9) with parameter groups 57 weight(decay=0.0), 64 weight(decay=0.0005), 63 bias(decay=0.0)
Image sizes 960 train, 960 val
Using 0 dataloader workers
Logging results to runs\detect\train17
Starting training for 10 epochs...
Closing dataloader mosaic

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
  0%|          | 0/124 [00:02<?, ?it/s]

В настоящее время я использую поле прокручиваемого текста для того места, где я хочу, чтобы вывод был таким:

      output_text = scrolledtext.ScrolledText(left_frame, wrap=tk.WORD)
output_text.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")

и пытались использовать sys для перенаправления, а также для потоковой обработки и захвата вывода, но он все равно всегда выводит диалог yolo в диалог кода VS. Однако если я напечатаю что-то в коде, это отобразится в моем графическом интерфейсе. Кажется, что он перенаправляет все, кроме выходных данных YOLO (которые представляют собой информацию, такую ​​​​как прогресс обучения эпохи и т. д.). Кто-нибудь сталкивался с этим раньше и как я мог реализовать способ вывода диалога YOLO в свой графический интерфейс tkinter. Спасибо за редактирование: это код, который в настоящее время запускает YOLO (вызывается при нажатии кнопки модели поезда), это случайная попытка с sys.stdout, которая не работает:

      def modelTrain(): #function to train model
    if trainModel == 'none' or trainModel == '': #conditions to check user has selected everything required for training
        tk.messagebox.showwarning("No model set", "You must set a model for training on (PyTorch .pt file)")
        return #if conditions not met we show a warning and exit function
    if trainDataset == 'none' or trainDataset == '':
        tk.messagebox.showwarning("No dataset set", "You must set a dataset for training (YOLO .yaml file)")
        return
    if epochs == 0:
        tk.messagebox.showwarning("Number of epochs not set", "You must set the amount of epochs to train for")
        return
    if imgsize == 0:
        tk.messagebox.showwarning("Input image size not set", "You must set the size of the images as exported for training")
        return
    
    model = YOLO(trainModel) #setting model to one selected by user
    dataset = trainDataset #setting dataset to one selected by user

    def train_in_thread(): #training model in seperate thread to avoid gui freezing from model training using up sys resources 
        model.train(data=dataset, epochs=epochs, pretrained=True, imgsz=imgsize)#initializing model training with other vars set by user
        model.val()

        output_text.insert(tk.END, "Training completed.\n")
        output_text.see(tk.END)  # Scroll to the end

    # Create a separate thread to run the training function
    train_thread = threading.Thread(target=train_in_thread)
    train_thread.start()

0 ответов

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