File size: 2,155 Bytes
da280fe
f3b54e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2649793
b2cc17d
f3b54e3
 
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
import os
from datasets import load_dataset
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
import customtkinter as ctk
from tkinter import filedialog
from PIL import Image, ImageTk


dataset = load_dataset("hezarai/parsynth-ocr-200k")
# ΨͺΩ†ΨΈΫŒΩ… GUI
ctk.set_appearance_mode("System")
ctk.set_default_color_theme("blue")

class OCRApp(ctk.CTk):
    def __init__(self):
        super().__init__()
        self.title("OCR with Hugging Face")
        self.geometry("800x600")

        # Ω…Ψ―Ω„ و ΩΎΨ±Ψ―Ψ§Ψ²Ψ΄Ϊ―Ψ±
        self.processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten")
        self.model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")

        # ΨΉΩ†Ψ§Ψ΅Ψ± Ψ±Ψ§Ψ¨Ψ· کاربری
        self.image_label = ctk.CTkLabel(self, text="No Image Selected", width=400, height=300, corner_radius=8)
        self.image_label.pack(pady=20)

        self.upload_button = ctk.CTkButton(self, text="Upload Image", command=self.upload_image)
        self.upload_button.pack(pady=10)

        self.result_label = ctk.CTkTextbox(self, height=200)
        self.result_label.pack(pady=10, fill="both", expand=True)

    def upload_image(self):
        file_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.png;*.jpg;*.jpeg")])
        if not file_path:
            return

        # Ω†Ω…Ψ§ΫŒΨ΄ Ψͺءویر
        image = Image.open(file_path).resize((400, 300))
        self.image_tk = ImageTk.PhotoImage(image)
        self.image_label.configure(image=self.image_tk, text="")

        # Ψ§Ω†Ψ¬Ψ§Ω… OCR
        text = self.perform_ocr(file_path)
        self.result_label.delete("1.0", "end")
        self.result_label.insert("1.0", text)

    def perform_ocr(self, image_path):
        image = Image.open(image_path).convert("RGB")
        pixel_values = self.processor(images=image, return_tensors="pt").pixel_values
        generated_ids = self.model.generate(pixel_values)
        generated_text = self.processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
        return generated_text

if __name__ == "__main__":
    app = OCRApp()
    app.mainloop()