HF-User commited on
Commit
cde2c39
·
0 Parent(s):

Initial commit - history cleaned

Browse files
Files changed (5) hide show
  1. .gitattributes +38 -0
  2. README.md +13 -0
  3. app.py +125 -0
  4. packages.txt +5 -0
  5. requirements.txt +5 -0
.gitattributes ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
36
+ core_logic.so filter=lfs diff=lfs merge=lfs -text
37
+ secret_layer.so filter=lfs diff=lfs merge=lfs -text
38
+ core_logic[[:space:]].so filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Maptiles
3
+ emoji: 📉
4
+ colorFrom: red
5
+ colorTo: green
6
+ sdk: gradio
7
+ sdk_version: 5.49.0
8
+ python_version: "3.12" # 或指定具體版本如 "3.12.7"
9
+ app_file: app.py
10
+ pinned: false
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import sys
3
+ import os
4
+ import importlib.util
5
+ from pathlib import Path
6
+ from huggingface_hub import hf_hub_download
7
+
8
+ print("===== Application Startup =====")
9
+
10
+ MODEL_REPO = "fcu52005505/X281-weights"
11
+ MODEL_FILE = "core_logic.so"
12
+ CACHE_DIR = Path("./model_cache")
13
+ CACHE_DIR.mkdir(exist_ok=True)
14
+
15
+ core_logic = None
16
+
17
+ # 檢查 HF Token
18
+ HF_TOKEN = os.getenv("HF_TOKEN")
19
+ if HF_TOKEN is None:
20
+ raise RuntimeError(
21
+ "❌ 缺少 HF_TOKEN!請在 Space 的 Settings → Variables and secrets 設定。"
22
+ )
23
+
24
+ print(f"HF_TOKEN loaded: {HF_TOKEN is not None}")
25
+
26
+ # 下載 .so(使用快取)
27
+ so_path = CACHE_DIR / MODEL_FILE
28
+
29
+ if not so_path.exists():
30
+ print(f"📥 正在從 {MODEL_REPO} 下載 {MODEL_FILE} ...")
31
+ downloaded_path = hf_hub_download(
32
+ repo_id=MODEL_REPO,
33
+ filename=MODEL_FILE,
34
+ repo_type="model",
35
+ token=HF_TOKEN,
36
+ local_dir=str(CACHE_DIR),
37
+ local_dir_use_symlinks=False
38
+ )
39
+ print(f"✅ .so 下載完成: {downloaded_path}")
40
+ else:
41
+ print(f"✅ 使用快取 .so: {so_path}")
42
+
43
+ # 動態載入 core_logic.so
44
+ try:
45
+ spec = importlib.util.spec_from_file_location(
46
+ "core_logic",
47
+ str(so_path)
48
+ )
49
+ if spec and spec.loader:
50
+ core_logic = importlib.util.module_from_spec(spec)
51
+ sys.modules["core_logic"] = core_logic
52
+ spec.loader.exec_module(core_logic)
53
+ print("✅ core_logic.so 載入成功")
54
+ else:
55
+ raise RuntimeError("❌ 無法建立模組規格 (Spec creation failed)")
56
+ except Exception as e:
57
+ print(f"❌ core_logic.so 載入發生錯誤: {e}")
58
+ import traceback
59
+ traceback.print_exc()
60
+ core_logic = None
61
+
62
+ # ==========================================
63
+ def bridge_function(file_obj, zoom_level, preserve_details, progress=gr.Progress()):
64
+ if core_logic is None:
65
+ yield "❌ 嚴重錯誤:核心模組載入失敗 (No module named 'core_logic'),請檢查 Logs。", None
66
+ return
67
+
68
+ if file_obj is None:
69
+ yield "❌ 請先上傳檔案", None
70
+ return
71
+
72
+ def update_progress(p, msg):
73
+ progress(p, desc=msg)
74
+
75
+ yield "🚀 檔案接收成功,處理中...", None
76
+
77
+ try:
78
+ result_msg, output_path = core_logic.run_conversion(
79
+ file_obj.name,
80
+ zoom_level,
81
+ preserve_details,
82
+ progress_callback=update_progress
83
+ )
84
+
85
+ if "Success" in result_msg:
86
+ yield f"✅ 轉換成功! ({result_msg})", output_path
87
+ else:
88
+ yield f"❌ {result_msg}", None
89
+
90
+ except Exception as e:
91
+ yield f"❌ 執行錯誤: {e}", None
92
+
93
+
94
+ # ==========================================
95
+
96
+ with gr.Blocks(title="GeoJSON 轉 PMTiles") as demo:
97
+ gr.Markdown("## 🗺️ GeoJSON to PMTiles")
98
+
99
+ with gr.Row():
100
+ with gr.Column():
101
+ input_file = gr.File(label="上傳 GeoJSON (自動開始)")
102
+ with gr.Group():
103
+ zoom_slider = gr.Slider(0, 20, value=14, step=1, label="Max Zoom")
104
+ preserve_checkbox = gr.Checkbox(label="強制保留細節", value=True)
105
+ btn = gr.Button("開始轉換")
106
+
107
+ with gr.Column():
108
+ status_box = gr.Textbox(label="狀態", value="等待中...", interactive=False)
109
+ output_file = gr.File(label="下載")
110
+
111
+ input_file.upload(
112
+ bridge_function,
113
+ [input_file, zoom_slider, preserve_checkbox],
114
+ [status_box, output_file]
115
+ )
116
+ btn.click(
117
+ bridge_function,
118
+ [input_file, zoom_slider, preserve_checkbox],
119
+ [status_box, output_file]
120
+ )
121
+
122
+
123
+ # ==========================================
124
+ if __name__ == "__main__":
125
+ demo.queue(default_concurrency_limit=10).launch(show_api=False)
packages.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ build-essential
2
+ python3-dev
3
+ libsqlite3-dev
4
+ zlib1g-dev
5
+ git
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ spaces
2
+ gradio==4.44.1
3
+ huggingface_hub==0.24.0
4
+ cython
5
+ setuptools