File size: 3,200 Bytes
ba31077
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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()