Ann-Grabetski commited on
Commit
753aac8
·
1 Parent(s): 813e6ba

Readme done

Browse files
Files changed (1) hide show
  1. README.md +228 -6
README.md CHANGED
@@ -2,15 +2,237 @@
2
  sdk: docker
3
  app_port: 7860
4
  ---
 
 
5
 
 
 
 
 
 
 
6
 
7
- # planparser
8
- Architectural plan elements detection
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
 
10
 
11
- [Lind for data downloading](https://universe.roboflow.com/research-g8szb/floorplan-details-fork/dataset/1)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
 
13
 
14
- docker run -d --name planparser -p 7860:7860 --env-file .env planparser
15
- docker stop planparser
16
- docker start planparser
 
2
  sdk: docker
3
  app_port: 7860
4
  ---
5
+ # 🧩 planparser
6
+ **Architectural plan elements detection** на базе **Ultralytics YOLO** с удобным **Gradio UI** и **FastAPI** API.
7
 
8
+ [![Python](https://img.shields.io/badge/Python-3.12%2B-blue)](#)
9
+ [![Ultralytics](https://img.shields.io/badge/Ultralytics-YOLO-black)](#)
10
+ [![Gradio](https://img.shields.io/badge/Gradio-UI-orange)](#)
11
+ [![FastAPI](https://img.shields.io/badge/FastAPI-API-teal)](#)
12
+ [![Docker](https://img.shields.io/badge/Docker-ready-2496ED)](#)
13
+ [![HuggingFace](https://img.shields.io/badge/HuggingFace-Spaces-yellow)](#)
14
 
15
+ ---
16
+
17
+ ## ✨ Что это
18
+ planparser берет изображение плана, прогоняет через YOLO и показывает результат в удобном UI:
19
+
20
+ - 🖼️ изображение с bbox и подписями классов
21
+ - 📋 таблицу-спецификацию (Element, Qty)
22
+ - ⬇️ CSV файл для скачивания (element_schedule.csv)
23
+ - 🧾 raw detections в JSON (class_id, class_name, confidence, xyxy)
24
+ - ⏱️ время обработки
25
+
26
+ ---
27
+
28
+ ## 🍬 Фичи
29
+ - 🖼️ Upload изображения + Examples
30
+ - 🧠 выбор модели из списка
31
+ - ⚡ Auto-run или ручной Submit
32
+ - 🖍️ отрисовка bbox + нормализованные названия классов
33
+ - 📋 element schedule в таблице (Element, Qty)
34
+ - ⬇️ экспорт schedule в CSV
35
+ - 📦 raw detections в JSON (в Accordion)
36
+ - 🧰 FastAPI inference API
37
+ - 🐳 контейнеризация и запуск через Docker
38
+ - 🤗 доступ к уже развернутому приложению на Hugging Face Spaces (без локальной установки)
39
+
40
+ ---
41
+
42
+ ## 🧠 Архитектура
43
+ ````mermaid
44
+ flowchart LR
45
+ A[Gradio UI] -->|POST image + weights_path| B[FastAPI /predict]
46
+ B --> C[Ultralytics YOLO]
47
+ C --> B
48
+ B -->|detections JSON| A
49
+ A --> D[Render bbox + labels]
50
+ A --> E[Element schedule table]
51
+ A --> F[CSV export]
52
+ A --> G[Raw detections accordion]
53
+ ````
54
+
55
+ ---
56
+
57
+ ## 🗂️ Структура проекта
58
+
59
+ ````text
60
+ planparser/
61
+ app.py # Gradio UI клиент
62
+ api.py # FastAPI инференс сервер
63
+ src/
64
+ examples/ # примеры картинок (опционально)
65
+ models/ # веса *.pt (опционально)
66
+ .env # конфиг
67
+ ````
68
+
69
+ ---
70
+
71
+ ## 🚀 Быстрый старт
72
+
73
+ Установка:
74
+
75
+ ```bash
76
+ git clone https://github.com/anngrrr/planparser.git
77
+ cd planparser
78
+ uv sync
79
+ ````
80
+
81
+ ---
82
+
83
+ ## ⚙️ Конфиг (.env)
84
+
85
+ Минимум:
86
+
87
+ ````env
88
+ API_URL="http://127.0.0.1:8000"
89
+ MODEL_DIR="src/models"
90
+ MODEL_1="yolo11l_custom.pt"
91
+ MODEL_2="custom.pt"
92
+ EXAMPLES_DIR="src/examples"
93
+ ````
94
+
95
+ Таблица:
96
+
97
+ | Переменная | Зачем |
98
+ | -------------------- | --------------------- |
99
+ | `API_URL` | адрес FastAPI для UI |
100
+ | `MODEL_DIR` | папка с весами |
101
+ | `MODEL_1`, `MODEL_2` | имена файлов *.pt |
102
+ | `EXAMPLES_DIR` | папка примеров для UI |
103
+
104
+ ---
105
+
106
+ ## 🏃 Запуск локально
107
+
108
+ ### 1) Поднять API
109
+
110
+ ````bash
111
+ uv run uvicorn planparser.api:app --host 0.0.0.0 --port 8000
112
+ ````
113
+
114
+ ### 2) Поднять UI
115
+
116
+ ````bash
117
+ uv run gradio planparser/app.py
118
+ ````
119
+
120
+ Открыть:
121
+
122
+ * API: `http://127.0.0.1:8000`
123
+ * UI: `http://127.0.0.1:7860`
124
+
125
+ ---
126
+ ## 🔌 API
127
+
128
+ ### `GET /health`
129
+ Ответ:
130
+ ````json
131
+ {"ok": true}
132
+ ````
133
 
134
+ ### `POST /predict`
135
 
136
+ Form-data:
137
+
138
+ * `file`: изображение
139
+ * `weights_path`: путь к `.pt` файлу весов (должен существовать на стороне API)
140
+
141
+ Пример ответа:
142
+
143
+ ````json
144
+ {
145
+ "detections": [
146
+ {
147
+ "class_id": 1,
148
+ "class_name": "door",
149
+ "confidence": 0.87,
150
+ "xyxy": [12.3, 45.6, 78.9, 120.1]
151
+ }
152
+ ]
153
+ }
154
+ ````
155
+
156
+ ---
157
+
158
+ ## 🧩 Модели
159
+
160
+ ### Локальные веса
161
+
162
+ Положи `.pt` в `MODEL_DIR` и укажи в `.env`:
163
+
164
+ ````env
165
+ MODEL_DIR="src/models"
166
+ MODEL_1="yolo11n.pt"
167
+ MODEL_2="yolo11l.pt"
168
+ ````
169
+
170
+ ### Как выбираются веса
171
+ Веса выбираются в UI и передаются в API как `weights_path`.
172
+
173
+ UI:
174
+ - берет `MODEL_DIR`
175
+ - собирает список доступных моделей из `.env` (`MODEL_1`, `MODEL_2`)
176
+ - отображает их в Dropdown
177
+
178
+ API:
179
+ - принимает `weights_path`
180
+ - проверяет что это существующий `.pt` файл
181
+ - кэширует загруженные модели по абсолютному пути (чтобы повторно не грузить веса)
182
+
183
+ ---
184
+
185
+ ## 🐳 Docker
186
+
187
+ ### Build
188
+
189
+ ````bash
190
+ docker build -t planparser .
191
+ ````
192
+
193
+ ### Run
194
+
195
+ ````bash
196
+ docker run --rm \
197
+ -p 7860:7860 -p 8000:8000 \
198
+ --env-file .env \
199
+ -v "$(pwd)/src/models:/app/src/models" \
200
+ -v "$(pwd)/src/examples:/app/src/examples" \
201
+ planparser
202
+ ````
203
+
204
+ ---
205
+
206
+ ## 🧪 Трейнинг (если надо)
207
+
208
+ Минимальный пример (Ultralytics):
209
+
210
+ ````bash
211
+ yolo detect train model=yolo11n.pt data=src/data/data.yaml imgsz=640 epochs=50
212
+ ````
213
+
214
+ ---
215
+
216
+ ## 📎 Датасеты и лицензии
217
+
218
+ ### Dataset
219
+ Используется датасет [**Floorplan details Fork**](https://universe.roboflow.com/research-g8szb/floorplan-details-fork/dataset/1), лицензия **CC BY 4.0**
220
+
221
+ ### Ultralytics YOLO
222
+
223
+ Ultralytics YOLO распространяется по **AGPL-3.0**
224
+
225
+ ---
226
+
227
+ ## ❤️ Credits
228
+
229
+ * Ultralytics YOLO
230
+ * Gradio
231
+ * FastAPI
232
+ * Hugging Face
233
+
234
+ ---
235
 
236
+ ## 📜 License
237
 
238
+ Смотри файл `LICENSE`.