aliceblue11 commited on
Commit
8da0f88
·
verified ·
1 Parent(s): 54a9b07

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +577 -17
app.py CHANGED
@@ -1,8 +1,13 @@
1
  # app.py
2
 
3
  import gradio as gr
 
 
 
 
 
4
 
5
- # TCI 유형 데이터
6
  TCI_TYPES = {
7
  "Type1": {
8
  "name": "활동적인 도전자",
@@ -69,7 +74,7 @@ TCI_TYPES = {
69
  }
70
  }
71
 
72
- # 질문 리스트
73
  QUESTIONS = [
74
  "1. 쉬운 일보다는 도전적인 일이 더 좋다.",
75
  "2. 나를 좋지 않게 대했던 사람들과도 친하게 지낸다.",
@@ -84,7 +89,7 @@ QUESTIONS = [
84
  "11. 어려움에 처했거나 뭔가를 필요로 하는 사람이 있을 때 도움을 준다.",
85
  "12. 처음 만난 사람과도 편안하게 대화하고 내 의견을 이야기할 수 있다.",
86
  "13. 새로운 일에 마음이 쉽게 동해서 당장 시도해 보고 싶어진다.",
87
- "14. 다른 아무 것도 눈에 들어오지 않을 정도로 어떤 일에 몰입하요, 때로 딴 세계에 있는 듯 보일 때가 있다.",
88
  "15. 종종 나 자신에게 불만을 느낀다.",
89
  "16. 내 생각을 받아들이지 않는 사람들을 참아내기가 힘들다.",
90
  "17. 낯선 사람을 만날 때, 매우 수줍어하며 위축된다.",
@@ -97,9 +102,7 @@ QUESTIONS = [
97
  # 선택지
98
  OPTIONS = ["매우 그렇다", "그렇다", "보통이다", "아니다", "매우 아니다"]
99
 
100
- # 질문과 TCI 유형 매핑 (예시)
101
- # 실제 TCI 이론에 따라 질문과 유형을 정확히 매핑해야 합니다.
102
- # 여기서는 예시로 임의로 매핑하였습니다.
103
  QUESTION_TYPE_MAPPING = {
104
  0: "Type1",
105
  1: "Type6",
@@ -142,7 +145,174 @@ def calculate_tci(responses):
142
  selected_type = max(percentages, key=percentages.get)
143
  return selected_type, percentages[selected_type]
144
 
145
- def get_results(*responses):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  selected_type, percentage = calculate_tci(responses)
147
  type_info = TCI_TYPES[selected_type]
148
 
@@ -157,19 +327,409 @@ def get_results(*responses):
157
  }
158
  return result
159
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  def main():
161
  with gr.Blocks() as demo:
162
- gr.Markdown("# TCI 기질 분석기")
163
- gr.Markdown("아래 질문에 답변해 주세요.")
164
- with gr.Column():
165
- inputs = []
166
- for question in QUESTIONS:
167
- response = gr.Radio(label=question, choices=OPTIONS, type="index")
168
- inputs.append(response)
169
- submit = gr.Button("결과 보기")
170
- output = gr.JSON()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
 
172
- submit.click(fn=get_results, inputs=inputs, outputs=output)
173
 
174
  demo.launch()
175
 
 
1
  # app.py
2
 
3
  import gradio as gr
4
+ import pandas as pd
5
+ import matplotlib.pyplot as plt
6
+ import json
7
+ from io import BytesIO
8
+ import base64
9
 
10
+ # TCI_TYPES 데이터 (기존에 정의한 내용과 통합)
11
  TCI_TYPES = {
12
  "Type1": {
13
  "name": "활동적인 도전자",
 
74
  }
75
  }
76
 
77
+ # 질문 리스트 (TCI-RS)
78
  QUESTIONS = [
79
  "1. 쉬운 일보다는 도전적인 일이 더 좋다.",
80
  "2. 나를 좋지 않게 대했던 사람들과도 친하게 지낸다.",
 
89
  "11. 어려움에 처했거나 뭔가를 필요로 하는 사람이 있을 때 도움을 준다.",
90
  "12. 처음 만난 사람과도 편안하게 대화하고 내 의견을 이야기할 수 있다.",
91
  "13. 새로운 일에 마음이 쉽게 동해서 당장 시도해 보고 싶어진다.",
92
+ "14. 다른 아무 것도 눈에 들어오지 않을 정도로 어떤 일에 몰입하여, 때로 딴 세계에 있는 듯 보일 때가 있다.",
93
  "15. 종종 나 자신에게 불만을 느낀다.",
94
  "16. 내 생각을 받아들이지 않는 사람들을 참아내기가 힘들다.",
95
  "17. 낯선 사람을 만날 때, 매우 수줍어하며 위축된다.",
 
102
  # 선택지
103
  OPTIONS = ["매우 그렇다", "그렇다", "보통이다", "아니다", "매우 아니다"]
104
 
105
+ # 질문과 TCI 유형 매핑 (실제 TCI 이론에 따라 조정 필요)
 
 
106
  QUESTION_TYPE_MAPPING = {
107
  0: "Type1",
108
  1: "Type6",
 
145
  selected_type = max(percentages, key=percentages.get)
146
  return selected_type, percentages[selected_type]
147
 
148
+ def generate_report(tci_data):
149
+ 개인정보 = tci_data["개인정보"]
150
+ 프로파일 = tci_data["TCI_RS_프로파일"]
151
+ 하위척도 = tci_data["TCI_RS_하위척도"]
152
+
153
+ # 개인 정보 섹션
154
+ personal_info = f"""
155
+ ## 개인 정보
156
+ - **이름**: {개인정보['이름']}
157
+ - **개인 고유번호**: {개인정보['개인고유번호']}
158
+ - **성별**: {개인정보['성별']}
159
+ - **연령**: {개인정보['연령']}
160
+ - **소속기관 1**: {개인정보['소속기관1']}
161
+ - **소속기관 2**: {개인정보['소속기관2']}
162
+ - **규준집단**: {개인정보['규준집단']}
163
+ - **무응답수**: {개인정보['무응답수']}
164
+ """
165
+
166
+ # 기질 섹션
167
+ temperament = "## 기질\n"
168
+ for key, value in 프로파일["기질"].items():
169
+ temperament += f"- **{key}**: 원점수={value['원점수']}, T점수={value['T점수']}, 백분위={value['백분위']}\n"
170
+
171
+ # 성격 섹션
172
+ personality = "## 성격\n"
173
+ for key, value in 프로파일["성격"].items():
174
+ personality += f"- **{key}**: 원점수={value['원점수']}, T점수={value['T점수']}, 백분위={value['백분위']}\n"
175
+
176
+ # 하위척도 섹션
177
+ subscales = "## TCI-RS 하위척도\n"
178
+ for scale, subscale_data in 하위척도.items():
179
+ subscales += f"### {scale}\n"
180
+ df = pd.DataFrame.from_dict(subscale_data, orient='index')
181
+ df = df.reset_index().rename(columns={"index": "하위척도", "원점수": "원점수", "규준집단_M": "규준집단 M", "SD": "표준편차", "특성": "특성"})
182
+ subscales += df.to_markdown(index=False) + "\n\n"
183
+
184
+ # 전체 보고서
185
+ report = personal_info + "\n" + temperament + "\n" + personality + "\n" + subscales
186
+ return report
187
+
188
+ def plot_scores(tci_data):
189
+ scales = []
190
+ scores = []
191
+ for scale, data in tci_data["TCI_RS_프로파일"]["기질"].items():
192
+ scales.append(scale)
193
+ scores.append(data["백분위"])
194
+ for scale, data in tci_data["TCI_RS_프로파일"]["성격"].items():
195
+ scales.append(scale)
196
+ scores.append(data["백분위"])
197
+
198
+ plt.figure(figsize=(12, 6))
199
+ bars = plt.bar(scales, scores, color='skyblue')
200
+ plt.xlabel('척도')
201
+ plt.ylabel('백분위 점수')
202
+ plt.title('TCI-RS 척도 백분위 점수')
203
+ plt.ylim(0, 100)
204
+ plt.axhline(y=30, color='red', linestyle='--', label='30 이하: 낮음')
205
+ plt.axhline(y=70, color='green', linestyle='--', label='70 이상: 높음')
206
+ plt.legend()
207
+ plt.xticks(rotation=45)
208
+
209
+ # 각 막대 위에 점수 표시
210
+ for bar in bars:
211
+ yval = bar.get_height()
212
+ plt.text(bar.get_x() + bar.get_width()/2.0, yval + 1, f'{yval}', ha='center', va='bottom')
213
+
214
+ plt.tight_layout()
215
+
216
+ # 그래프를 이미지로 저장하지 않고 BytesIO를 사용하여 메모리에 저장
217
+ buf = BytesIO()
218
+ plt.savefig(buf, format='png')
219
+ buf.seek(0)
220
+ plt.close()
221
+
222
+ # Gradio��서 직접 이미지를 사용할 수 있도록 base64로 인코딩
223
+ image_base64 = base64.b64encode(buf.read()).decode()
224
+ image_data = f"data:image/png;base64,{image_base64}"
225
+
226
+ return image_data
227
+
228
+ def display_profile(tci_data_json):
229
+ try:
230
+ tci_data = json.loads(tci_data_json)
231
+ except json.JSONDecodeError:
232
+ return "유효한 JSON 형식이 아닙니다. 다시 시도해주세요.", None
233
+
234
+ report = generate_report(tci_data)
235
+ image = plot_scores(tci_data)
236
+
237
+ return report, image
238
+
239
+ def main():
240
+ with gr.Blocks() as demo:
241
+ gr.Markdown("# TCI-RS 프로파일 보고서")
242
+ gr.Markdown("아래에 TCI-RS 프로파일 데이터를 JSON 형식으로 입력해주세요.\n\n**예시 JSON 데이터**\n```json\n" + json.dumps({
243
+ "개인정보": {
244
+ "이름": "홍길동",
245
+ "개인고유번호": 123,
246
+ "성별": "남자",
247
+ "연령": "만 20 세",
248
+ "소속기관1": "마음사랑",
249
+ "소속기관2": "",
250
+ "규준집단": "일반성인",
251
+ "무응답수": 0
252
+ },
253
+ "TCI_RS_프로파일": {
254
+ "기질": {
255
+ "자극추구(NS)": {"원점수": 34, "T점수": 57, "백분위": 74},
256
+ "위험회피(HA)": {"원점수": 40, "T점수": 55, "백분위": 66},
257
+ "사회적 민감성(RD)": {"원점수": 41, "T점수": 48, "백분위": 39},
258
+ "인내력(PS)": {"원점수": 32, "T점수": 38, "백분위": 11}
259
+ },
260
+ "성격": {
261
+ "자율성(SD)": {"원점수": 47, "T점수": 49, "백분위": 44},
262
+ "연대감(CO)": {"원점수": 43, "T점수": 35, "백분위": 5},
263
+ "자기초월(ST)": {"원점수": 27, "T점수": 51, "백분위": 56},
264
+ "자율성+연대감(SC)": {"원점수": 90, "T점수": 41, "백분위": 18}
265
+ }
266
+ },
267
+ "TCI_RS_하위척도": {
268
+ "자극추구(NS)": {
269
+ "NS1": {"원점수": 9, "규준집단_M": 9.5, "SD": 3.2, "특성": "관습적안정성 탐색적흥분"},
270
+ "NS2": {"원점수": 7, "규준집단_M": 7.0, "SD": 3.3, "특성": "심사숙고 충동성"},
271
+ "NS3": {"원점수": 9, "규준집단_M": 6.0, "SD": 3.2, "특성": "절제 무절제"},
272
+ "NS4": {"원점수": 9, "규준집단_M": 5.2, "SD": 3.2, "특성": "질서정연 자유분방"}
273
+ },
274
+ "위험회피(HA)": {
275
+ "HA1": {"원점수": 8, "규준집단_M": 7.8, "SD": 4.1, "특성": "낙천성 예기불안"},
276
+ "HA2": {"원점수": 9, "규준집단_M": 9.9, "SD": 3.0, "특성": "(낮은)불확실성에대한두려움 (높은)불확실성에대한두려움"},
277
+ "HA3": {"원점수": 12, "규준집단_M": 8.7, "SD": 3.6, "특성": "(낮은)낯선사람에대한수줍음 (높은)낯선사람에대한수줍음"},
278
+ "HA4": {"원점수": 11, "규준집단_M": 8.7, "SD": 3.4, "특성": "활기넘침 쉽게지침"}
279
+ },
280
+ "사회적 민감성(RD)": {
281
+ "RD1": {"원점수": 8, "규준집단_M": 11.1, "SD": 2.9, "특성": "(낮은)정서적감수성 (높은)정서적감수성"},
282
+ "RD2": {"원점수": 10, "규준집단_M": 10.5, "SD": 3.0, "특성": "(낮은)정서적개방성 (높은)정서적개방성"},
283
+ "RD3": {"원점수": 13, "규준집단_M": 11.6, "SD": 3.3, "특성": "거리두기 친밀감"},
284
+ "RD4": {"원점수": 10, "규준집단_M": 9.4, "SD": 2.6, "특성": "독립 의존"}
285
+ },
286
+ "인내력(PS)": {
287
+ "PS1": {"원점수": 12, "규준집단_M": 12.7, "SD": 3.0, "특성": "(낮은)근면 (높은)근면"},
288
+ "PS2": {"원점수": 6, "규준집단_M": 10.7, "SD": 3.0, "특성": "(낮은)끈기 (높은)끈기"},
289
+ "PS3": {"원점수": 7, "규준집단_M": 10.4, "SD": 3.7, "특성": "(낮은)성취에대한야망 (높은)성취에대한야망"},
290
+ "PS4": {"원점수": 7, "규준집단_M": 9.9, "SD": 3.5, "특성": "(낮은)완벽주의 (높은)완벽주의"}
291
+ },
292
+ "자율성(SD)": {
293
+ "SD1": {"원점수": 12, "규준집단_M": 12.7, "SD": 2.9, "특성": "(낮은)책임감 (높은)책임감"},
294
+ "SD2": {"원점수": 12, "규준집단_M": 11.6, "SD": 3.1, "특성": "(낮은)목적의식 (높은)목적의식"},
295
+ "SD3": {"원점수": 6, "규준집단_M": 6.8, "SD": 1.9, "특성": "(낮은)유능감 (높은)유능감"},
296
+ "SD4": {"원점수": 5, "규준집단_M": 4.2, "SD": 1.7, "특성": "(낮은)자기수용 (높은)자기수용"},
297
+ "SD5": {"원점수": 12, "규준집단_M": 12.5, "SD": 3.2, "특성": "(낮은)자기일치 (높은)자기일치"}
298
+ },
299
+ "연대감(CO)": {
300
+ "CO1": {"원점수": 11, "규준집단_M": 12.6, "SD": 2.8, "특성": "(낮은)타인수용 (높은)타인수용"},
301
+ "CO2": {"원점수": 6, "규준집단_M": 9.6, "SD": 2.5, "특성": "(낮은)공감 (높은)공감"},
302
+ "CO3": {"원점수": 7, "규준집단_M": 9.9, "SD": 2.5, "특성": "(낮은)이타성 (높은)이타성"},
303
+ "CO4": {"원점수": 9, "규준집단_M": 8.9, "SD": 2.6, "특성": "(낮은)관대함 (높은)관대함"},
304
+ "CO5": {"원점수": 10, "규준집단_M": 15.1, "SD": 2.5, "특성": "(낮은)공평 (높은)공평"}
305
+ },
306
+ "자기초월(ST)": {
307
+ "ST1": {"원점수": 10, "규준집단_M": 9.1, "SD": 4.0, "특성": "자의식 창조적자기망각"},
308
+ "ST2": {"원점수": 8, "규준집단_M": 7.4, "SD": 4.1, "특성": "(낮은)우주만물과의일체감 (높은)우주만물과의일체감"},
309
+ "ST3": {"원점수": 9, "규준집단_M": 9.2, "SD": 5.4, "특성": "합리적유물론 영성수용"}
310
+ }
311
+ }
312
+ }
313
+ }
314
+
315
+ def calculate_tci_from_responses(responses):
316
  selected_type, percentage = calculate_tci(responses)
317
  type_info = TCI_TYPES[selected_type]
318
 
 
327
  }
328
  return result
329
 
330
+ def generate_report(tci_data):
331
+ 개인정보 = tci_data["개인정보"]
332
+ 프로파일 = tci_data["TCI_RS_프로파일"]
333
+ 하위척도 = tci_data["TCI_RS_하위척도"]
334
+
335
+ # 개인 정보 섹션
336
+ personal_info = f"""
337
+ ## 개인 정보
338
+ - **이름**: {개인정보['이름']}
339
+ - **개인 고유번호**: {개인정보['개인고유번호']}
340
+ - **성별**: {개인정보['성별']}
341
+ - **연령**: {개인정보['연령']}
342
+ - **소속기관 1**: {개인정보['소속기관1']}
343
+ - **소속기관 2**: {개인정보['소속기관2']}
344
+ - **규준집단**: {개인정보['규준집단']}
345
+ - **무응답수**: {개인정보['무응답수']}
346
+ """
347
+
348
+ # 기질 섹션
349
+ temperament = "## 기질\n"
350
+ for key, value in 프로파일["기질"].items():
351
+ temperament += f"- **{key}**: 원점수={value['원점수']}, T점수={value['T점수']}, 백분위={value['백분위']}\n"
352
+
353
+ # 성격 섹션
354
+ personality = "## 성격\n"
355
+ for key, value in 프로파일["성격"].items():
356
+ personality += f"- **{key}**: 원점수={value['원점수']}, T점수={value['T점수']}, 백분위={value['백분위']}\n"
357
+
358
+ # 하위척도 섹션
359
+ subscales = "## TCI-RS 하위척도\n"
360
+ for scale, subscale_data in 하위척도.items():
361
+ subscales += f"### {scale}\n"
362
+ df = pd.DataFrame.from_dict(subscale_data, orient='index')
363
+ df = df.reset_index().rename(columns={"index": "하위척도", "원점수": "원점수", "규준집단_M": "규준집단 M", "SD": "표준편차", "특성": "특성"})
364
+ subscales += df.to_markdown(index=False) + "\n\n"
365
+
366
+ # 전체 보고서
367
+ report = personal_info + "\n" + temperament + "\n" + personality + "\n" + subscales
368
+ return report
369
+
370
+ def plot_scores(tci_data):
371
+ scales = []
372
+ scores = []
373
+ for scale, data in tci_data["TCI_RS_프로파일"]["기질"].items():
374
+ scales.append(scale)
375
+ scores.append(data["백분위"])
376
+ for scale, data in tci_data["TCI_RS_프로파일"]["성격"].items():
377
+ scales.append(scale)
378
+ scores.append(data["백분위"])
379
+
380
+ plt.figure(figsize=(12, 6))
381
+ bars = plt.bar(scales, scores, color='skyblue')
382
+ plt.xlabel('척도')
383
+ plt.ylabel('백분위 점수')
384
+ plt.title('TCI-RS 척도 백분위 점수')
385
+ plt.ylim(0, 100)
386
+ plt.axhline(y=30, color='red', linestyle='--', label='30 이하: 낮음')
387
+ plt.axhline(y=70, color='green', linestyle='--', label='70 이상: 높음')
388
+ plt.legend()
389
+ plt.xticks(rotation=45)
390
+
391
+ # 각 막대 위에 점수 표시
392
+ for bar in bars:
393
+ yval = bar.get_height()
394
+ plt.text(bar.get_x() + bar.get_width()/2.0, yval + 1, f'{yval}', ha='center', va='bottom')
395
+
396
+ plt.tight_layout()
397
+
398
+ # 그래프를 이미지로 저장하지 않고 BytesIO를 사용하여 메모리에 저장
399
+ buf = BytesIO()
400
+ plt.savefig(buf, format='png')
401
+ buf.seek(0)
402
+ plt.close()
403
+
404
+ # Gradio에서 직접 이미지를 사용할 수 있도록 base64로 인코딩
405
+ image_base64 = base64.b64encode(buf.read()).decode()
406
+ image_data = f"data:image/png;base64,{image_base64}"
407
+
408
+ return image_data
409
+
410
+ def display_profile(tci_data_json):
411
+ try:
412
+ tci_data = json.loads(tci_data_json)
413
+ except json.JSONDecodeError:
414
+ return "유효한 JSON 형식이 아닙니다. 다시 시도해주세요.", None
415
+
416
+ report = generate_report(tci_data)
417
+ image = plot_scores(tci_data)
418
+
419
+ return report, image
420
+
421
  def main():
422
  with gr.Blocks() as demo:
423
+ gr.Markdown("# TCI-RS 프로파일 보고서")
424
+ gr.Markdown("아래에 TCI-RS 프로파일 데이터를 JSON 형식으로 입력해주세요.\n\n**예시 JSON 데이터**\n```json\n" + json.dumps({
425
+ "개인정보": {
426
+ "이름": "홍길동",
427
+ "개인고유번호": 123,
428
+ "성별": "남자",
429
+ "연령": "만 20 세",
430
+ "소속기관1": "마음사랑",
431
+ "소속기관2": "",
432
+ "규준집단": "일반성인",
433
+ "무응답수": 0
434
+ },
435
+ "TCI_RS_프로파일": {
436
+ "기질": {
437
+ "자극추구(NS)": {"원점수": 34, "T점수": 57, "백분위": 74},
438
+ "위험회피(HA)": {"원점수": 40, "T점수": 55, "백분위": 66},
439
+ "사회적 민감성(RD)": {"원점수": 41, "T점수": 48, "백분위": 39},
440
+ "인내력(PS)": {"원점수": 32, "T점수": 38, "백분위": 11}
441
+ },
442
+ "성격": {
443
+ "자율성(SD)": {"원점수": 47, "T점수": 49, "백분위": 44},
444
+ "연대감(CO)": {"원점수": 43, "T점수": 35, "백분위": 5},
445
+ "자기초월(ST)": {"원점수": 27, "T점수": 51, "백분위": 56},
446
+ "자율성+연대감(SC)": {"원점수": 90, "T점수": 41, "백분위": 18}
447
+ }
448
+ },
449
+ "TCI_RS_하위척도": {
450
+ "자극추구(NS)": {
451
+ "NS1": {"원점수": 9, "규준집단_M": 9.5, "SD": 3.2, "특성": "관습적안정성 탐색적흥분"},
452
+ "NS2": {"원점수": 7, "규준집단_M": 7.0, "SD": 3.3, "특성": "심사숙고 충동성"},
453
+ "NS3": {"원점수": 9, "규준집단_M": 6.0, "SD": 3.2, "특성": "절제 무절제"},
454
+ "NS4": {"원점수": 9, "규준집단_M": 5.2, "SD": 3.2, "특성": "질서정연 자유분방"}
455
+ },
456
+ "위험회피(HA)": {
457
+ "HA1": {"원점수": 8, "규준집단_M": 7.8, "SD": 4.1, "특성": "낙천성 예기불안"},
458
+ "HA2": {"원점수": 9, "규준집단_M": 9.9, "SD": 3.0, "특성": "(낮은)불확실성에대한두려움 (높은)불확실성에대한두려움"},
459
+ "HA3": {"원점수": 12, "규준집단_M": 8.7, "SD": 3.6, "특성": "(낮은)낯선사람에대한수줍음 (높은)낯선사람에대한수줍음"},
460
+ "HA4": {"원점수": 11, "규준집단_M": 8.7, "SD": 3.4, "특성": "활기넘침 쉽게지침"}
461
+ },
462
+ "사회적 민감성(RD)": {
463
+ "RD1": {"원점수": 8, "규준집단_M": 11.1, "SD": 2.9, "특성": "(낮은)정서적감수성 (높은)정서적감수성"},
464
+ "RD2": {"원점수": 10, "규준집단_M": 10.5, "SD": 3.0, "특성": "(낮은)정서적개방성 (높은)정서적개방성"},
465
+ "RD3": {"원점수": 13, "규준집단_M": 11.6, "SD": 3.3, "특성": "거리두기 친밀감"},
466
+ "RD4": {"원점수": 10, "규준집단_M": 9.4, "SD": 2.6, "특성": "독립 의존"}
467
+ },
468
+ "인내력(PS)": {
469
+ "PS1": {"원점수": 12, "규준집단_M": 12.7, "SD": 3.0, "특성": "(낮은)근면 (높은)근면"},
470
+ "PS2": {"원점수": 6, "규준집단_M": 10.7, "SD": 3.0, "특성": "(낮은)끈기 (높은)끈기"},
471
+ "PS3": {"원점수": 7, "규준집단_M": 10.4, "SD": 3.7, "특성": "(낮은)성취에대한야망 (높은)성취에대한야망"},
472
+ "PS4": {"원점수": 7, "규준집단_M": 9.9, "SD": 3.5, "특성": "(낮은)완벽주의 (높은)완벽주의"}
473
+ },
474
+ "자율성(SD)": {
475
+ "SD1": {"원점수": 12, "규준집단_M": 12.7, "SD": 2.9, "특성": "(낮은)책임감 (높은)책임감"},
476
+ "SD2": {"원점수": 12, "규준집단_M": 11.6, "SD": 3.1, "특성": "(낮은)목적의식 (높은)목적의식"},
477
+ "SD3": {"원점수": 6, "규준집단_M": 6.8, "SD": 1.9, "특성": "(낮은)유능감 (높은)유능감"},
478
+ "SD4": {"원점수": 5, "규준집단_M": 4.2, "SD": 1.7, "특성": "(낮은)자기수용 (높은)자기수용"},
479
+ "SD5": {"원점수": 12, "규준집단_M": 12.5, "SD": 3.2, "특성": "(낮은)자기일치 (높은)자기일치"}
480
+ },
481
+ "연대감(CO)": {
482
+ "CO1": {"원점수": 11, "규준집단_M": 12.6, "SD": 2.8, "��성": "(낮은)타인수용 (높은)타인수용"},
483
+ "CO2": {"원점수": 6, "규준집단_M": 9.6, "SD": 2.5, "특성": "(낮은)공감 (높은)공감"},
484
+ "CO3": {"원점수": 7, "규준집단_M": 9.9, "SD": 2.5, "특성": "(낮은)이타성 (높은)이타성"},
485
+ "CO4": {"원점수": 9, "규준집단_M": 8.9, "SD": 2.6, "특성": "(낮은)관대함 (높은)관대함"},
486
+ "CO5": {"원점수": 10, "규준집단_M": 15.1, "SD": 2.5, "특성": "(낮은)공평 (높은)공평"}
487
+ },
488
+ "자기초월(ST)": {
489
+ "ST1": {"원점수": 10, "규준집단_M": 9.1, "SD": 4.0, "특성": "자의식 창조적자기망각"},
490
+ "ST2": {"원점수": 8, "규준집단_M": 7.4, "SD": 4.1, "특성": "(낮은)우주만물과의일체감 (높은)우주만물과의일체감"},
491
+ "ST3": {"원점수": 9, "규준집단_M": 9.2, "SD": 5.4, "특성": "합리적유물론 영성수용"}
492
+ }
493
+ }
494
+ }, ensure_ascii=False, indent=4) + "\n```")
495
+
496
+ input_json = gr.Textbox(
497
+ label="TCI-RS 데이터 (JSON)",
498
+ lines=15,
499
+ placeholder="TCI-RS 데이터를 JSON 형식으로 입력해주세요.",
500
+ value=json.dumps({
501
+ "개인정보": {
502
+ "이름": "홍길동",
503
+ "개인고유번호": 123,
504
+ "성별": "남자",
505
+ "연령": "만 20 세",
506
+ "소속기관1": "마음사랑",
507
+ "소속기관2": "",
508
+ "규준집단": "일반성인",
509
+ "무응답수": 0
510
+ },
511
+ "TCI_RS_프로파일": {
512
+ "기질": {
513
+ "자극추구(NS)": {"원점수": 34, "T점수": 57, "백분위": 74},
514
+ "위험회피(HA)": {"원점수": 40, "T점수": 55, "백분위": 66},
515
+ "사회적 민감성(RD)": {"원점수": 41, "T점수": 48, "백분위": 39},
516
+ "인내력(PS)": {"원점수": 32, "T점수": 38, "백분위": 11}
517
+ },
518
+ "성격": {
519
+ "자율성(SD)": {"원점수": 47, "T점수": 49, "백분위": 44},
520
+ "연대감(CO)": {"원점수": 43, "T점수": 35, "백분위": 5},
521
+ "자기초월(ST)": {"원점수": 27, "T점수": 51, "백분위": 56},
522
+ "자율성+연대감(SC)": {"원점수": 90, "T점수": 41, "백분위": 18}
523
+ }
524
+ },
525
+ "TCI_RS_하위척도": {
526
+ "자극추구(NS)": {
527
+ "NS1": {"원점수": 9, "규준집단_M": 9.5, "SD": 3.2, "특성": "관습적안정성 탐색적흥분"},
528
+ "NS2": {"원점수": 7, "규준집단_M": 7.0, "SD": 3.3, "특성": "심사숙고 충동성"},
529
+ "NS3": {"원점수": 9, "규준집단_M": 6.0, "SD": 3.2, "특성": "절제 무절제"},
530
+ "NS4": {"원점수": 9, "규준집단_M": 5.2, "SD": 3.2, "특성": "질서정연 자유분방"}
531
+ },
532
+ "위험회피(HA)": {
533
+ "HA1": {"원점수": 8, "규준집단_M": 7.8, "SD": 4.1, "특성": "낙천성 예기불안"},
534
+ "HA2": {"원점수": 9, "규준집단_M": 9.9, "SD": 3.0, "특성": "(낮은)불확실성에대한두려움 (높은)불확실성에대한두려움"},
535
+ "HA3": {"원점수": 12, "규준집단_M": 8.7, "SD": 3.6, "특성": "(낮은)낯선사람에대한수줍음 (높은)낯선사람에대한수줍음"},
536
+ "HA4": {"원점수": 11, "규준집단_M": 8.7, "SD": 3.4, "특성": "활기넘침 쉽게지침"}
537
+ },
538
+ "사회적 민감성(RD)": {
539
+ "RD1": {"원점수": 8, "규준집단_M": 11.1, "SD": 2.9, "특성": "(낮은)정서적감수성 (높은)정서적감수성"},
540
+ "RD2": {"원점수": 10, "규준집단_M": 10.5, "SD": 3.0, "특성": "(낮은)정서적개방성 (높은)정서적개방성"},
541
+ "RD3": {"원점수": 13, "규준집단_M": 11.6, "SD": 3.3, "특성": "거리두기 친밀감"},
542
+ "RD4": {"원점수": 10, "규준집단_M": 9.4, "SD": 2.6, "특성": "독립 의존"}
543
+ },
544
+ "인내력(PS)": {
545
+ "PS1": {"원점수": 12, "규준집단_M": 12.7, "SD": 3.0, "특성": "(낮은)근면 (높은)근면"},
546
+ "PS2": {"원점수": 6, "규준집단_M": 10.7, "SD": 3.0, "특성": "(낮은)끈기 (높은)끈기"},
547
+ "PS3": {"원점수": 7, "규준집단_M": 10.4, "SD": 3.7, "특성": "(낮은)성취에대한야망 (높은)성취에대한야망"},
548
+ "PS4": {"원점수": 7, "규준집단_M": 9.9, "SD": 3.5, "특성": "(낮은)완벽주의 (높은)완벽주의"}
549
+ },
550
+ "자율성(SD)": {
551
+ "SD1": {"원점수": 12, "규준집단_M": 12.7, "SD": 2.9, "특성": "(낮은)책임감 (높은)책임감"},
552
+ "SD2": {"원점수": 12, "규준집단_M": 11.6, "SD": 3.1, "특성": "(낮은)목적의식 (높은)목적의식"},
553
+ "SD3": {"원점수": 6, "규준집단_M": 6.8, "SD": 1.9, "특성": "(낮은)유능감 (높은)유능감"},
554
+ "SD4": {"원점수": 5, "규준집단_M": 4.2, "SD": 1.7, "특성": "(낮은)자기수용 (높은)자기수용"},
555
+ "SD5": {"원점수": 12, "규준집단_M": 12.5, "SD": 3.2, "특성": "(낮은)자기일치 (높은)자기일치"}
556
+ },
557
+ "연대감(CO)": {
558
+ "CO1": {"원점수": 11, "규준집단_M": 12.6, "SD": 2.8, "특성": "(낮은)타인수용 (높은)타인수용"},
559
+ "CO2": {"원점수": 6, "규준집단_M": 9.6, "SD": 2.5, "특성": "(낮은)공감 (높은)공감"},
560
+ "CO3": {"원점수": 7, "규준집단_M": 9.9, "SD": 2.5, "특성": "(낮은)이타성 (높은)이타성"},
561
+ "CO4": {"원점수": 9, "규준집단_M": 8.9, "SD": 2.6, "특성": "(낮은)관대함 (높은)관대함"},
562
+ "CO5": {"원점수": 10, "규준집단_M": 15.1, "SD": 2.5, "특성": "(낮은)공평 (높은)공평"}
563
+ },
564
+ "자기초월(ST)": {
565
+ "ST1": {"원점수": 10, "규준집단_M": 9.1, "SD": 4.0, "특성": "자의식 창조적자기망각"},
566
+ "ST2": {"원점수": 8, "규준집단_M": 7.4, "SD": 4.1, "특성": "(낮은)우주만물과의일체감 (높은)우주만물과의일체감"},
567
+ "ST3": {"원점수": 9, "규준집단_M": 9.2, "SD": 5.4, "특성": "합리적유물론 영성수용"}
568
+ }
569
+ }
570
+ }
571
+ }, ensure_ascii=False, indent=4) + "\n```")
572
+
573
+ input_json = gr.Textbox(
574
+ label="TCI-RS 데이터 (JSON)",
575
+ lines=15,
576
+ placeholder="TCI-RS 데이터를 JSON 형식으로 입력해주세요.",
577
+ value=json.dumps({
578
+ "개인정보": {
579
+ "이름": "홍길동",
580
+ "개인고유번호": 123,
581
+ "성별": "남자",
582
+ "연령": "만 20 세",
583
+ "소속기관1": "마음사랑",
584
+ "소속기관2": "",
585
+ "규준집단": "일반성인",
586
+ "무응답수": 0
587
+ },
588
+ "TCI_RS_프로파일": {
589
+ "기질": {
590
+ "자극추구(NS)": {"원점수": 34, "T점수": 57, "백분위": 74},
591
+ "위험회피(HA)": {"원점수": 40, "T점수": 55, "백분위": 66},
592
+ "사회적 민감성(RD)": {"원점수": 41, "T점수": 48, "백분위": 39},
593
+ "인내력(PS)": {"원점수": 32, "T점수": 38, "백분위": 11}
594
+ },
595
+ "성격": {
596
+ "자율성(SD)": {"원점수": 47, "T점수": 49, "백분위": 44},
597
+ "연대감(CO)": {"원점수": 43, "T점수": 35, "백분위": 5},
598
+ "자기초월(ST)": {"원점수": 27, "T점수": 51, "백분위": 56},
599
+ "자율성+연대감(SC)": {"원점수": 90, "T점수": 41, "백분위": 18}
600
+ }
601
+ },
602
+ "TCI_RS_하위척도": {
603
+ "자극추구(NS)": {
604
+ "NS1": {"원점수": 9, "규준집단_M": 9.5, "SD": 3.2, "특성": "관습적안정성 탐색적흥분"},
605
+ "NS2": {"원점수": 7, "규준집단_M": 7.0, "SD": 3.3, "특성": "심사숙고 충동성"},
606
+ "NS3": {"원점수": 9, "규준집단_M": 6.0, "SD": 3.2, "특성": "절제 무절제"},
607
+ "NS4": {"원점수": 9, "규준집단_M": 5.2, "SD": 3.2, "특성": "질서정연 자유분방"}
608
+ },
609
+ "위험회피(HA)": {
610
+ "HA1": {"원점수": 8, "규준집단_M": 7.8, "SD": 4.1, "특성": "낙천성 예기불안"},
611
+ "HA2": {"원점수": 9, "규준집단_M": 9.9, "SD": 3.0, "특성": "(낮은)불확실성에대한두려움 (높은)불확실성에대한두려움"},
612
+ "HA3": {"원점수": 12, "규준집단_M": 8.7, "SD": 3.6, "특성": "(낮은)낯선사람에대한수줍음 (높은)낯선사람에대한수줍음"},
613
+ "HA4": {"원점수": 11, "규준집단_M": 8.7, "SD": 3.4, "특성": "활기넘침 쉽게지침"}
614
+ },
615
+ "사회적 민감성(RD)": {
616
+ "RD1": {"원점수": 8, "규준집단_M": 11.1, "SD": 2.9, "특성": "(낮은)정서적감수성 (높은)정서적감수성"},
617
+ "RD2": {"원점수": 10, "규준집단_M": 10.5, "SD": 3.0, "특성": "(낮은)정서적개방성 (높은)정서적개방성"},
618
+ "RD3": {"원점수": 13, "규준집단_M": 11.6, "SD": 3.3, "특성": "거리두기 친밀감"},
619
+ "RD4": {"원점수": 10, "규준집단_M": 9.4, "SD": 2.6, "특성": "독립 의존"}
620
+ },
621
+ "인내력(PS)": {
622
+ "PS1": {"원점수": 12, "규준집단_M": 12.7, "SD": 3.0, "특성": "(낮은)근면 (높은)근면"},
623
+ "PS2": {"원점수": 6, "규준집단_M": 10.7, "SD": 3.0, "특성": "(낮은)끈기 (높은)끈기"},
624
+ "PS3": {"원점수": 7, "규준집단_M": 10.4, "SD": 3.7, "특성": "(낮은)성취에대한야망 (높은)성취에대한야망"},
625
+ "PS4": {"원점수": 7, "규준집단_M": 9.9, "SD": 3.5, "특성": "(낮은)완벽주의 (높은)완벽주의"}
626
+ },
627
+ "자율성(SD)": {
628
+ "SD1": {"원점수": 12, "규준집단_M": 12.7, "SD": 2.9, "특성": "(낮은)책임감 (높은)책임감"},
629
+ "SD2": {"원점수": 12, "규준집단_M": 11.6, "SD": 3.1, "특성": "(낮은)목적의식 (높은)목적의식"},
630
+ "SD3": {"원점수": 6, "규준집단_M": 6.8, "SD": 1.9, "특성": "(낮은)유능감 (높은)유능감"},
631
+ "SD4": {"원점수": 5, "규준집단_M": 4.2, "SD": 1.7, "특성": "(낮은)자기수용 (높은)자기수용"},
632
+ "SD5": {"원점수": 12, "규준집단_M": 12.5, "SD": 3.2, "특성": "(낮은)자기일치 (높은)자기일치"}
633
+ },
634
+ "연대감(CO)": {
635
+ "CO1": {"원점수": 11, "규준집단_M": 12.6, "SD": 2.8, "특성": "(낮은)타인수용 (높은)타인수용"},
636
+ "CO2": {"원점수": 6, "규준집단_M": 9.6, "SD": 2.5, "특성": "(낮은)공감 (높은)공감"},
637
+ "CO3": {"원점수": 7, "규준집단_M": 9.9, "SD": 2.5, "특성": "(낮은)이타성 (높은)이타성"},
638
+ "CO4": {"원점수": 9, "규준집단_M": 8.9, "SD": 2.6, "특성": "(낮은)관대함 (높은)관대함"},
639
+ "CO5": {"원점수": 10, "규준집단_M": 15.1, "SD": 2.5, "특성": "(낮은)공평 (높은)공평"}
640
+ },
641
+ "자기초월(ST)": {
642
+ "ST1": {"원점수": 10, "규준집단_M": 9.1, "SD": 4.0, "특성": "자의식 창조적자기망각"},
643
+ "ST2": {"원점수": 8, "규준집단_M": 7.4, "SD": 4.1, "특성": "(낮은)우주만물과의일체감 (높은)우주만물과의일체감"},
644
+ "ST3": {"원점수": 9, "규준집단_M": 9.2, "SD": 5.4, "특성": "합리적유물론 영성수용"}
645
+ }
646
+ }
647
+ }
648
+ }, ensure_ascii=False, indent=4) + "\n```")
649
+
650
+ input_json = gr.Textbox(
651
+ label="TCI-RS 데이터 (JSON)",
652
+ lines=15,
653
+ placeholder="TCI-RS 데이터를 JSON 형식으로 입력해주세요.",
654
+ value=json.dumps({
655
+ "개인정보": {
656
+ "이름": "홍길동",
657
+ "개인고유번호": 123,
658
+ "성별": "남자",
659
+ "연령": "만 20 세",
660
+ "소속기관1": "마음사랑",
661
+ "소속기관2": "",
662
+ "규준집단": "일반성인",
663
+ "무응답수": 0
664
+ },
665
+ "TCI_RS_프로파일": {
666
+ "기질": {
667
+ "자극추구(NS)": {"원점수": 34, "T점수": 57, "백분위": 74},
668
+ "위험회피(HA)": {"원점수": 40, "T점수": 55, "백분위": 66},
669
+ "사회적 민감성(RD)": {"원점수": 41, "T점수": 48, "백분위": 39},
670
+ "인내력(PS)": {"원점수": 32, "T점수": 38, "백분위": 11}
671
+ },
672
+ "성격": {
673
+ "자율성(SD)": {"원점수": 47, "T점수": 49, "백분위": 44},
674
+ "연대감(CO)": {"원점수": 43, "T점수": 35, "백분위": 5},
675
+ "자기초월(ST)": {"원점수": 27, "T점수": 51, "백분위": 56},
676
+ "자율성+연대감(SC)": {"원점수": 90, "T점수": 41, "백분위": 18}
677
+ }
678
+ },
679
+ "TCI_RS_하위척도": {
680
+ "자극추구(NS)": {
681
+ "NS1": {"원점수": 9, "규준집단_M": 9.5, "SD": 3.2, "특성": "관습적안정성 탐색적흥분"},
682
+ "NS2": {"원점수": 7, "규준집단_M": 7.0, "SD": 3.3, "특성": "심사숙고 충동성"},
683
+ "NS3": {"원점수": 9, "규준집단_M": 6.0, "SD": 3.2, "특성": "절제 무절제"},
684
+ "NS4": {"원점수": 9, "규준집단_M": 5.2, "SD": 3.2, "특성": "질서정연 자유분방"}
685
+ },
686
+ "위험회피(HA)": {
687
+ "HA1": {"원점수": 8, "규준집단_M": 7.8, "SD": 4.1, "특성": "낙천성 예기불안"},
688
+ "HA2": {"원점수": 9, "규준집단_M": 9.9, "SD": 3.0, "특성": "(낮은)불확실성에대한두려움 (높은)불확실성에대한두려움"},
689
+ "HA3": {"원점수": 12, "규준집단_M": 8.7, "SD": 3.6, "특성": "(낮은)낯선사람에대한수줍음 (높은)낯선사람에대한수줍음"},
690
+ "HA4": {"원점수": 11, "규준집단_M": 8.7, "SD": 3.4, "특성": "활기넘침 쉽게지침"}
691
+ },
692
+ "사회적 민감성(RD)": {
693
+ "RD1": {"원점수": 8, "규준집단_M": 11.1, "SD": 2.9, "특성": "(낮은)정서적감수성 (높은)정서적감수성"},
694
+ "RD2": {"원점수": 10, "규준집단_M": 10.5, "SD": 3.0, "특성": "(낮은)정서적개방성 (높은)정서적개방성"},
695
+ "RD3": {"원점수": 13, "규준집단_M": 11.6, "SD": 3.3, "특성": "거리두기 친밀감"},
696
+ "RD4": {"원점수": 10, "규준집단_M": 9.4, "SD": 2.6, "특성": "독립 의존"}
697
+ },
698
+ "인내력(PS)": {
699
+ "PS1": {"원점수": 12, "규준집단_M": 12.7, "SD": 3.0, "특성": "(낮은)근면 (높은)근면"},
700
+ "PS2": {"원점수": 6, "규준집단_M": 10.7, "SD": 3.0, "특성": "(낮은)끈기 (높은)끈기"},
701
+ "PS3": {"원점수": 7, "규준집단_M": 10.4, "SD": 3.7, "특성": "(낮은)성취에대한야망 (높은)성취에대한야망"},
702
+ "PS4": {"원점수": 7, "규준집단_M": 9.9, "SD": 3.5, "특성": "(낮은)완벽주의 (높은)완벽주의"}
703
+ },
704
+ "자율성(SD)": {
705
+ "SD1": {"원점수": 12, "규준집단_M": 12.7, "SD": 2.9, "특성": "(낮은)책임감 (높은)책임감"},
706
+ "SD2": {"원점수": 12, "규준집단_M": 11.6, "SD": 3.1, "특성": "(낮은)목적의식 (높은)목적의식"},
707
+ "SD3": {"원점수": 6, "규준집단_M": 6.8, "SD": 1.9, "특성": "(낮은)유능감 (높은)유능감"},
708
+ "SD4": {"원점수": 5, "규준집단_M": 4.2, "SD": 1.7, "특성": "(낮은)자기수용 (높은)자기수용"},
709
+ "SD5": {"원점수": 12, "규준집단_M": 12.5, "SD": 3.2, "특성": "(낮은)자기일치 (높은)자기일치"}
710
+ },
711
+ "연대감(CO)": {
712
+ "CO1": {"원점수": 11, "규준집단_M": 12.6, "SD": 2.8, "특성": "(낮은)타인수용 (높은)타인수용"},
713
+ "CO2": {"원점수": 6, "규준집단_M": 9.6, "SD": 2.5, "특성": "(낮은)공감 (높은)공감"},
714
+ "CO3": {"원점수": 7, "규준집단_M": 9.9, "SD": 2.5, "특성": "(낮은)이타성 (높은)이타성"},
715
+ "CO4": {"원점수": 9, "규준집단_M": 8.9, "SD": 2.6, "특성": "(낮은)관대함 (높은)관대함"},
716
+ "CO5": {"원점수": 10, "규준집단_M": 15.1, "SD": 2.5, "특성": "(낮은)공평 (높은)공평"}
717
+ },
718
+ "자기초월(ST)": {
719
+ "ST1": {"원점수": 10, "규준집단_M": 9.1, "SD": 4.0, "특성": "자의식 창조적자기망각"},
720
+ "ST2": {"원점수": 8, "규준집단_M": 7.4, "SD": 4.1, "특성": "(낮은)우주만물과의일체감 (높은)우주만물과의일체감"},
721
+ "ST3": {"원점수": 9, "규준집단_M": 9.2, "SD": 5.4, "특성": "합리적유물론 영성수용"}
722
+ }
723
+ }
724
+ }
725
+ }, ensure_ascii=False, indent=4))
726
+
727
+ submit = gr.Button("보고서 생성")
728
+
729
+ report_output = gr.Markdown()
730
+ image_output = gr.Image()
731
 
732
+ submit.click(fn=display_profile, inputs=input_json, outputs=[report_output, image_output])
733
 
734
  demo.launch()
735