Nithikorn commited on
Commit
6a83044
·
verified ·
1 Parent(s): 64c31f7

Upload 4 files

Browse files
Files changed (4) hide show
  1. .gitattributes +35 -0
  2. README.md +23 -0
  3. app.py +79 -0
  4. requirements.txt +6 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Demo-Signature Detection
3
+ emoji: 👀
4
+ colorFrom: pink
5
+ colorTo: green
6
+ sdk: gradio
7
+ sdk_version: 5.23.1
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ # ระบบตรวจสอบลายเซ็น
13
+
14
+ ระบบนี้ใช้ Deep Learning (Siamese Neural Network) ในการตรวจสอบความเหมือนของลายเซ็น 2 ภาพว่าเป็นของคนเดียวกันหรือไม่
15
+
16
+ ## วิธีใช้งาน
17
+ 1. อัปโหลดรูปภาพลายเซ็นที่ 1
18
+ 2. อัปโหลดรูปภาพลายเซ็นที่ 2
19
+ 3. กดปุ่ม "ตรวจสอบความถูกต้อง"
20
+ 4. ระบบจะแสดงผลการเปรียบเทียบและบอกว่าลายเซ็นเป็นของจริงหรือปลอม
21
+
22
+
23
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tensorflow as tf
2
+ import numpy as np
3
+ from tensorflow.keras.models import load_model
4
+ from tensorflow.keras.utils import CustomObjectScope
5
+ from PIL import Image
6
+ import gradio as gr
7
+
8
+ def absolute_difference(x):
9
+ return tf.abs(x[0] - x[1])
10
+
11
+ model_path = "final_signature_model1.keras"
12
+
13
+ # ตรวจสอบว่าไฟล์อยู่ที่นี่จริง
14
+ with CustomObjectScope({'absolute_difference': absolute_difference}):
15
+ model = load_model(model_path)
16
+
17
+ print("✅ โมเดลโหลดสำเร็จ!")
18
+
19
+ def preprocess_image(image):
20
+ image = image.convert("RGB") # แปลงเป็น RGB
21
+ image = image.resize((224, 224)) # เปลี่ยนขนาด
22
+ image = np.array(image, dtype=np.float32) / 255.0 # Normalize
23
+ image = np.expand_dims(image, axis=0) # เพิ่ม batch dimension
24
+ return image
25
+
26
+ # ฟังก์ชันเปรียบเทียบลายเซ็น
27
+ def predict_signature(image1, image2):
28
+ print("เริ่มการทำนาย...")
29
+
30
+ if image1 is None or image2 is None:
31
+ print("ไม่พบรูปภาพ")
32
+ return "❌ กรุณาอัปโหลดภาพทั้งสองภาพ"
33
+
34
+ try:
35
+ print("กำลังประมวลผลรูปภาพที่ 1...")
36
+ image1 = preprocess_image(image1)
37
+ print("กำลังประมวลผลรูปภาพที่ 2...")
38
+ image2 = preprocess_image(image2)
39
+
40
+ print("กำลังส่งข้อมูลเข้าโมเดล...")
41
+ prediction = model.predict([image1, image2], verbose=1) # เพิ่ม verbose=1
42
+
43
+ print(f"ได้รับผลลัพธ์: {prediction}, รูปร่าง: {prediction.shape}")
44
+
45
+ # แปลงผลลัพธ์เป็นค่าตัวเลข
46
+ if prediction.shape == (1, 1):
47
+ prediction_value = float(prediction[0][0])
48
+ elif prediction.shape == (1,):
49
+ prediction_value = float(prediction[0])
50
+ else:
51
+ prediction_value = float(prediction.flatten()[0])
52
+
53
+ print(f"ค่าที่ได้: {prediction_value}")
54
+
55
+ threshold = 0.43
56
+ result = "✅ ลายเซ็นเป็นของจริง" if prediction_value >= threshold else "❌ ลายเซ็นเป็นของปลอม"
57
+
58
+ print(f"ผลลัพธ์การตรวจสอบ: {result}")
59
+ return f"Similarity Score: {prediction_value:.4f}\n{result}"
60
+
61
+ except Exception as e:
62
+ print(f"เกิดข้อผิดพลาด: {str(e)}")
63
+ import traceback
64
+ traceback.print_exc() # แสดงรายละเอียดของข้อผิดพลาดทั้งหมด
65
+ return f"❌ เกิดข้อผิดพลาด: {str(e)}"
66
+
67
+ with gr.Blocks() as demo:
68
+ gr.Markdown("# 🖊 Signature Verification")
69
+
70
+ with gr.Row():
71
+ img1 = gr.Image(type="pil", label="ลายเซ็นที่ 1", show_label=True)
72
+ img2 = gr.Image(type="pil", label="ลายเซ็นที่ 2", show_label=True)
73
+
74
+ btn_predict = gr.Button("ตรวจสอบความถูกต้อง")
75
+ output = gr.Textbox(label="ผลลัพธ์")
76
+
77
+ btn_predict.click(predict_signature, inputs=[img1, img2], outputs=output)
78
+
79
+ demo.launch(share=True, debug=True)
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ tensorflow==2.18.1
2
+ numpy>=1.26.0,<2.0
3
+ pillow>=9.4.0,<10.0
4
+ gradio==4.9.1
5
+ fastapi==0.104.1
6
+ pydantic==2.0.3