Вывод вывода терминала 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()