Zai commited on
Commit
b4ef065
·
1 Parent(s): 39f9c02
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. Dockerfile +5 -6
  2. Interface/House/__init__.py +0 -0
  3. Interface/House/__pycache__/__init__.cpython-311.pyc +0 -0
  4. Interface/House/__pycache__/__init__.cpython-37.pyc +0 -0
  5. Interface/House/__pycache__/settings.cpython-311.pyc +0 -0
  6. Interface/House/__pycache__/settings.cpython-37.pyc +0 -0
  7. Interface/House/__pycache__/urls.cpython-311.pyc +0 -0
  8. Interface/House/__pycache__/urls.cpython-37.pyc +0 -0
  9. Interface/House/__pycache__/wsgi.cpython-37.pyc +0 -0
  10. Interface/House/asgi.py +0 -16
  11. Interface/House/settings.py +0 -127
  12. Interface/House/urls.py +0 -37
  13. Interface/House/wsgi.py +0 -16
  14. Interface/Houseweb/__init__.py +0 -0
  15. Interface/Houseweb/__pycache__/__init__.cpython-311.pyc +0 -0
  16. Interface/Houseweb/__pycache__/__init__.cpython-37.pyc +0 -0
  17. Interface/Houseweb/__pycache__/create.cpython-37.pyc +0 -0
  18. Interface/Houseweb/__pycache__/floorplan2.cpython-37.pyc +0 -0
  19. Interface/Houseweb/__pycache__/network.cpython-37.pyc +0 -0
  20. Interface/Houseweb/__pycache__/utils.cpython-37.pyc +0 -0
  21. Interface/Houseweb/__pycache__/utils1.cpython-37.pyc +0 -0
  22. Interface/Houseweb/__pycache__/views.cpython-311.pyc +0 -0
  23. Interface/Houseweb/__pycache__/views.cpython-37.pyc +0 -0
  24. Interface/Houseweb/admin.py +0 -3
  25. Interface/Houseweb/apps.py +0 -5
  26. Interface/Houseweb/migrations/__init__.py +0 -0
  27. Interface/Houseweb/models.py +0 -3
  28. Interface/Houseweb/tests.py +0 -3
  29. Interface/Houseweb/views.py +0 -757
  30. Interface/Img/data.mat.png +0 -0
  31. Interface/Img/data_test_converted.png +0 -0
  32. Interface/Img/data_train_converted.png +0 -0
  33. Interface/Img/interface.jpg +0 -0
  34. Interface/Img/paper.png +0 -0
  35. Interface/align_fp/align_adjacent_room3.m +0 -121
  36. Interface/align_fp/align_fp.m +0 -108
  37. Interface/align_fp/align_neighbor.m +0 -53
  38. Interface/align_fp/align_with_boundary.m +0 -29
  39. Interface/align_fp/find_close_seg.m +0 -74
  40. Interface/align_fp/find_room_order.m +0 -29
  41. Interface/align_fp/get_entrance_space.m +0 -14
  42. Interface/align_fp/get_room_boundary.m +0 -25
  43. Interface/align_fp/regularize_fp.m +0 -111
  44. Interface/align_fp/shrink_box.m +0 -61
  45. Interface/db.sqlite3 +0 -0
  46. Interface/manage.py +0 -21
  47. Interface/model/__pycache__/_floorplan2.cpython-37.pyc +0 -0
  48. Interface/model/__pycache__/add_archs.cpython-37.pyc +0 -0
  49. Interface/model/__pycache__/box_utils.cpython-37.pyc +0 -0
  50. Interface/model/__pycache__/crn.cpython-37.pyc +0 -0
Dockerfile CHANGED
@@ -4,18 +4,17 @@ FROM python:3.7
4
  # Set the working directory to /app
5
  WORKDIR /app
6
 
7
- # Copy the contents of the Interface folder into the container at /app
8
- COPY Interface /app
9
 
10
  # Install any needed packages specified in requirements.txt
11
- RUN pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117 -U
12
- RUN pip install django opencv-python scipy pandas shapely -U
13
 
14
- # Expose the port the app runs on
15
  EXPOSE 7860
16
 
17
  # Define environment variable
18
- ENV NAME g2p_app
19
 
20
  # Run app.py when the container launches
21
  CMD ["python", "manage.py", "runserver", "0.0.0.0:7860"]
 
4
  # Set the working directory to /app
5
  WORKDIR /app
6
 
7
+ # Copy the current directory contents into the container at /app
8
+ COPY . /app
9
 
10
  # Install any needed packages specified in requirements.txt
11
+ RUN pip install --no-cache-dir -r requirements.txt
 
12
 
13
+ # Make port 7860 available to the world outside this container
14
  EXPOSE 7860
15
 
16
  # Define environment variable
17
+ ENV NAME World
18
 
19
  # Run app.py when the container launches
20
  CMD ["python", "manage.py", "runserver", "0.0.0.0:7860"]
Interface/House/__init__.py DELETED
File without changes
Interface/House/__pycache__/__init__.cpython-311.pyc DELETED
Binary file (191 Bytes)
 
Interface/House/__pycache__/__init__.cpython-37.pyc DELETED
Binary file (157 Bytes)
 
Interface/House/__pycache__/settings.cpython-311.pyc DELETED
Binary file (3.1 kB)
 
Interface/House/__pycache__/settings.cpython-37.pyc DELETED
Binary file (2.38 kB)
 
Interface/House/__pycache__/urls.cpython-311.pyc DELETED
Binary file (1.92 kB)
 
Interface/House/__pycache__/urls.cpython-37.pyc DELETED
Binary file (1.4 kB)
 
Interface/House/__pycache__/wsgi.cpython-37.pyc DELETED
Binary file (536 Bytes)
 
Interface/House/asgi.py DELETED
@@ -1,16 +0,0 @@
1
- """
2
- ASGI config for House project.
3
-
4
- It exposes the ASGI callable as a module-level variable named ``application``.
5
-
6
- For more information on this file, see
7
- https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/
8
- """
9
-
10
- import os
11
-
12
- from django.core.asgi import get_asgi_application
13
-
14
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'House.settings')
15
-
16
- application = get_asgi_application()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/House/settings.py DELETED
@@ -1,127 +0,0 @@
1
- """
2
- Django settings for House project.
3
-
4
- Generated by 'django-admin startproject' using Django 3.0.2.
5
-
6
- For more information on this file, see
7
- https://docs.djangoproject.com/en/3.0/topics/settings/
8
-
9
- For the full list of settings and their values, see
10
- https://docs.djangoproject.com/en/3.0/ref/settings/
11
- """
12
-
13
- import os
14
-
15
- # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
16
- BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
17
-
18
-
19
- # Quick-start development settings - unsuitable for production
20
- # See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/
21
-
22
- # SECURITY WARNING: keep the secret key used in production secret!
23
- SECRET_KEY = 'y&ol628+upm0r&=8pilr@u_w_0ji!1afp!st*y#ympn3u@!3s%'
24
-
25
- # SECURITY WARNING: don't run with debug turned on in production!
26
- DEBUG = True
27
-
28
- ALLOWED_HOSTS = []
29
-
30
-
31
- # Application definition
32
-
33
- INSTALLED_APPS = [
34
- 'django.contrib.admin',
35
- 'django.contrib.auth',
36
- 'django.contrib.contenttypes',
37
- 'django.contrib.sessions',
38
- 'django.contrib.messages',
39
- 'django.contrib.staticfiles',
40
- ]
41
-
42
- MIDDLEWARE = [
43
- 'django.middleware.security.SecurityMiddleware',
44
- 'django.contrib.sessions.middleware.SessionMiddleware',
45
- 'django.middleware.common.CommonMiddleware',
46
- 'django.middleware.csrf.CsrfViewMiddleware',
47
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
48
- 'django.contrib.messages.middleware.MessageMiddleware',
49
- 'django.middleware.clickjacking.XFrameOptionsMiddleware',
50
- ]
51
-
52
- ROOT_URLCONF = 'House.urls'
53
-
54
- TEMPLATES = [
55
- {
56
- 'BACKEND': 'django.template.backends.django.DjangoTemplates',
57
- 'DIRS': [os.path.join(BASE_DIR, 'templates')]
58
- ,
59
- 'APP_DIRS': True,
60
- 'OPTIONS': {
61
- 'context_processors': [
62
- 'django.template.context_processors.debug',
63
- 'django.template.context_processors.request',
64
- 'django.contrib.auth.context_processors.auth',
65
- 'django.contrib.messages.context_processors.messages',
66
- ],
67
- },
68
- },
69
- ]
70
-
71
- WSGI_APPLICATION = 'House.wsgi.application'
72
-
73
-
74
- # Database
75
- # https://docs.djangoproject.com/en/3.0/ref/settings/#databases
76
-
77
- DATABASES = {
78
- 'default': {
79
- 'ENGINE': 'django.db.backends.sqlite3',
80
- 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
81
- }
82
- }
83
-
84
-
85
- # Password validation
86
- # https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators
87
-
88
- AUTH_PASSWORD_VALIDATORS = [
89
- {
90
- 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
91
- },
92
- {
93
- 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
94
- },
95
- {
96
- 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
97
- },
98
- {
99
- 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
100
- },
101
- ]
102
-
103
-
104
- # Internationalization
105
- # https://docs.djangoproject.com/en/3.0/topics/i18n/
106
-
107
- LANGUAGE_CODE = 'en-us'
108
-
109
- TIME_ZONE = 'UTC'
110
-
111
- USE_I18N = True
112
-
113
- USE_L10N = True
114
-
115
- USE_TZ = True
116
-
117
-
118
- # Static files (CSS, JavaScript, Images)
119
- # https://docs.djangoproject.com/en/3.0/howto/static-files/
120
-
121
- STATIC_URL = '/static/'
122
- HERE = os.path.dirname(os.path.abspath(__file__))
123
- HERE = os.path.join(HERE, '../')
124
- STATICFILES_DIRS = (
125
- os.path.join(HERE, 'static/'),
126
- )
127
- ALLOWED_HOSTS = ['*']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/House/urls.py DELETED
@@ -1,37 +0,0 @@
1
- """House URL Configuration
2
-
3
- The `urlpatterns` list routes URLs to views. For more information please see:
4
- https://docs.djangoproject.com/en/3.0/topics/http/urls/
5
- Examples:
6
- Function views
7
- 1. Add an import: from my_app import views
8
- 2. Add a URL to urlpatterns: path('', views.home, name='home')
9
- Class-based views
10
- 1. Add an import: from other_app.views import Home
11
- 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
12
- Including another URLconf
13
- 1. Import the include() function: from django.urls import include, path
14
- 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
15
- """
16
- from django.contrib import admin
17
- from django.urls import path
18
-
19
- from Houseweb import views
20
-
21
- urlpatterns = [
22
- # path('admin/', admin.site.urls),
23
- path('index/LoadTestBoundary', views.LoadTestBoundary),
24
- path('index/NumSearch/', views.NumSearch),
25
- path(r'index/LoadTrainHouse/', views.LoadTrainHouse),
26
- path(r'index/TransGraph/', views.TransGraph),
27
- path(r'index/TransGraph_net/', views.TransGraph_net),
28
- path(r'index/Init/', views.Init),
29
- path(r'index/AdjustGraph/', views.AdjustGraph),
30
- path(r'index/GraphSearch/', views.GraphSearch),
31
- path(r'index/RelBox/', views.RelBox),
32
- path(r'index/Save_Editbox/', views.Save_Editbox),
33
-
34
- path('home', views.home),
35
-
36
-
37
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/House/wsgi.py DELETED
@@ -1,16 +0,0 @@
1
- """
2
- WSGI config for House project.
3
-
4
- It exposes the WSGI callable as a module-level variable named ``application``.
5
-
6
- For more information on this file, see
7
- https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/
8
- """
9
-
10
- import os
11
-
12
- from django.core.wsgi import get_wsgi_application
13
-
14
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'House.settings')
15
-
16
- application = get_wsgi_application()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/Houseweb/__init__.py DELETED
File without changes
Interface/Houseweb/__pycache__/__init__.cpython-311.pyc DELETED
Binary file (194 Bytes)
 
Interface/Houseweb/__pycache__/__init__.cpython-37.pyc DELETED
Binary file (160 Bytes)
 
Interface/Houseweb/__pycache__/create.cpython-37.pyc DELETED
Binary file (3.27 kB)
 
Interface/Houseweb/__pycache__/floorplan2.cpython-37.pyc DELETED
Binary file (19.5 kB)
 
Interface/Houseweb/__pycache__/network.cpython-37.pyc DELETED
Binary file (3.89 kB)
 
Interface/Houseweb/__pycache__/utils.cpython-37.pyc DELETED
Binary file (9.39 kB)
 
Interface/Houseweb/__pycache__/utils1.cpython-37.pyc DELETED
Binary file (7.52 kB)
 
Interface/Houseweb/__pycache__/views.cpython-311.pyc DELETED
Binary file (54.4 kB)
 
Interface/Houseweb/__pycache__/views.cpython-37.pyc DELETED
Binary file (23.6 kB)
 
Interface/Houseweb/admin.py DELETED
@@ -1,3 +0,0 @@
1
- from django.contrib import admin
2
-
3
- # Register your models here.
 
 
 
 
Interface/Houseweb/apps.py DELETED
@@ -1,5 +0,0 @@
1
- from django.apps import AppConfig
2
-
3
-
4
- class HousewebConfig(AppConfig):
5
- name = 'Houseweb'
 
 
 
 
 
 
Interface/Houseweb/migrations/__init__.py DELETED
File without changes
Interface/Houseweb/models.py DELETED
@@ -1,3 +0,0 @@
1
- from django.db import models
2
-
3
- # Create your models here.
 
 
 
 
Interface/Houseweb/tests.py DELETED
@@ -1,3 +0,0 @@
1
- from django.test import TestCase
2
-
3
- # Create your tests here.
 
 
 
 
Interface/Houseweb/views.py DELETED
@@ -1,757 +0,0 @@
1
- from django.shortcuts import render
2
- from django.http import HttpResponse, JsonResponse
3
- import json
4
- import model.test as mltest
5
- import model.utils as mdul
6
- from model.floorplan import *
7
- import retrieval.retrieval as rt
8
- import time
9
- import pickle
10
- import scipy.io as sio
11
- import numpy as np
12
- from model.decorate import *
13
- import math
14
- import pandas as pd
15
- import matlab.engine
16
-
17
- global test_data, test_data_topk, testNameList, trainNameList
18
- global train_data, trainNameList, trainTF, train_data_eNum, train_data_rNum
19
- global engview, model
20
- global tf_train, centroids, clusters
21
-
22
-
23
- def home(request):
24
- return render(request, "home.html", )
25
-
26
-
27
- def Init(request):
28
- start = time.clock()
29
- getTestData()
30
- getTrainData()
31
- loadMatlabEng()
32
- loadModel()
33
- loadRetrieval()
34
- end = time.clock()
35
- print('Init(model+test+train+engine+retrieval) time: %s Seconds' % (end - start))
36
-
37
- return HttpResponse(None)
38
-
39
-
40
- def loadMatlabEng():
41
- startengview = time.clock()
42
- global engview
43
- engview = matlab.engine.start_matlab()
44
- engview.addpath(r'./align_fp/', nargout=0)
45
- endengview = time.clock()
46
- print(' matlab.engineview time: %s Seconds' % (endengview - startengview))
47
-
48
-
49
- def loadRetrieval():
50
- global tf_train, centroids, clusters
51
- t1 = time.clock()
52
- tf_train = np.load('./retrieval/tf_train.npy')
53
- centroids = np.load('./retrieval/centroids_train.npy')
54
- clusters = np.load('./retrieval/clusters_train.npy')
55
- t2 = time.clock()
56
- print('load tf/centroids/clusters', t2 - t1)
57
-
58
-
59
- def getTestData():
60
- start = time.clock()
61
- global test_data, testNameList, trainNameList
62
-
63
- test_data = pickle.load(open('./static/Data/data_test_converted.pkl', 'rb'))
64
- test_data, testNameList, trainNameList = test_data['data'], list(test_data['testNameList']), list(
65
- test_data['trainNameList'])
66
- end = time.clock()
67
- print('getTestData time: %s Seconds' % (end - start))
68
-
69
-
70
- def getTrainData():
71
- start = time.clock()
72
- global train_data, trainNameList, trainTF, train_data_eNum, train_data_rNum
73
-
74
- train_data = pickle.load(open('./static/Data/data_train_converted.pkl', 'rb'))
75
- train_data, trainNameList, trainTF = train_data['data'], list(train_data['nameList']), list(train_data['trainTF'])
76
-
77
- train_data_eNum = pickle.load(open('./static/Data/data_train_eNum.pkl', 'rb'))
78
- train_data_eNum = train_data_eNum['eNum']
79
- train_data_rNum = np.load('./static/Data/rNum_train.npy')
80
-
81
- end = time.clock()
82
- print('getTrainData time: %s Seconds' % (end - start))
83
-
84
-
85
- def loadModel():
86
- global model, train_data, trainNameList
87
- start = time.clock()
88
- model = mltest.load_model()
89
- end = time.clock()
90
- print('loadModel time: %s Seconds' % (end - start))
91
- start = time.clock()
92
- test = train_data[trainNameList.index("75119")]
93
- mltest.test(model, FloorPlan(test, train=True))
94
- end = time.clock()
95
- print('test Model time: %s Seconds' % (end - start))
96
-
97
-
98
- def LoadTestBoundary(request):
99
- start = time.clock()
100
- testName = request.GET.get('testName').split(".")[0]
101
- test_index = testNameList.index(testName)
102
- data = test_data[test_index]
103
- data_js = {}
104
- data_js["door"] = str(data.boundary[0][0]) + "," + str(data.boundary[0][1]) + "," + str(
105
- data.boundary[1][0]) + "," + str(data.boundary[1][1])
106
- ex = ""
107
- for i in range(len(data.boundary)):
108
- ex = ex + str(data.boundary[i][0]) + "," + str(data.boundary[i][1]) + " "
109
- data_js['exterior'] = ex
110
- end = time.clock()
111
- print('LoadTestBoundary time: %s Seconds' % (end - start))
112
- return HttpResponse(json.dumps(data_js), content_type="application/json")
113
-
114
-
115
- def get_filter_func(mask, acc, num):
116
- filters = [
117
- None if not mask else (
118
- np.equal if acc[i] else np.greater_equal
119
- )
120
- for i in range(len(mask))
121
- ]
122
-
123
- def filter_func(data):
124
- for i in range(len(filters)):
125
- if (filters[i] is not None) and (not filters[i](data[i], num[i])): return False
126
- return True
127
-
128
- return filter_func
129
-
130
-
131
- def filter_graph(graph_):
132
- filters = graph_
133
-
134
- def filter_graphfunc(data):
135
- sub = data - filters
136
- return ((sub >= 0).all())
137
-
138
- return filter_graphfunc
139
-
140
-
141
- def NumSearch(request):
142
- start = time.clock()
143
- data_new = json.loads(request.GET.get("userInfo"))
144
- testName = data_new[0].split(".")[0]
145
- test_index = testNameList.index(testName)
146
- topkList = []
147
- topkList.clear()
148
- data = test_data[test_index]
149
-
150
-
151
- multi_clusters=False
152
- test_data_topk = rt.retrieval(data, 1000,multi_clusters)
153
-
154
- if len(data_new) > 1:
155
- roomactarr = data_new[1]
156
- roomexaarr = data_new[2]
157
- roomnumarr = [int(x) for x in data_new[3]]
158
-
159
- test_num = train_data_rNum[test_data_topk]
160
- filter_func = get_filter_func(roomactarr, roomexaarr, roomnumarr)
161
- indices = np.where(list(map(filter_func, test_num)))
162
- indices = list(indices)
163
- if len(indices[0]) < 20:
164
- topk = len(indices[0])
165
- else:
166
- topk = 20
167
- topkList.clear()
168
- for i in range(topk):
169
- topkList.append(str(trainNameList[int(test_data_topk[indices[0][i]])]) + ".png")
170
- end = time.clock()
171
- print('NumberSearch time: %s Seconds' % (end - start))
172
- return HttpResponse(json.dumps(topkList), content_type="application/json")
173
-
174
-
175
- def FindTraindata(trainname):
176
- start = time.clock()
177
- train_index = trainNameList.index(trainname)
178
- data = train_data[train_index]
179
- data_js = {}
180
- data_js["hsname"] = trainname
181
-
182
- data_js["door"] = str(data.boundary[0][0]) + "," + str(data.boundary[0][1]) + "," + str(
183
- data.boundary[1][0]) + "," + str(data.boundary[1][1])
184
- print("testboundary", data_js["door"])
185
- ex = ""
186
- for i in range(len(data.boundary)):
187
- ex = ex + str(data.boundary[i][0]) + "," + str(data.boundary[i][1]) + " "
188
- data_js['exterior'] = ex
189
-
190
- data_js["hsedge"] = [[int(u), int(v)] for u, v in data.edge[:, [0, 1]]]
191
-
192
- hsbox = [[[float(x1), float(y1), float(x2), float(y2)], [mdul.room_label[cate][1]]] for
193
- x1, y1, x2, y2, cate in data.box[:]]
194
- external = np.asarray(data.boundary)
195
- xmin, xmax = np.min(external[:, 0]), np.max(external[:, 0])
196
- ymin, ymax = np.min(external[:, 1]), np.max(external[:, 1])
197
-
198
- area_ = (ymax - ymin) * (xmax - xmin)
199
-
200
- data_js["rmsize"] = [
201
- [[20 * math.sqrt((float(x2) - float(x1)) * (float(y2) - float(y1)) / float(area_))], [mdul.room_label[cate][1]]]
202
- for
203
- x1, y1, x2, y2, cate in data.box[:]]
204
-
205
-
206
- box_order = data.order
207
- data_js["hsbox"] = []
208
- for i in range(len(box_order)):
209
- data_js["hsbox"].append(hsbox[int(float(box_order[i])) - 1])
210
-
211
- data_js["rmpos"] = [[int(cate), str(mdul.room_label[cate][1]), float((x1 + x2) / 2), float((y1 + y2) / 2)] for
212
- x1, y1, x2, y2, cate in data.box[:]]
213
- end = time.clock()
214
- print('find train data time: %s Seconds' % (end - start))
215
- return data_js
216
-
217
-
218
- def LoadTrainHouse(request):
219
- trainname = request.GET.get("roomID").split(".")[0]
220
- data_js = FindTraindata(trainname)
221
- return HttpResponse(json.dumps(data_js), content_type="application/json")
222
-
223
-
224
- '''
225
- transfer the graph of the training data into the graph of the test data
226
- '''
227
-
228
-
229
- def TransGraph(request):
230
- start = time.clock()
231
- userInfo = request.GET.get("userInfo")
232
- testname = userInfo.split(',')[0]
233
- trainname = request.GET.get("roomID")
234
- mlresult = mltest.get_userinfo(testname, trainname)
235
-
236
- fp_end = mlresult
237
-
238
- sio.savemat("./static/" + userInfo.split(',')[0].split('.')[0] + ".mat", {"data": fp_end.data})
239
-
240
- data_js = {}
241
- # fp_end hsedge
242
- data_js["hsedge"] = (fp_end.get_triples(tensor=False)[:, [0, 2, 1]]).astype(np.float).tolist()
243
-
244
- # fp_rmsize
245
- external = np.asarray(fp_end.data.boundary)
246
- xmin, xmax = np.min(external[:, 0]), np.max(external[:, 0])
247
- ymin, ymax = np.min(external[:, 1]), np.max(external[:, 1])
248
- area_ = (ymax - ymin) * (xmax - xmin)
249
- data_js["rmsize"] = [
250
- [[20 * math.sqrt((float(x2) - float(x1)) * (float(y2) - float(y1)) / float(area_))], [mdul.room_label[cate][1]]]
251
- for
252
- x1, y1, x2, y2, cate in fp_end.data.box[:]]
253
- # fp_end rmpos
254
-
255
- rooms = fp_end.get_rooms(tensor=False)
256
-
257
-
258
- center = [[(x1 + x2) / 2, (y1 + y2) / 2] for x1, y1, x2, y2 in fp_end.data.box[:, :4]]
259
-
260
- # boxes_pred
261
- data_js["rmpos"] = []
262
- for k in range(len(center)):
263
- node = float(rooms[k]), mdul.room_label[int(rooms[k])][1], center[k][0], center[k][1], float(k)
264
- data_js["rmpos"].append(node)
265
-
266
- test_index = testNameList.index(testname.split(".")[0])
267
- data = test_data[test_index]
268
- ex = ""
269
- for i in range(len(data.boundary)):
270
- ex = ex + str(data.boundary[i][0]) + "," + str(data.boundary[i][1]) + " "
271
- data_js['exterior'] = ex
272
- data_js["door"] = str(data.boundary[0][0]) + "," + str(data.boundary[0][1]) + "," + str(
273
- data.boundary[1][0]) + "," + str(data.boundary[1][1])
274
- end = time.clock()
275
- print('TransGraph time: %s Seconds' % (end - start))
276
- return HttpResponse(json.dumps(data_js), content_type="application/json")
277
-
278
-
279
- def AdjustGraph(request):
280
- start = time.clock()
281
- # newNode index-typename-cx-cy
282
- # oldNode index-typename-cx-cy
283
- # newEdge u-v
284
- NewGraph = json.loads(request.GET.get("NewGraph"))
285
- testname = request.GET.get("userRoomID")
286
- trainname = request.GET.get("adptRoomID")
287
- s = time.clock()
288
- mlresult = mltest.get_userinfo_adjust(testname, trainname, NewGraph)
289
- e = time.clock()
290
- print('get_userinfo_adjust: %s Seconds' % (e - s))
291
- fp_end = mlresult[0]
292
- global boxes_pred
293
- boxes_pred = mlresult[1]
294
-
295
- data_js = {}
296
- data_js["hsedge"] = (fp_end.get_triples(tensor=False)[:, [0, 2, 1]]).astype(np.float).tolist()
297
-
298
- rooms = fp_end.get_rooms(tensor=False)
299
- center = [[(x1 + x2) / 2, (y1 + y2) / 2] for x1, y1, x2, y2 in fp_end.data.box[:, :4]]
300
-
301
- box_order = mlresult[2]
302
- '''
303
- handle the information of the room boxes
304
- boxes_pred: the prediction from net
305
- box_order: The order in which boxes are drawn
306
-
307
- '''
308
- room = []
309
- for o in range(len(box_order)):
310
- room.append(float((rooms[int(float(box_order[o][0])) - 1])))
311
- boxes_end = []
312
- for i in range(len(box_order)):
313
- tmp = []
314
- for j in range(4):
315
- tmp.append(float(boxes_pred[int(float(box_order[i][0])) - 1][j]))
316
- boxes_end.append(tmp)
317
-
318
- data_js['roomret'] = []
319
- for k in range(len(room)):
320
- data = boxes_end[k], [mdul.room_label[int(room[k])][1]], box_order[k][0] - 1
321
- data_js['roomret'].append(data)
322
-
323
- # change the box size
324
- global relbox
325
- relbox = data_js['roomret']
326
- global reledge
327
- reledge = data_js["hsedge"]
328
-
329
- test_index = testNameList.index(testname.split(".")[0])
330
- data = test_data[test_index]
331
- ex = ""
332
- for i in range(len(data.boundary)):
333
- ex = ex + str(data.boundary[i][0]) + "," + str(data.boundary[i][1]) + " "
334
- data_js['exterior'] = ex
335
- data_js["door"] = str(data.boundary[0][0]) + "," + str(data.boundary[0][1]) + "," + str(
336
- data.boundary[1][0]) + "," + str(data.boundary[1][1])
337
-
338
- external = np.asarray(data.boundary)
339
- xmin, xmax = np.min(external[:, 0]), np.max(external[:, 0])
340
- ymin, ymax = np.min(external[:, 1]), np.max(external[:, 1])
341
- area_ = (ymax - ymin) * (xmax - xmin)
342
- data_js['rmsize'] = []
343
- for i in range(len(data_js['roomret'])):
344
- rmsize = 20 * math.sqrt((float(data_js['roomret'][i][0][2]) - float(data_js['roomret'][i][0][0])) * (
345
- float(data_js['roomret'][i][0][3]) - float(data_js['roomret'][i][0][1])) / float(area_)), \
346
- data_js["roomret"][i][1][0]
347
- data_js["rmsize"].append(rmsize)
348
-
349
- data_js["rmpos"] = []
350
-
351
- newGraph = NewGraph[0]
352
- for i in range(len(data_js['roomret'])):
353
- for k in range(len(newGraph)):
354
- if (data_js['roomret'][i][1][0] == newGraph[k][1]):
355
- x_center = int((data_js['roomret'][i][0][0] + data_js['roomret'][i][0][2]) / 2)
356
- y_center = int((data_js['roomret'][i][0][1] + data_js['roomret'][i][0][3]) / 2)
357
- x_graph = newGraph[k][2]
358
- y_graph = newGraph[k][3]
359
- if ((int(x_graph - 30) < x_center < int(x_graph + 30))):
360
- node = float(rooms[k]), newGraph[k][1], x_center, y_center, float(
361
- newGraph[k][0])
362
- data_js["rmpos"].append(node)
363
- newGraph.pop(k)
364
- break
365
- if ((int(y_graph - 30) < y_center < int(y_graph + 30))):
366
- node = float(rooms[k]), newGraph[k][1], x_center, y_center, float(
367
- newGraph[k][0])
368
- data_js["rmpos"].append(node)
369
- newGraph.pop(k)
370
-
371
- break
372
-
373
- fp_end.data = add_dw_fp(fp_end.data)
374
- data_js["indoor"] = []
375
-
376
- boundary = data.boundary
377
-
378
- isNew = boundary[:, 3]
379
- frontDoor = boundary[[0, 1]]
380
- frontDoor = frontDoor[:, [0, 1]]
381
- frontsum = frontDoor.sum(axis=1).tolist()
382
- idx = frontsum.index(min(frontsum))
383
- wallThickness = 3
384
- if idx == 1:
385
- frontDoor = frontDoor[[1, 0], :]
386
- orient = boundary[0][2]
387
- if orient == 0 or orient == 2:
388
- frontDoor[0][0] = frontDoor[0][0] + wallThickness / 4
389
- frontDoor[1][0] = frontDoor[1][0] - wallThickness / 4
390
- if orient == 1 or orient == 3:
391
- frontDoor[0][1] = frontDoor[0][1] + wallThickness / 4
392
- frontDoor[1][1] = frontDoor[1][1] - wallThickness / 4
393
-
394
-
395
- data_js["windows"] = []
396
- for indx, x, y, w, h, r in fp_end.data.windows:
397
- if w != 0:
398
- tmp = [x + 2, y - 2, w - 2, 4]
399
- data_js["windows"].append(tmp)
400
- if h != 0:
401
- tmp = [x - 2, y, 4, h]
402
- data_js["windows"].append(tmp)
403
- data_js["windowsline"] = []
404
- for indx, x, y, w, h, r in fp_end.data.windows:
405
- if w != 0:
406
- tmp = [x + 2, y, w + x, y]
407
- data_js["windowsline"].append(tmp)
408
- if h != 0:
409
- tmp = [x, y, x, h + y]
410
- data_js["windowsline"].append(tmp)
411
-
412
- sio.savemat("./static/" + testname.split(',')[0].split('.')[0] + ".mat", {"data": fp_end.data})
413
-
414
- end = time.clock()
415
- print('AdjustGraph time: %s Seconds' % (end - start))
416
- return HttpResponse(json.dumps(data_js), content_type="application/json")
417
-
418
-
419
- def RelBox(request):
420
- id = request.GET.get("selectRect")
421
- print(id)
422
- global relbox
423
- global reledge
424
- rdirgroup=get_dir(id,relbox,reledge)
425
- return HttpResponse(json.dumps(rdirgroup), content_type="application/json")
426
-
427
- def get_dir(id,relbox,reledge):
428
- rel = []
429
- selectindex = int(id.split("_")[1])
430
- select = np.zeros(4).astype(int)
431
- for i in range(len(relbox)):
432
- a = math.ceil(relbox[i][0][0]), math.ceil(relbox[i][0][1]), math.ceil(relbox[i][0][2]), math.ceil(
433
- relbox[i][0][3]), int(relbox[i][2])
434
- rel.append(a)
435
- if (selectindex == int(relbox[i][2])):
436
- # select:x1,x0,y0,y1.relbox:x0,y0,x1,y1
437
- select[0] = math.ceil(relbox[i][0][2])
438
- select[1] = math.ceil(relbox[i][0][0])
439
- select[2] = math.ceil(relbox[i][0][1])
440
- select[3] = math.ceil(relbox[i][0][3])
441
- rel = np.array(rel)
442
- df = pd.DataFrame({'x0': rel[:, 0], 'y0': rel[:, 1], 'x1': rel[:, 2], 'y1': rel[:, 3], 'rindex': rel[:, 4]})
443
- group_label = [(0, 'x1', "right"),
444
- (1, 'x0', "left"),
445
- (2, 'y0', "top"),
446
- (3, 'y1', "down")]
447
- dfgroup = []
448
- for i in range(len(group_label)):
449
- dfgroup.append(df.groupby(group_label[i][1], as_index=True).get_group(name=select[i]))
450
- rdirgroup = []
451
- for i in range(len(dfgroup)):
452
- dir = dfgroup[i]
453
- rdir = []
454
- for k in range(len(dir)):
455
- idx = (dir.loc[dir['rindex'] == (dir.iloc[[k]].values)[0][4]].index.values)[0]
456
- rdir.append(relbox[idx][1][0].__str__() + "_" + (dir.iloc[[k]].values)[0][4].__str__())
457
- rdirgroup.append(rdir)
458
- reledge = np.array(reledge)
459
- data1 = reledge[np.where((reledge[:, [0]] == selectindex))[0]]
460
- data2 = reledge[np.where((reledge[:, [1]] == selectindex))[0]]
461
- reledge1 = np.vstack((data1, data2))
462
- return rdirgroup
463
- def Save_Editbox(request):
464
- global indxlist,boxes_pred
465
- NewGraph = json.loads(request.GET.get("NewGraph"))
466
- NewLay = json.loads(request.GET.get("NewLay"))
467
- userRoomID = request.GET.get("userRoomID")
468
- adptRoomID = request.GET.get("adptRoomID")
469
-
470
- NewLay=np.array(NewLay)
471
- NewLay=NewLay[np.argsort(NewLay[:, 1])][:,2:]
472
- NewLay=NewLay.astype(float).tolist()
473
-
474
- test_index = testNameList.index(userRoomID.split(".")[0])
475
- test_ = test_data[test_index]
476
-
477
- Boundary = test_.boundary
478
- boundary=[[float(x),float(y),float(z),float(k)] for x,y,z,k in list(Boundary)]
479
- test_fp =FloorPlan(test_)
480
-
481
- train_index = trainNameList.index(adptRoomID.split(".")[0])
482
- train_ =train_data[train_index]
483
- train_fp =FloorPlan(train_,train=True)
484
- fp_end = test_fp.adapt_graph(train_fp)
485
- fp_end.adjust_graph()
486
- newNode = NewGraph[0]
487
- newEdge = NewGraph[1]
488
- oldNode = NewGraph[2]
489
- temp = []
490
- for newindx, newrmname, newx, newy,scalesize in newNode:
491
- for type, oldrmname, oldx, oldy, oldindx in oldNode:
492
- if (int(newindx) == oldindx):
493
- tmp=int(newindx), (newx - oldx), ( newy- oldy),float(scalesize)
494
- temp.append(tmp)
495
- newbox=[]
496
- if mltest.adjust==True:
497
- oldbox = []
498
- for i in range(len(boxes_pred)):
499
- indxtmp=[boxes_pred[i][0],boxes_pred[i][1],boxes_pred[i][2],boxes_pred[i][3],boxes_pred[i][0]]
500
- oldbox.append(indxtmp)
501
- if mltest.adjust==False:
502
- indxlist=[]
503
- oldbox=fp_end.data.box.tolist()
504
- for i in range(len(oldbox)):
505
- indxlist.append([oldbox[i][4]])
506
- indxlist=np.array(indxlist)
507
- adjust=True
508
- oldbox=fp_end.data.box.tolist()
509
- X=0
510
- Y=0
511
- for i in range(len(oldbox)):
512
- X= X+(oldbox[i][2]-oldbox[i][0])
513
- Y= Y+(oldbox[i][3]-oldbox[i][1])
514
- x_ave=(X/len(oldbox))/2
515
- y_ave=(Y/len(oldbox))/2
516
-
517
- index_mapping = {}
518
- # The room that already exists
519
- # Move: Just by the distance
520
- for newindx, tempx, tempy,scalesize in temp:
521
- index_mapping[newindx] = len(newbox)
522
- tmpbox=[]
523
- scalesize = int(scalesize)
524
- if scalesize<1:
525
- scale = math.sqrt(scalesize)
526
- scalex = (oldbox[newindx][2] - oldbox[newindx][0]) * (1 - scale) / 2
527
- scaley = (oldbox[newindx][3] - oldbox[newindx][1]) * (1 - scale) / 2
528
- tmpbox = [(oldbox[newindx][0] + tempx) + scalex, (oldbox[newindx][1] + tempy)+scaley,
529
- (oldbox[newindx][2] + tempx) - scalex, (oldbox[newindx][3] + tempy) - scaley, oldbox[newindx][4]]
530
- if scalesize == 1:
531
- tmpbox = [(oldbox[newindx][0] + tempx) , (oldbox[newindx][1] + tempy) ,(oldbox[newindx][2] + tempx), (oldbox[newindx][3] + tempy), oldbox[newindx][4]]
532
-
533
- if scalesize>1:
534
- scale=math.sqrt(scalesize)
535
- scalex = (oldbox[newindx][2] - oldbox[newindx][0]) * ( scale-1) / 2
536
- scaley = (oldbox[newindx][3] - oldbox[newindx][1]) * (scale-1) / 2
537
- tmpbox = [(oldbox[newindx][0] + tempx) - scalex, (oldbox[newindx][1] + tempy) - scaley,
538
- (oldbox[newindx][2] + tempx) + scalex, (oldbox[newindx][3] + tempy) + scaley, oldbox[newindx][4]]
539
-
540
- newbox.append(tmpbox)
541
-
542
- # The room just added
543
- # Move: The room node with the average size of the existing room
544
- for newindx, newrmname, newx, newy,scalesize in newNode:
545
- if int(newindx)>(len(oldbox)-1):
546
- scalesize=int(scalesize)
547
- index_mapping[int(newindx)] = (len(newbox))
548
- tmpbox=[]
549
- if scalesize < 1:
550
- scale = math.sqrt(scalesize)
551
- scalex = x_ave * (1 - scale) / 2
552
- scaley = y_ave* (1 - scale) / 2
553
- tmpbox = [(newx-x_ave) +scalex,(newy-y_ave) +scaley,(newx+x_ave)-scalex,(newy+y_ave)-scaley,vocab['object_name_to_idx'][newrmname]]
554
-
555
- if scalesize == 1:
556
- tmpbox = [(newx - x_ave), (newy - y_ave), (newx + x_ave), (newy + y_ave),vocab['object_name_to_idx'][newrmname]]
557
- if scalesize > 1:
558
- scale = math.sqrt(scalesize)
559
- scalex = x_ave * (scale - 1) / 2
560
- scaley = y_ave * (scale - 1) / 2
561
- tmpbox = [(newx-x_ave) - scalex, (newy-y_ave) - scaley,(newx+x_ave) + scalex, (newy+y_ave) + scaley,vocab['object_name_to_idx'][newrmname]]
562
- # tmpboxin = [(newx-x_ave) ,(newy-y_ave) ,(newx+x_ave) ,(newy+y_ave) ,vocab['object_name_to_idx'][newrmname]]
563
- # print(tmpboxin)
564
- # print(tmpbox)
565
- # print(scalesize)
566
- newbox.append(tmpbox)
567
-
568
- fp_end.data.box=np.array(newbox)
569
-
570
- adjust_Edge=[]
571
- for u, v in newEdge:
572
- tmp=[index_mapping[int(u)],index_mapping[int(v)], 0]
573
- adjust_Edge.append(tmp)
574
- fp_end.data.edge=np.array(adjust_Edge)
575
- rType = fp_end.get_rooms(tensor=False)
576
-
577
- rEdge = fp_end.get_triples(tensor=False)[:, [0, 2, 1]]
578
- Edge = [[float(u), float(v), float(type2)] for u, v, type2 in rEdge]
579
- Box=NewLay
580
- boundary_mat = matlab.double(boundary)
581
- rType_mat = matlab.double(rType.tolist())
582
- Edge_mat = matlab.double(Edge)
583
- Box_mat=matlab.double(Box)
584
- fp_end.data.boundary =np.array(boundary)
585
- fp_end.data.rType =np.array(rType).astype(int)
586
- fp_end.data.refineBox=np.array(Box)
587
- fp_end.data.rEdge=np.array(Edge)
588
-
589
- box_refine = engview.align_fp(boundary_mat, Box_mat, rType_mat,Edge_mat ,18,False, nargout=3)
590
- box_out=box_refine[0]
591
- box_order=box_refine[1]
592
- rBoundary=box_refine[2]
593
- fp_end.data.newBox = np.array(box_out)
594
- fp_end.data.order = np.array(box_order)
595
- fp_end.data.rBoundary = [np.array(rb) for rb in rBoundary]
596
- fp_end.data = add_dw_fp(fp_end.data)
597
- sio.savemat("./static/" + userRoomID + ".mat", {"data": fp_end.data})
598
- flag=1
599
- return HttpResponse(json.dumps(flag), content_type="application/json")
600
-
601
-
602
- def TransGraph_net(request):
603
- userInfo = request.GET.get("userInfo")
604
- testname = userInfo.split(',')[0]
605
- trainname = request.GET.get("roomID")
606
- mlresult = mltest.get_userinfo_net(testname, trainname)
607
-
608
- fp_end = mlresult[0]
609
- boxes_pred = mlresult[1]
610
-
611
- data_js = {}
612
- # fp_end hsedge
613
- data_js["hsedge"] = (fp_end.get_triples(tensor=False)[:, [0, 2, 1]]).astype(np.float).tolist()
614
-
615
- # fp_end rmpos
616
- rooms = fp_end.get_rooms(tensor=False)
617
- room = rooms
618
- center = [[(x1 + x2) / 2, (y1 + y2) / 2] for x1, y1, x2, y2 in fp_end.data.box[:, :4]]
619
-
620
-
621
-
622
- # boxes_pred
623
- data_js["rmpos"] = []
624
- for k in range(len(center)):
625
- node = float(room[k]), mdul.room_label[int(room[k])][1], center[k][0], center[k][1]
626
- data_js["rmpos"].append(node)
627
- boxes_end = boxes_pred.tolist()
628
- data_js['roomret'] = []
629
- for k in range(len(room)):
630
- data = boxes_end[k], [mdul.room_label[int(room[k])][1]]
631
- data_js['roomret'].append(data)
632
-
633
- test_index = testNameList.index(testname.split(".")[0])
634
- data = test_data[test_index]
635
- ex = ""
636
- for i in range(len(data.boundary)):
637
- ex = ex + str(data.boundary[i][0]) + "," + str(data.boundary[i][1]) + " "
638
- data_js['exterior'] = ex
639
- x0, x1 = np.min(data.boundary[:, 0]), np.max(data.boundary[:, 0])
640
- y0, y1 = np.min(data.boundary[:, 1]), np.max(data.boundary[:, 1])
641
- data_js['bbxarea'] = float((x1 - x0) * (y1 - y0))
642
- return HttpResponse(json.dumps(data_js), content_type="application/json")
643
-
644
-
645
- def GraphSearch(request):
646
- s=time.clock()
647
- # Graph
648
- Searchtype = ["BedRoom", "Bathroom", "Kitchen", "Balcony", "Storage"]
649
- BedRoomlist = ["MasterRoom", "SecondRoom", "GuestRoom", "ChildRoom", "StudyRoom"]
650
- NewGraph = json.loads(request.GET.get("NewGraph"))
651
-
652
- testname = request.GET.get("userRoomID")
653
- newNode = NewGraph[0]
654
- newEdge = NewGraph[1]
655
- r_Num = np.zeros((1, 14)).tolist()
656
- r_Mask = np.zeros((1, 14)).tolist()
657
- r_Acc = np.zeros((1, 14)).tolist()
658
- r_Num[0][0] = 1
659
- r_Mask[0][0] = 1
660
- r_Acc[0][0] = 1
661
-
662
- for indx, rmname, x, y, scalesize in newNode:
663
- r_Num[0][mdul.vocab['object_name_to_idx'][rmname]] = r_Num[0][mdul.vocab['object_name_to_idx'][rmname]] + 1
664
- r_Mask[0][mdul.vocab['object_name_to_idx'][rmname]] = 1
665
- if rmname in BedRoomlist:
666
- r_Num[0][13] = r_Num[0][13] + 1
667
- r_Mask[0][13] = 1
668
-
669
- test_index = testNameList.index(testname.split(".")[0])
670
- topkList = []
671
- topkList.clear()
672
- data = test_data[test_index]
673
-
674
- Numrooms = json.loads(request.GET.get("Numrooms"))
675
-
676
-
677
- roomactarr = Numrooms[0]
678
- roomexaarr = Numrooms[1]
679
- roomnumarr = [int(x) for x in Numrooms[2]]
680
- test_data_topk=np.arange(0,74995)
681
-
682
- if np.sum(roomactarr) != 1 or np.sum(roomexaarr) != 1 or np.sum(roomnumarr) != 1:
683
- test_num = train_data_rNum[test_data_topk]
684
- # Number filter
685
-
686
- filter_func = get_filter_func(roomactarr, roomexaarr, roomnumarr)
687
- indices = np.where(list(map(filter_func, test_num)))
688
- # print("np.where(list(map(fil", test_num)
689
- indices = list(indices)
690
- test_data_topk = test_data_topk[indices[0]]
691
-
692
- test_num = train_data_eNum[test_data_topk]
693
- # Graph filter
694
-
695
- edgematrix = np.zeros((5, 5))
696
- for indx1, indx2 in newEdge:
697
- tmp1 = ""
698
- tmp2 = ""
699
- for indx, rmname, x, y, scalesize in newNode:
700
- if indx1 == indx:
701
- if rmname in BedRoomlist:
702
- tmp1 = "BedRoom"
703
- else:
704
- tmp1 = rmname
705
- for indx, rmname, x, y, scalesize in newNode:
706
- if indx2 == indx:
707
- if rmname in BedRoomlist:
708
- tmp2 = "BedRoom"
709
- else:
710
- tmp2 = rmname
711
- if tmp1 != "" and tmp2 != "":
712
- edgematrix[Searchtype.index(tmp1)][Searchtype.index(tmp2)] = edgematrix[Searchtype.index(tmp1)][
713
- Searchtype.index(tmp2)] + 1
714
- edgematrix[Searchtype.index(tmp2)][Searchtype.index(tmp1)] = edgematrix[Searchtype.index(tmp2)][
715
- Searchtype.index(tmp1)] + 1
716
- edge = edgematrix.reshape((1, 25))
717
- filter_graphfunc = filter_graph(edge)
718
- # rNum_list
719
- eNumData = []
720
-
721
- indices = np.where(list(map(filter_graphfunc, test_num)))
722
-
723
- indices = list(indices)
724
- tf_trainsub=tf_train[test_data_topk[indices[0]]]
725
- re_data = train_data[test_data_topk[indices[0]]]
726
- test_data_tftopk=retrieve_bf(tf_trainsub, data, k=20)
727
- re_data=re_data[test_data_tftopk]
728
- if len(re_data) < 20:
729
- topk = len(re_data)
730
- else:
731
- topk = 20
732
- topkList = []
733
- for i in range(topk):
734
- topkList.append(str(re_data[i].name) + ".png")
735
-
736
- e=time.clock()
737
- print('Graph Search time: %s Seconds' % (e - s))
738
-
739
- print("topkList", topkList)
740
- return HttpResponse(json.dumps(topkList), content_type="application/json")
741
-
742
-
743
- def retrieve_bf(tf_trainsub, datum, k=20):
744
- # compute tf for the data boundary
745
- x, y = rt.compute_tf(datum.boundary)
746
- y_sampled = rt.sample_tf(x, y, 1000)
747
- dist = np.linalg.norm(y_sampled - tf_trainsub, axis=1)
748
- if k > np.log2(len(tf_trainsub)):
749
- index = np.argsort(dist)[:k]
750
- else:
751
- index = np.argpartition(dist, k)[:k]
752
- index = index[np.argsort(dist[index])]
753
- return index
754
-
755
-
756
- if __name__ == "__main__":
757
- pass
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/Img/data.mat.png DELETED
Binary file (15.1 kB)
 
Interface/Img/data_test_converted.png DELETED
Binary file (16.8 kB)
 
Interface/Img/data_train_converted.png DELETED
Binary file (21.9 kB)
 
Interface/Img/interface.jpg DELETED
Binary file (310 kB)
 
Interface/Img/paper.png DELETED
Binary file (32.2 kB)
 
Interface/align_fp/align_adjacent_room3.m DELETED
@@ -1,121 +0,0 @@
1
- function [newBox, constraint] = align_adjacent_room3(box, tempBox, updated, type, threshold)
2
- % position of box1 relative to box2
3
- % 0 left-above
4
- % 1 left-below
5
- % 2 left-of
6
- % 3 above
7
- % 4 inside
8
- % 5 surrounding
9
- % 6 below
10
- % 7 right-of
11
- % 8 right-above
12
- % 9 right-below
13
-
14
-
15
- newBox = box;
16
- constraint = zeros(4, 2);
17
- idx = 1;
18
-
19
- if type == 0
20
- alignV(true);
21
- alignH(true);
22
- elseif type == 1
23
- alignV(true);
24
- alignH(false);
25
- elseif type == 2
26
- align([2,1], [1,3], threshold);
27
- align([2,2], [1,2], threshold/2);
28
- align([2,4], [1,4], threshold/2);
29
- elseif type == 3
30
- align([2,2], [1,4], threshold);
31
- align([2,1], [1,1], threshold/2);
32
- align([2,3], [1,3], threshold/2);
33
- elseif type == 4
34
- align([2,1], [1,1], true);
35
- align([2,2], [1,2], true);
36
- align([2,3], [1,3], true);
37
- align([2,4], [1,4], true);
38
- elseif type == 5
39
- align([1,1], [2,1], true);
40
- align([1,2], [2,2], true);
41
- align([1,3], [2,3], true);
42
- align([1,4], [2,4], true);
43
- elseif type == 6
44
- align([2,4], [1,2], threshold);
45
- align([2,1], [1,1], threshold/2);
46
- align([2,3], [1,3], threshold/2);
47
- elseif type == 7
48
- align([2,3], [1,1], threshold);
49
- align([2,2], [1,2], threshold/2);
50
- align([2,4], [1,4], threshold/2);
51
- elseif type == 8
52
- alignV(false);
53
- alignH(true);
54
- elseif type == 9
55
- alignV(false);
56
- alignH(false);
57
- end
58
-
59
- constraint = constraint(1:idx-1, :);
60
-
61
- function alignV(isLeft)
62
- if isLeft
63
- idx1 = 1;
64
- idx2 = 3;
65
- else
66
- idx1 = 3;
67
- idx2 = 1;
68
- end
69
-
70
- if abs(tempBox(2,idx1) - tempBox(1,idx2)) <= abs(tempBox(2,idx2) - tempBox(1,idx2))
71
- align([2,idx1], [1,idx2], threshold/2)
72
- else
73
- align([2,idx2], [1,idx2], threshold/2)
74
- end
75
- end
76
-
77
- function alignH(isAbove)
78
- if isAbove
79
- idx1 = 2;
80
- idx2 = 4;
81
- else
82
- idx1 = 4;
83
- idx2 = 2;
84
- end
85
-
86
- if abs(tempBox(2,idx1) - tempBox(1,idx2)) <= abs(tempBox(2,idx2) - tempBox(1,idx2))
87
- align([2,idx1], [1,idx2], threshold/2)
88
- else
89
- align([2,idx2], [1,idx2], threshold/2)
90
- end
91
- end
92
-
93
- function align(idx1, idx2, threshold, attach)
94
- if nargin < 4
95
- attach = false;
96
- end
97
- if abs(tempBox(idx1(1),idx1(2))- tempBox(idx2(1), idx2(2))) <= threshold
98
- if updated(idx1(1), idx1(2)) && ~updated(idx2(1), idx2(2))
99
- newBox(idx2(1), idx2(2)) = newBox(idx1(1),idx1(2));
100
- elseif updated(idx2(1), idx2(2)) && ~updated(idx1(1), idx1(2))
101
- newBox(idx1(1), idx1(2)) = newBox(idx2(1),idx2(2));
102
- elseif ~updated(idx1(1), idx1(2)) && ~updated(idx2(1), idx2(2))
103
- if attach
104
- newBox(idx2(1), idx2(2)) = newBox(idx1(1),idx1(2));
105
- else
106
- y = (newBox(idx1(1),idx1(2)) + newBox(idx2(1), idx2(2)))/2;
107
- newBox(idx1(1),idx1(2)) = y;
108
- newBox(idx2(1), idx2(2)) = y;
109
- end
110
- end
111
-
112
- if idx1(1) == 1
113
- constraint(idx, :) = [idx1(2) idx2(2)];
114
- else
115
- constraint(idx, :) = [idx2(2) idx1(2)];
116
- end
117
- idx = idx + 1;
118
- end
119
- end
120
-
121
- end
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/align_fp/align_fp.m DELETED
@@ -1,108 +0,0 @@
1
- function [newBox, order, rBoundary] = align_fp(boundary, rBox, rType, rEdge, fp, threshold, drawResult)
2
- % align the neighboring rooms first and then align with the boundary
3
-
4
- if nargin < 7
5
- drawResult =false;
6
- end
7
-
8
- % pre-processing:
9
- % move the edge relation w.r.t. living room to the end
10
- livingIdx = find(rType==0);
11
- idx = rEdge(:,1) == livingIdx-1 | rEdge(:,2) == livingIdx-1;
12
- % a = rEdge(~idx, :);
13
- % b = rEdge(idx, :);
14
- % rEdge = [a; b];
15
- rEdge = rEdge(~idx, :);
16
- entranceBox = get_entrance_space(boundary(1:2, 1:2), boundary(1,3), threshold);
17
-
18
- if drawResult
19
- clf
20
- subplot(2,2,1)
21
- plot_fp(rBox, boundary, rType, entranceBox);
22
- title('original');
23
- end
24
-
25
- %% option #1: use greedy method: align with boundary first and then neighbor
26
- % 1. align with boundary after the neighbors have been aligned
27
- [~, newBox, updated] = align_with_boundary(rBox, boundary, threshold, rType);
28
-
29
- if drawResult
30
- subplot(2,2,2)
31
- plot_fp(newBox, boundary, rType, entranceBox);
32
- title('Align with boundary');
33
- end
34
-
35
-
36
- % 2. for each adjacent pair of room,
37
- [~, newBox, ~] = align_neighbor(newBox, rEdge, updated, threshold+6);
38
- if drawResult
39
- subplot(2,2,3)
40
- plot_fp(newBox, boundary, rType, entranceBox);
41
- title('Align with neighbors');
42
- end
43
-
44
- % 3. regularize fp, include crop using boundary, gap filling
45
- [newBox, order] = regularize_fp(newBox, boundary, rType);
46
-
47
- % 4. generate the room polygons
48
- [newBox, rBoundary] = get_room_boundary(newBox, boundary, order);
49
-
50
- if drawResult
51
- subplot(2,2,4)
52
- plot_fp(newBox(order,:), boundary, rType(order), entranceBox);
53
- title('Regularize fp');
54
- end
55
-
56
- % %% option #2: use optimization to align neighbors, and then align the boundary
57
- % % 1. get the constraint from the adjacent rooms, and optimize
58
- % %[constraint1, ~, ~] = align_with_boundary(rBox, boundary, threshold, rNode);
59
- % [constraint2, ~, ~] = align_neighbor(rBox, rEdge, [], threshold+2);
60
- % newBox = optimize_fp(rBox, [], constraint2);
61
- % if drawResult
62
- % subplot(3,4,6)
63
- % plot_fp(newBox, boundary, rNode, entranceBox);
64
- % title('Optimize the neighboring');
65
- % end
66
- %
67
- % % 2. align with boundary after the neighbors have been aligned
68
- % [constraint1, newBox2, ~] = align_with_boundary(newBox, boundary, threshold, rNode);
69
- % if drawResult
70
- % subplot(3,4,7)
71
- % plot_fp(newBox2, boundary, rNode, entranceBox);
72
- % title('Align with boundary w/o optimization');
73
- % end
74
- %
75
- % % 3. regularize fp, include crop using boundary, gap filling
76
- % [newBox2, order] = regularize_fp(newBox2, boundary, rNode);
77
- % if drawResult
78
- % subplot(3,4,8)
79
- % plot_fp(newBox2(order,:), boundary, rNode(order,:), entranceBox);
80
- % title('Regularize fp');
81
- % end
82
- %
83
- %
84
- %
85
- % newBox = optimize_fp(newBox, constraint1, constraint2);
86
- % if drawResult
87
- % subplot(3,4,11)
88
- % plot_fp(newBox, boundary, rNode, entranceBox);
89
- % title('Align with boundary with optimization');
90
- % end
91
- %
92
- % % 3. regularize fp, include crop using boundary, gap filling
93
- % [newBox, order] = regularize_fp(newBox, boundary, rNode);
94
- % if drawResult
95
- % subplot(3,4,12)
96
- % plot_fp(newBox(order,:), boundary, rNode(order,:), entranceBox);
97
- % title('Regularize fp');
98
- % if ~isempty(figName)
99
- % saveas(gcf, figName);
100
- % end
101
- % end
102
- %
103
-
104
-
105
-
106
- %%
107
- end
108
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/align_fp/align_neighbor.m DELETED
@@ -1,53 +0,0 @@
1
- function [constraint, box, updated] = align_neighbor(box, rEdge, updated, threshold)
2
-
3
- if isempty(updated)
4
- updated = false(size(box));
5
- end
6
-
7
- tempBox = box;
8
- constraint = zeros(size(rEdge, 1)*3, 2);
9
- iBegin = 1;
10
- checked = false(size(rEdge, 1), 1);
11
- updatedCount = get_updated_count(updated, rEdge);
12
- for i = 1:size(rEdge, 1)
13
- I = find(~checked);
14
- [~, t] = maxk(updatedCount(I), 1);
15
- checked(I(t)) = true;
16
- idx = rEdge(I(t),1:2)+1;
17
- [b, c] = align_adjacent_room3(box(idx, :), tempBox(idx, :), updated(idx,:), rEdge(I(t),3), threshold);
18
- for j = 1:length(idx)
19
-
20
- updated(idx(j), c(:,j)) = true;
21
-
22
- c(:, j) = (c(:,j)-1)*size(box,1) + double(idx(j));
23
-
24
- if b(j, 1) == b(j, 3)
25
- b(j, [1 3]) = box(idx(j), [1 3]);
26
- updated(idx(j), c(:,j)) = false;
27
- end
28
- if b(j, 2) == b(j, 4)
29
- b(j, [2 4]) = box(idx(j), [2 4]);
30
- updated(idx(j), c(:,j)) = false;
31
- end
32
-
33
- end
34
- box(idx, :) = b;
35
-
36
-
37
- cNum = size(c, 1);
38
-
39
- constraint(iBegin:iBegin+cNum-1, :) = c;
40
- iBegin = iBegin+cNum;
41
-
42
- updatedCount = get_updated_count(updated, rEdge);
43
- end
44
- constraint = constraint(1:iBegin-1, :);
45
-
46
- function updatedCount = get_updated_count(updated, rEdge)
47
- updatedCount = zeros(size(rEdge, 1), 1);
48
- for k = 1:size(rEdge, 1)
49
- index = rEdge(k,1:2)+1;
50
- updatedCount(k) = sum(sum(updated(index,:)));
51
- end
52
- end
53
- end
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/align_fp/align_with_boundary.m DELETED
@@ -1,29 +0,0 @@
1
- function [constraint, box, updated] = align_with_boundary(box, boundary, threshold, rType)
2
- tempBox = box;
3
- updated = false(size(box));
4
- closedSeg = zeros(size(box));
5
- distSeg = zeros(size(box));
6
- for i = 1:length(box)
7
- [closedSeg(i,:), distSeg(i,:)] = find_close_seg(box(i,:), boundary);
8
- end
9
-
10
-
11
- box(distSeg <= threshold) = closedSeg(distSeg <= threshold);
12
- updated(distSeg <= threshold) = true;
13
- idx = find(distSeg <= threshold);
14
- constraint = [idx closedSeg(idx)];
15
-
16
-
17
- % check if any room box blocks the door
18
- entranceBox = get_entrance_space(boundary(1:2, 1:2), boundary(1,3), threshold);
19
- entrancePoly = polyshape(entranceBox([1 1 3 3]), entranceBox([2 4 4 2]));
20
- for i = 1:length(box)
21
- if rType(i) ~= 10 && rType(i) ~= 0
22
- roomPoly = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2]));
23
- if overlaps(entrancePoly, roomPoly)
24
- box(i,:) = shrink_box(roomPoly, entrancePoly, boundary(1,3));
25
- updated(i, box(i,:)==tempBox(i,:)) = false;
26
- updated(i, box(i,:)~=tempBox(i,:)) = true;
27
- end
28
- end
29
- end
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/align_fp/find_close_seg.m DELETED
@@ -1,74 +0,0 @@
1
- function [closedSeg, distSeg, idx] = find_close_seg(box, boundary)
2
-
3
- % need to carefully select the closed wall seg for each box
4
- % cannot introduce a hole inside the boundary
5
-
6
- isNew = boundary(:,4);
7
- boundary = double(boundary(~isNew, :));
8
-
9
- % get the ordered horizontal and vertical segments on the boundary
10
- bSeg = [boundary(:, 1:2), boundary([2:end 1], 1:2), boundary(:,3)];
11
- vSeg = bSeg(mod(boundary(:,3), 2)==1, :);
12
- vSeg(vSeg(:,5)==3, [2 4]) = vSeg(vSeg(:,5)==3, [4 2]);
13
- [~, I] = sort(vSeg(:,1));
14
- vSeg = vSeg(I,:);
15
-
16
- hSeg = bSeg(mod(boundary(:,3), 2)==0, :);
17
- hSeg(hSeg(:,5)==2, [1 3]) = hSeg(hSeg(:,5)==2, [3 1]);
18
- [~, I] = sort(hSeg(:,2));
19
- hSeg = hSeg(I,:);
20
-
21
- closedSeg = ones(1,4)*256;
22
- distSeg = ones(1,4)*256;
23
- idx = zeros(1, 4);
24
-
25
- % check vertial seg
26
- for i = 1:size(vSeg,1)
27
- seg = vSeg(i, :);
28
- vdist = 0;
29
- if seg(4) <= box(2)
30
- vdist = box(2) - seg(4);
31
- elseif seg(2) >= box(4)
32
- vdist = seg(2) - box(4);
33
- end
34
-
35
- hdist = box([1 3]) - seg(1);
36
- dist1 = norm(double([hdist(1), vdist]));
37
- dist3 = norm(double([hdist(2), vdist]));
38
-
39
- if dist1 < distSeg(1) && dist1 <= dist3 && hdist(1) > 0
40
- distSeg(1) = dist1;
41
- idx(1) = i;
42
- closedSeg(1) = seg(1);
43
- elseif dist3 < distSeg(3) && hdist(2) < 0
44
- distSeg(3) = dist3;
45
- idx(3) = i;
46
- closedSeg(3) = seg(3);
47
- end
48
- end
49
-
50
- % check horizontal seg
51
- for i = 1:size(hSeg,1)
52
-
53
- seg = hSeg(i, :);
54
- hdist = 0;
55
- if seg(3) <= box(1)
56
- hdist = box(1) - seg(3);
57
- elseif seg(1) >= box(3)
58
- hdist = seg(1) - box(3);
59
- end
60
-
61
- vdist = box([2 4]) - seg(2);
62
- dist2 = norm(double([vdist(1), hdist]));
63
- dist4 = norm(double([vdist(2), hdist]));
64
-
65
- if dist2 <= dist4 && dist2 < distSeg(2) && vdist(1) > 0
66
- distSeg(2) = dist2;
67
- idx(2) = i;
68
- closedSeg(2) = seg(2);
69
- elseif dist4 < distSeg(4) && vdist(2) < 0
70
- distSeg(4) = dist4;
71
- idx(4) = i;
72
- closedSeg(4) = seg(4);
73
- end
74
- end
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/align_fp/find_room_order.m DELETED
@@ -1,29 +0,0 @@
1
- function order = find_room_order(M)
2
-
3
- n = size(M,1);
4
- G = digraph(M);
5
- name = cell(n,1);
6
- for i = 1:n
7
- name{i} = num2str(i);
8
- end
9
- G.Nodes.Name = name;
10
-
11
- order = zeros(n, 1);
12
- i = 1;
13
- while i <= n
14
- D = indegree(G);
15
- c = find(D==0);
16
- if isempty(c)
17
- idx = find(D==1);
18
- c = setdiff(idx, order);
19
- order(i) = str2double(G.Nodes.Name{c(1)});
20
- G = rmnode(G, c(1));
21
- i = i+1;
22
- else
23
- for j = 1:length(c)
24
- order(i+j-1) = str2double(G.Nodes.Name{c(j)});
25
- end
26
- G = rmnode(G, c);
27
- i = i + length(c);
28
- end
29
- end
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/align_fp/get_entrance_space.m DELETED
@@ -1,14 +0,0 @@
1
-
2
- function doorBox = get_entrance_space(doorSeg, doorOri, threshold)
3
-
4
- doorBox = [doorSeg(1,:) doorSeg(2,:)];
5
- if doorOri == 0
6
- doorBox(4) = doorBox(4) + threshold;
7
- elseif doorOri == 1
8
- doorBox(1) = doorBox(1) - threshold;
9
- elseif doorOri == 2
10
- doorBox(2) = doorBox(2) - threshold;
11
- elseif doorOri == 3
12
- doorBox(3) = doorBox(3) + threshold;
13
- end
14
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/align_fp/get_room_boundary.m DELETED
@@ -1,25 +0,0 @@
1
- function [newBox, rBoundary] = get_room_boundary(box, boundary, order)
2
-
3
- isNew = boundary(:,4);
4
- polyBoundary = polyshape(boundary(~isNew,1), boundary(~isNew,2));
5
-
6
- poly = cell(size(box,1), 1);
7
- for i = 1:size(box,1)
8
- poly{i} = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2]));
9
- end
10
-
11
- newBox = box;
12
- rBoundary = cell(size(box,1), 1);
13
- for i = 1:size(box,1)
14
- idx = order(i);
15
-
16
- rPoly = intersect(polyBoundary, poly{idx});
17
- for j = i+1:size(box,1)
18
- rPoly = subtract(rPoly, poly{order(j)});
19
- end
20
- rBoundary{idx} = rPoly.Vertices;
21
- [xLimit, yLimit]= boundingbox(rPoly);
22
- if ~isempty(xLimit)
23
- newBox(idx,:) = [xLimit(1) yLimit(1) xLimit(2), yLimit(2)];
24
- end
25
- end
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/align_fp/regularize_fp.m DELETED
@@ -1,111 +0,0 @@
1
- function [box, order] = regularize_fp(box, boundary, rType)
2
-
3
- % 1. use the boundary to crop each room box
4
- isNew = boundary(:,4);
5
- polyBoundary = polyshape(boundary(~isNew,1), boundary(~isNew,2));
6
- for i = 1:size(box, 1)
7
- polyRoom = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2]));
8
- [xLimit, yLimit] = boundingbox(intersect(polyBoundary,polyRoom));
9
- if isempty(xLimit)
10
- disp('One room outside the building!');
11
- else
12
- box(i,:) = [xLimit(1) yLimit(1) xLimit(2), yLimit(2)];
13
- end
14
- end
15
-
16
-
17
- % 2. check if there is any overlapped region to determine the layer of boxes
18
- orderM = false(size(box,1), size(box,1));
19
- for i = 1:size(box,1)
20
- polyRoom1 = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2]));
21
- area1 = area(polyRoom1);
22
- for j = i+1:size(box,1)
23
- polyRoom2 = polyshape(box(j, [1 1 3 3]), box(j, [2 4 4 2]));
24
- area2 = area(polyRoom2);
25
- inter = intersect(polyRoom1, polyRoom2);
26
- if inter.NumRegions >= 1
27
- if area1 <= area2 % may need to add the FP into consideration
28
- orderM(i,j) = true;
29
- else
30
- orderM(j,i) = true;
31
- end
32
- end
33
- end
34
- end
35
- order = 1:size(box,1);
36
- if any(orderM(:))
37
- order = find_room_order(orderM);
38
- end
39
- order = order(end:-1:1);
40
-
41
- % 3. check if there are more than one uncovered regions inside the building
42
- livingIdx = find(rType==0);
43
- for i = 1:size(box, 1)
44
- if i ~= livingIdx
45
- if box(i,1)==box(i,3) || box(i,2)==box(i,4)
46
- disp('Empty box!!!');
47
- else
48
- polyRoom = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2]));
49
- polyBoundary = subtract(polyBoundary,polyRoom);
50
- end
51
-
52
- end
53
- end
54
- livingPoly = polyshape(box(livingIdx, [1 1 3 3]), box(livingIdx, [2 4 4 2]));
55
-
56
- gap = polyBoundary;
57
- if gap.NumRegions == 1
58
- [xLimit, yLimit] = boundingbox(gap);
59
- box(livingIdx,:) = [xLimit(1) yLimit(1) xLimit(2), yLimit(2)];
60
- else
61
- rIdx = find(isnan(gap.Vertices(:,1)));
62
- rIdx = [rIdx; size(gap.Vertices,1)+1];
63
-
64
- % for each region, check if it intersects with the living room,
65
- % otherwise get the room label and find the room that should cover
66
- % the region
67
-
68
- region = cell(length(rIdx), 1);
69
- overlapArea = zeros(length(rIdx), 1);
70
- closeRoomIdx = zeros(length(rIdx), 1);
71
- idx = 1;
72
- for k = 1:length(rIdx)
73
- regionV = gap.Vertices(idx:rIdx(k)-1, :);
74
- idx = rIdx(k) + 1;
75
- region{k} = polyshape(regionV);
76
-
77
- if overlaps(region{k}, livingPoly)
78
- iter = intersect(region{k}, livingPoly);
79
- overlapArea(k) = area(iter);
80
- end
81
-
82
- [x, y] = centroid(region{k});
83
- center = [x, y];
84
-
85
- dist = 256;
86
- bIdx = 0;
87
- for i = 1:size(box, 1)
88
- b = box(i, :);
89
- bCenter = double([(b(:,1)+b(:,3))/2, (b(:,2)+b(:,4))/2]);
90
- d = norm(bCenter-center);
91
- if d<dist
92
- dist = d;
93
- bIdx = i;
94
- end
95
- end
96
- closeRoomIdx(k) = bIdx;
97
- end
98
-
99
- [~, lIdx] = max(overlapArea);
100
- for k = 1:length(closeRoomIdx)
101
- if k == lIdx
102
- [xLimit, yLimit] = boundingbox(region{k});
103
- box(livingIdx,:) = [xLimit(1) yLimit(1) xLimit(2), yLimit(2)];
104
- else
105
- room = polyshape(box(closeRoomIdx(k), [1 1 3 3]), box(closeRoomIdx(k), [2 4 4 2]));
106
- [xLimit, yLimit] = boundingbox(union(room, region{k}));
107
- box(closeRoomIdx(k),:) = [xLimit(1) yLimit(1) xLimit(2), yLimit(2)];
108
- end
109
- end
110
- end
111
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/align_fp/shrink_box.m DELETED
@@ -1,61 +0,0 @@
1
- function box = shrink_box(roomPoly, entrancePoly, doorOrient)
2
-
3
- [PG, shapeId, ~] = subtract(roomPoly, entrancePoly);
4
- idx1 = find(shapeId==1);
5
- d = idx1(2:end) - idx1(1:end-1);
6
- i = find(d~=1);
7
- if ~isempty(i)
8
- idx1 = idx1([i+1:end 1:i]);
9
- end
10
-
11
- idx2 = find(shapeId~=1);
12
- d = idx2(2:end) - idx2(1:end-1);
13
- i = find(d~=1);
14
- if ~isempty(i)
15
- idx2 = idx2([i+1:end 1:i]);
16
- end
17
-
18
- remainPoint = length(idx1);
19
- if remainPoint == 2
20
- box = [min(PG.Vertices) max(PG.Vertices)];
21
- elseif remainPoint == 3
22
- assert(length(idx2) == 3);
23
- pointSet1 = PG.Vertices([idx1(1:2); idx2(2)], :);
24
- pointSet2 = PG.Vertices([idx1(2:3); idx2(2)], :);
25
- if mod(doorOrient, 2) == 0 % door grow vertically
26
- if pointSet1(1,1) == pointSet1(2,1)
27
- box = [min(pointSet1) max(pointSet1)];
28
- else
29
- box = [min(pointSet2) max(pointSet2)];
30
- end
31
- else
32
- if pointSet1(1,2) == pointSet1(2,2)
33
- box = [min(pointSet1) max(pointSet1)];
34
- else
35
- box = [min(pointSet2) max(pointSet2)];
36
- end
37
- end
38
- elseif remainPoint == 4
39
- % elseif remainPoint == 4 && length(idx2) == 4
40
- % pointSet = PG.Vertices([idx1(2:3); idx2(2:3)], :);
41
- % box = [min(pointSet) max(pointSet)];
42
- % elseif remainPoint == 4 % door inside the box
43
- [x1, y1] = centroid(roomPoly);
44
- [x2, y2] = centroid(entrancePoly);
45
- box = [min(roomPoly.Vertices) max(roomPoly.Vertices)];
46
- if mod(doorOrient, 2) == 0 % door grow vertically
47
- if x1 < x2
48
- box(3) = min(entrancePoly.Vertices(:,1));
49
- else
50
- box(1) = max(entrancePoly.Vertices(:,1));
51
- end
52
- else
53
- if y1 < y2
54
- box(4) = min(entrancePoly.Vertices(:,2));
55
- else
56
- box(2) = max(entrancePoly.Vertices(:,2));
57
- end
58
- end
59
- else
60
- disp(['There are other cases with point number = ', num2str(length(shapeId))]);
61
- end
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/db.sqlite3 DELETED
File without changes
Interface/manage.py DELETED
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env python
2
- """Django's command-line utility for administrative tasks."""
3
- import os
4
- import sys
5
-
6
-
7
- def main():
8
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'House.settings')
9
- try:
10
- from django.core.management import execute_from_command_line
11
- except ImportError as exc:
12
- raise ImportError(
13
- "Couldn't import Django. Are you sure it's installed and "
14
- "available on your PYTHONPATH environment variable? Did you "
15
- "forget to activate a virtual environment?"
16
- ) from exc
17
- execute_from_command_line(sys.argv)
18
-
19
-
20
- if __name__ == '__main__':
21
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Interface/model/__pycache__/_floorplan2.cpython-37.pyc DELETED
Binary file (2.67 kB)
 
Interface/model/__pycache__/add_archs.cpython-37.pyc DELETED
Binary file (13.3 kB)
 
Interface/model/__pycache__/box_utils.cpython-37.pyc DELETED
Binary file (4.07 kB)
 
Interface/model/__pycache__/crn.cpython-37.pyc DELETED
Binary file (3.06 kB)