cvproject / app.py
sompimnara's picture
Upload 7 files
a1916d2 verified
import gradio as gr
import cv2
import numpy as np
from PIL import Image
import torch
# Import โค้ดสมองที่เราเขียนไว้
from scanner import scan_document
from ocr import extract_text
def process_image(input_image):
if input_image is None:
return None, "กรุณาอัปโหลดรูปภาพ"
# 1. บันทึกรูปชั่วคราวเพื่อให้ scanner.py อ่านได้
temp_path = "temp_upload.jpg"
# input_image จาก Gradio เป็น numpy array (RGB) ต้องแปลงเป็น BGR ก่อน save ด้วย cv2
input_bgr = cv2.cvtColor(input_image, cv2.COLOR_RGB2BGR)
cv2.imwrite(temp_path, input_bgr)
try:
# 2. เรียกใช้ Scanner (ดัดภาพ)
# scan_document คืนค่า (ภาพสี, ภาพขาวดำ) เราเอาภาพสี
warped_color, _ = scan_document(temp_path)
# 3. เรียกใช้ OCR (อ่านข้อความ)
# ส่งภาพที่ดัดแล้วไปให้ AI
text_result = extract_text(warped_color)
# แปลงภาพกลับเป็น RGB เพื่อแสดงผลใน Gradio
output_img = cv2.cvtColor(warped_color, cv2.COLOR_BGR2RGB)
return output_img, text_result
except Exception as e:
return None, f"เกิดข้อผิดพลาด: {str(e)}"
# สร้างหน้าเว็บด้วย Gradio
iface = gr.Interface(
fn=process_image,
inputs=gr.Image(label="อัปโหลดรูปใบเสร็จ/เอกสาร"),
outputs=[
gr.Image(label="ภาพที่สแกนแล้ว (Crop & Warp)"),
gr.Textbox(label="ข้อความที่ AI อ่านได้ (JSON)", lines=10)
],
title="🤖 AI Document Scanner & OCR",
description="อัปโหลดรูปถ่ายเอกสาร -> ระบบจะดัดภาพให้ตรงอัตโนมัติ และอ่านข้อความด้วย Donut Transformer",
theme="default"
)
# สั่งรัน
if __name__ == "__main__":
iface.launch()