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

Update app.py

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