HosseinAhmadi commited on
Commit
5aa1b8c
·
verified ·
1 Parent(s): 4de73ea

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -126
app.py CHANGED
@@ -1,157 +1,62 @@
1
- # app.py - نسخه نهایی کاتب با ظاهر سفید، راست‌چین، حرفه‌ای و کاملاً خوانا
2
  import gradio as gr
3
- import pandas as pd
4
- import numpy as np
5
  from catboost import CatBoostRegressor
6
 
7
- # لود مدل
8
  model = CatBoostRegressor()
9
  model.load_model("kaatib_v8_optimized.cbm")
10
 
11
  def predict(area_type, area, rooms, neighborhood, elevator, parking, warehouse, age):
12
  effective_area = area if area_type == "متراژ مفید (معمول در دیوار)" else area * 0.87
13
- df = pd.DataFrame([{
14
- 'area': effective_area,
15
- 'log_area': np.log1p(effective_area),
16
- 'rooms': int(rooms),
17
- 'age': int(age),
18
- 'is_new': 1 if age <= 5 else 0,
19
- 'neighborhood': neighborhood.strip(),
20
- 'elevator': bool(elevator),
21
- 'parking': bool(parking),
22
- 'warehouse': bool(warehouse)
23
- }])
24
- pred = model.predict(df)[0] / 1_000_000_000
25
- lower = pred * 0.88
26
- upper = pred * 1.15
27
  return f"""
28
- <div style="text-align:center; padding:35px; background:#0d2b1f; color:white; border-radius:18px; border:4px solid #d4af37; box-shadow:0 10px 30px rgba(0,0,0,0.5);">
29
- <h1 style="font-size:48px; margin:10px 0; color:#d4af37;">{pred:.2f} میلیارد تومان</h1>
30
- <p style="font-size:20px; margin:5px; color:#b8d5cd;">رنج واقعی بازار: {lower:.2f} – {upper:.2f} میلیارد</p>
31
  </div>
32
  """
33
 
34
- # CSS کاملاً تمیز، سفید، راست‌چین و حرفه‌ای
35
- css = """
36
- <style>
37
- /* پس‌زمینه اصلی سفید و تمیز */
38
- .gradio-container {
39
- max-width: 920px !important;
40
- margin: 20px auto !important;
41
- background: white !important;
42
- border-radius: 24px !important;
43
- box-shadow: 0 10px 40px rgba(0,0,0,0.1) !important;
44
- padding: 30px !important;
45
- direction: rtl !important;
46
- text-align: right !important;
47
- font-family: 'Vazir', Tahoma, sans-serif !important;
48
- }
49
- body {background: #f5f7fa !important;}
50
-
51
- /* همه متن‌ها مشکی و راست‌چین */
52
- label, .gr-form label, h1, h2, h3, p, span, div {
53
- color: #1a1a1a !important;
54
- text-align: right !important;
55
- direction: rtl !important;
56
- font-weight: 600 !important;
57
- }
58
-
59
- /* باکس‌های ورودی سفید با حاشیه نرم */
60
- .gr-textbox, .gr-dropdown, .gr-slider > div, .gr-radio > div, .gr-checkbox > div {
61
- background: white !important;
62
- border: 2px solid #e0e0e0 !important;
63
- border-radius: 16px !important;
64
- padding: 12px !important;
65
- }
66
-
67
- /* متن داخل تکست‌باکس و دراپ‌داون طوسی */
68
- .gr-textbox input, .gr-textbox textarea,
69
- .gr-dropdown select, .gr-dropdown input {
70
- color: #666666 !important;
71
- font-size: 16px !important;
72
- }
73
-
74
- /* placeholder طوسی */
75
- .gr-textbox input::placeholder {
76
- color: #999999 !important;
77
- }
78
-
79
- /* اسلایدر — خط و اعداد */
80
- .gr-slider input[type="range"] {
81
- background: #d4af37 !important;
82
- }
83
- .gr-slider .track {background: #d4af37 !important;}
84
- .gr-slider > div > div > div {color: #1a1a1a !important; font-weight: bold !important;}
85
-
86
- /* چک‌باکس و رادیو */
87
- .gr-checkbox label, .gr-radio label {
88
- color: #1a1a1a !important;
89
- background: white !important;
90
- border: 2px solid #d4af37 !important;
91
- border-radius: 12px !important;
92
- padding: 10px 16px !important;
93
- }
94
-
95
- /* دکمه طلایی */
96
- .gr-button {
97
- background: linear-gradient(45deg, #d4af37, #b8971a) !important;
98
- color: black !important;
99
- font-weight: bold !important;
100
- font-size: 22px !important;
101
- padding: 18px !important;
102
- border-radius: 18px !important;
103
- box-shadow: 0 8px 25px rgba(212,175,55,0.4) !important;
104
- }
105
- </style>
106
- """
107
-
108
- with gr.Blocks(css=css, title="کاتب - پیش‌بینی قیمت آپارتمان تهران") as app:
109
- # هدر
110
  gr.HTML("""
111
- <div style="text-align:center; padding:50px 20px; background:linear-gradient(135deg,#0d2b1f,#1e4d38); border-radius:20px; margin-bottom:30px;">
112
- <h1 style="font-size:62px; margin:0; color:#d4af37; text-shadow:0 0 30px #d4af3777;">کاتب</h1>
113
- <p style="font-size:28px; color:#b8d5cd; margin:10px 0 5px;">هوش مصنوعی پیش‌بینی قیمت مسکن تهران</p>
114
- <p style="font-size:20px; color:#8fb8a2;">بر اساس ۸۱,۰۰۰ آگهی واقعی دیوار ۱۴۰۴</p>
115
  </div>
116
  """)
117
 
118
- # فرم ورودی
119
- area_type = gr.Radio(
120
- ["متراژ مفید (معمول در دیوار)", "متراژ سندی"],
121
- value="متراژ مفید (معمول در دیوار)",
122
- label="نوع متراژ"
123
- )
124
-
125
  with gr.Row():
126
- area = gr.Slider(40, 450, 90, step=1, label="متراژ (مترمربع)")
 
 
127
  rooms = gr.Dropdown([1,2,3,4,5,6], value=3, label="تعداد خواب")
128
-
129
- neighborhood = gr.Textbox(
130
- placeholder="مثل: سعادت آباد، پونک، نیاوران، زعفرانیه، جردن، تهرانپارس...",
131
- label="محله"
132
- )
133
-
134
  with gr.Row():
135
  elevator = gr.Checkbox(label="آسانسور", value=True)
136
  parking = gr.Checkbox(label="پارکینگ", value=True)
137
  warehouse = gr.Checkbox(label="انباری", value=True)
138
-
139
  age = gr.Slider(0, 50, 8, step=1, label="سن بنا (سال)")
140
 
141
- # دکمه و خروجی
142
- btn = gr.Button("پیش‌بینی قیمت با کاتب")
143
- output = gr.Markdown()
144
-
145
- btn.click(
146
- fn=predict,
147
  inputs=[area_type, area, rooms, neighborhood, elevator, parking, warehouse, age],
148
- outputs=output
149
  )
150
 
151
- # فوتر
152
  gr.HTML("""
153
- <div style="text-align:center; margin-top:50px; padding:30px; background:#f8f9fa; border-radius:18px; border:2px dashed #d4af37;">
154
- <p style="color:#d4af37; font-size:24px; margin:0;">ساخته شده با افتخار در ایران</p>
155
  </div>
156
  """)
157
 
 
1
+ # app.py - نسخه فوق سبک و تضمینی برای HF Spaces (با T4/A10G)
2
  import gradio as gr
 
 
3
  from catboost import CatBoostRegressor
4
 
5
+ # لود مدل با پیام انتظار (تا کاربر بفهمه داره لود می‌شه)
6
  model = CatBoostRegressor()
7
  model.load_model("kaatib_v8_optimized.cbm")
8
 
9
  def predict(area_type, area, rooms, neighborhood, elevator, parking, warehouse, age):
10
  effective_area = area if area_type == "متراژ مفید (معمول در دیوار)" else area * 0.87
11
+ pred = model.predict([[
12
+ effective_area,
13
+ __import__("numpy").log1p(effective_area),
14
+ rooms,
15
+ age,
16
+ 1 if age <= 5 else 0,
17
+ neighborhood.strip(),
18
+ elevator,
19
+ parking,
20
+ warehouse
21
+ ]])[0] / 1_000_000_000
22
+
 
 
23
  return f"""
24
+ <div style="text-align:center;padding:35px;background:#0d2b1f;color:white;border-radius:18px;border:4px solid #d4af37;">
25
+ <h1 style="color:#d4af37;font-size:48px;margin:10px 0">{pred:.2f} میلیارد تومان</h1>
26
+ <p style="font-size:20px;color:#b8d5cd">رنج واقعی: {(pred*0.88):.2f} – {(pred*1.15):.2f} میلیارد</p>
27
  </div>
28
  """
29
 
30
+ with gr.Blocks(title="کاتب - پیش‌بینی قیمت آپارتمان تهران") as app:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  gr.HTML("""
32
+ <div style="text-align:center;padding:50px;background:linear-gradient(135deg,#0d2b1f,#1e4d38);border-radius:20px;margin-bottom:30px">
33
+ <h1 style="font-size:62px;margin:0;color:#d4af37;text-shadow:0 0 30px #d4af3777">کاتب</h1>
34
+ <p style="font-size:28px;color:#b8d5cd">هوش مصنوعی پیش‌بینی قیمت مسکن تهران</p>
35
+ <p style="font-size:20px;color:#8fb8a2">۸۱,۰۰۰ آگهی واقعی دیوار ۱۴۰۴</p>
36
  </div>
37
  """)
38
 
 
 
 
 
 
 
 
39
  with gr.Row():
40
+ area_type = gr.Radio(["متراژ مفید (معمول در دیوار)", "متراژ سندی"], value="متراژ مفید (معمول در دیوار)", label="نوع متراژ")
41
+ with gr.Row():
42
+ area = gr.Slider(40, 450, 90, step=1, label="متراژ")
43
  rooms = gr.Dropdown([1,2,3,4,5,6], value=3, label="تعداد خواب")
44
+ neighborhood = gr.Textbox(placeholder="مثل: سعادت آباد، پونک، نیاوران...", label="محله")
 
 
 
 
 
45
  with gr.Row():
46
  elevator = gr.Checkbox(label="آسانسور", value=True)
47
  parking = gr.Checkbox(label="پارکینگ", value=True)
48
  warehouse = gr.Checkbox(label="انباری", value=True)
 
49
  age = gr.Slider(0, 50, 8, step=1, label="سن بنا (سال)")
50
 
51
+ gr.Button("پیش‌بینی قیمت").click(
52
+ predict,
 
 
 
 
53
  inputs=[area_type, area, rooms, neighborhood, elevator, parking, warehouse, age],
54
+ outputs=gr.Markdown()
55
  )
56
 
 
57
  gr.HTML("""
58
+ <div style="text-align:center;margin-top:50px;padding:30px;background:#f8f9fa;border-radius:18px;border:2px dashed #d4af37">
59
+ <p style="color:#d4af37;font-size:24px">ساخته شده با افتخار در ایران</p>
60
  </div>
61
  """)
62