import tkinter as tk from tkinter import filedialog, messagebox from CoinCounter.model import predict import os import glob class CoinCounterApp: def __init__(self, root): self.root = root self.root.title("CoinCounter") self.root.geometry("300x150") # Кнопка для выбора файла self.file_button = tk.Button(root, text="Выбрать файл", command=self.select_file) self.file_button.pack(pady=10) # Кнопка для выбора папки self.folder_button = tk.Button(root, text="Выбрать папку", command=self.select_folder) self.folder_button.pack(pady=10) def select_file(self): file_path = filedialog.askopenfilename( title="Выберите файл", filetypes=[("Image files", "*.jpg *.jpeg *.png")] ) if file_path: self.process_image(file_path) def select_folder(self): folder_path = filedialog.askdirectory(title="Выберите папку") if folder_path: if self.check_images_in_folder(folder_path): self.process_image(folder_path) else: messagebox.showinfo("Информация", "В папке нет изображений") def check_images_in_folder(self, folder_path): image_files = glob.glob(os.path.join(folder_path, "*.jpg")) + \ glob.glob(os.path.join(folder_path, "*.jpeg")) + \ glob.glob(os.path.join(folder_path, "*.png")) return len(image_files) > 0 def process_image(self, path): # Показать окно с сообщением о процессе прогноза self.processing_window = tk.Toplevel(self.root) self.processing_window.title("Процесс") self.processing_window.geometry("350x100") # Увеличиваем размер окна tk.Label(self.processing_window, text="Идет процесс прогноза... пожалуйста, подождите", wraplength=300).pack(pady=30) self.root.update_idletasks() # Обновить интерфейс перед выполнением длительной задачи self.root.after(100, self.run_prediction, path) # Запуск функции предсказания через 100 мс def run_prediction(self, path): try: # Запуск функции predict results = predict( path=path, conf=0.3, iou=0.3 ) total_amount = results.total() self.processing_window.destroy() # Закрыть окно с процессом messagebox.showinfo("Результат", f"Общая сумма: {total_amount:.2f}$") except Exception as e: self.processing_window.destroy() # Закрыть окно с процессом messagebox.showerror("Ошибка", str(e)) if __name__ == "__main__": root = tk.Tk() app = CoinCounterApp(root) root.mainloop()