├── .gitignore ├── test ├── 1.jpg ├── test.png ├── test2.png └── result.json ├── result ├── 0.jpg ├── 1.jpg └── 2.jpg ├── README.md ├── bot.py └── ocr.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | .DS_Store 3 | chat_window.png 4 | -------------------------------------------------------------------------------- /test/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/kakaotalk-bot/HEAD/test/1.jpg -------------------------------------------------------------------------------- /result/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/kakaotalk-bot/HEAD/result/0.jpg -------------------------------------------------------------------------------- /result/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/kakaotalk-bot/HEAD/result/1.jpg -------------------------------------------------------------------------------- /result/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/kakaotalk-bot/HEAD/result/2.jpg -------------------------------------------------------------------------------- /test/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/kakaotalk-bot/HEAD/test/test.png -------------------------------------------------------------------------------- /test/test2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/kakaotalk-bot/HEAD/test/test2.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 카카오톡 자동 응답 봇 2 | 3 | 이 프로젝트는 카카오톡 메시지를 자동으로 감지하고 응답하는 봇입니다. OpenAI의 GPT 모델을 사용하여 대화 맥락에 맞는 응답을 생성합니다. 4 | 5 | | | | | 6 | | --- | --- | --- | 7 | | ![](result/0.jpg) | ![](result/1.jpg) | ![](result/2.jpg) | 8 | 9 | ## 주요 기능 10 | 11 | - 새로운 카카오톡 메시지 감지 12 | - 대화창 캡처 및 OCR을 통한 텍스트 추출 13 | - GPT 모델을 사용한 맥락에 맞는 응답 생성 14 | - 자동 응답 전송 15 | - Clova OCR API를 사용한 이미지 텍스트 추출 16 | - 대화 참여자 구분 (나/상대방) 17 | 18 | ## 필요 조건 19 | 20 | - Python 3.7+ 21 | - 필요한 라이브러리: pyautogui, pygetwindow, pyperclip, openai, requests, Pillow 22 | - OpenAI API 키 23 | - Clova OCR API 키 및 URL 24 | 25 | ## 설치 방법 26 | 27 | 1. 저장소를 클론합니다: 28 | ``` 29 | git clone https://github.com/kairess/kakaotalk-bot.git 30 | ``` 31 | 32 | 2. 필요한 라이브러리를 설치합니다: 33 | ``` 34 | pip install pyautogui pygetwindow pyperclip openai requests Pillow 35 | ``` 36 | 37 | 3. OpenAI API 키와 Clova OCR API 키를 환경 변수로 설정합니다: 38 | ``` 39 | export OPENAI_API_KEY='your-openai-api-key-here' 40 | export CLOVA_OCR_API_URL='your-clova-ocr-api-url-here' 41 | export CLOVA_OCR_SECRET_KEY='your-clova-ocr-secret-key-here' 42 | ``` 43 | 44 | ## 사용 방법 45 | 46 | 1. 카카오톡 PC 버전을 실행하고 로그인합니다. 47 | 48 | 2. 스크립트를 실행합니다: 49 | ``` 50 | python bot.py 51 | ``` 52 | 53 | 3. 스크립트가 실행되면 새로운 카카오톡 메시지를 자동으로 감지하고 응답합니다. 54 | 55 | ## 주의사항 56 | 57 | - Windows 환경에서 실행해야 합니다. (맥, 리눅스 환경에서는 불가) 58 | - 이 봇은 개인적인 용도로만 사용해야 합니다. 59 | - 과도한 사용은 카카오톡 서비스 약관을 위반할 수 있습니다. 60 | - OpenAI API 사용에 따른 비용이 발생할 수 있습니다. 61 | 62 | ## 라이선스 63 | 64 | 이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 [LICENSE](LICENSE) 파일을 참조하세요. 65 | -------------------------------------------------------------------------------- /bot.py: -------------------------------------------------------------------------------- 1 | import pyautogui, time, os 2 | import pygetwindow as gw 3 | import pyperclip 4 | from datetime import datetime 5 | import json 6 | from ocr import request_ocr, extract_conversations_by_color, get_dominant_color 7 | from openai import OpenAI 8 | 9 | MOUSE_POSITION_DEBUG = False # 마우스 위치 디버깅 여부 10 | NEW_MESSAGE_REGION = (740, 235, 20, 20) # 빨간색 새 메시지 확인 영역 (왼쪽, 위, 너비, 높이) 11 | CONFIDENCE_THRESHOLD = 0.5 # OCR 결과 신뢰도 임계값 12 | DIALOGUE_Y_THRESHOLD = (173, 1036) # 대화 추출 영역 (y좌표, 위, 아래 영역 제거하고 중간 영역만 추출) 13 | CHECK_INTERVAL = 3 # 메시지 확인 주기 (초) 14 | 15 | client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY")) 16 | 17 | if MOUSE_POSITION_DEBUG: 18 | print('Press Ctrl-C to quit.') 19 | try: 20 | while True: 21 | x, y = pyautogui.position() 22 | positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4) 23 | print(positionStr, end='') 24 | print('\b' * len(positionStr), end='', flush=True) 25 | time.sleep(0.1) 26 | except KeyboardInterrupt: 27 | print('\n') 28 | 29 | while True: 30 | # 0. 카카오톡 활성화 31 | gw.getWindowsWithTitle('카카오톡')[0].activate() 32 | 33 | # 1. 새로운 메시지 확인 34 | img = pyautogui.screenshot(region=NEW_MESSAGE_REGION) 35 | r, g, b = get_dominant_color(img) 36 | 37 | has_new_message = r > 200 and g < 150 and b < 150 38 | if not has_new_message: 39 | time.sleep(3) 40 | continue 41 | 42 | print(f"[!] 새로운 메시지가 있습니다. {datetime.now()}") 43 | 44 | # 2. 메시지 선택 45 | pyautogui.click(NEW_MESSAGE_REGION) 46 | time.sleep(1) 47 | pyautogui.press('enter') 48 | time.sleep(1) 49 | 50 | # 3. 활성화된 창 캡처 51 | active_window = pyautogui.getActiveWindow() 52 | 53 | screenshot = pyautogui.screenshot(region=( 54 | active_window.left, 55 | active_window.top, 56 | active_window.width, 57 | active_window.height 58 | )) 59 | 60 | image_path = 'chat_window.png' 61 | screenshot.save(image_path) 62 | 63 | result = request_ocr(image_path) 64 | with open('test/result.json', 'w', encoding='utf-8') as f: 65 | json.dump(result, f, ensure_ascii=False, indent=4) 66 | 67 | # with open('test/result.json', 'r', encoding='utf-8') as f: 68 | # result = json.load(f) 69 | 70 | # 3. 대화 추출 71 | conversations = extract_conversations_by_color( 72 | result, 73 | image_path=image_path, 74 | confidence_threshold=CONFIDENCE_THRESHOLD, 75 | dialogue_y_threshold=DIALOGUE_Y_THRESHOLD 76 | ) 77 | 78 | logs = [] 79 | for user, message in conversations: 80 | logs.append(f"{user}: {message}") 81 | 82 | print("[*] 대화 추출") 83 | print('\n'.join(logs)) 84 | print() 85 | 86 | # 4. 메시지 생성 87 | messages = [{ 88 | "role": "system", 89 | "content": "Please provide a response that fits the context based on the following conversation history. Return only the result in Korean without any additional text.\n\n나:" 90 | }, { 91 | "role": "user", 92 | "content": '\n'.join(logs) 93 | }] 94 | 95 | response = client.chat.completions.create( 96 | model="gpt-4o", 97 | messages=messages, 98 | temperature=0.5, 99 | max_tokens=1000 100 | ) 101 | 102 | response_message = response.choices[0].message.content 103 | response_message = response_message.replace('나:', '').strip() 104 | print("[*] 메시지 생성") 105 | print(response_message) 106 | print() 107 | 108 | # 5. 메시지 전송 109 | pyperclip.copy(response_message) 110 | time.sleep(1) 111 | pyautogui.hotkey('ctrl', 'v') 112 | time.sleep(1) 113 | pyautogui.press('enter') 114 | time.sleep(1) 115 | 116 | # 6. 메시지 전송 후 창 닫기 117 | pyautogui.hotkey('ctrl', 'w') 118 | 119 | time.sleep(CHECK_INTERVAL) 120 | -------------------------------------------------------------------------------- /ocr.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import uuid 3 | import time 4 | import json 5 | import base64 6 | import os 7 | from PIL import Image 8 | 9 | INFER_CONFIDENCE_THRESHOLD = 0.5 10 | DIALOGUE_Y_THRESHOLD = (100, 550) 11 | 12 | def request_ocr(image_path): 13 | api_url = os.getenv('CLOVA_OCR_API_URL') 14 | secret_key = os.getenv('CLOVA_OCR_SECRET_KEY') 15 | 16 | with open(image_path, 'rb') as f: 17 | image_data = base64.b64encode(f.read()).decode('utf-8') 18 | 19 | request_json = { 20 | 'images': [ 21 | { 22 | 'format': 'jpg', 23 | 'name': 'demo', 24 | 'data': image_data 25 | } 26 | ], 27 | 'requestId': str(uuid.uuid4()), 28 | 'version': 'V2', 29 | 'timestamp': int(round(time.time() * 1000)) 30 | } 31 | 32 | payload = json.dumps(request_json).encode('UTF-8') 33 | headers = { 34 | 'X-OCR-SECRET': secret_key, 35 | 'Content-Type': 'application/json' 36 | } 37 | 38 | response = requests.post(api_url, headers=headers, data=payload) 39 | 40 | return response.json() 41 | 42 | 43 | def get_dominant_color(image, box=None): 44 | image = image.convert('RGB') 45 | 46 | if box: 47 | x1, y1 = box[0]['x'], box[0]['y'] 48 | x2, y2 = box[2]['x'], box[2]['y'] 49 | region = image.crop((x1, y1, x2, y2)) 50 | else: 51 | region = image 52 | 53 | colors = region.getcolors(region.size[0] * region.size[1]) 54 | return max(colors, key=lambda x: x[0])[1] 55 | 56 | def is_yellow(color): 57 | r, g, b = color 58 | return r > 200 and g > 200 and b < 100 59 | 60 | def is_gray(color): 61 | r, g, b = color 62 | return (r > 30 and g > 30 and b > 30) and (r < 60 and g < 60 and b < 60) 63 | 64 | def is_white(color): 65 | r, g, b = color 66 | return r > 240 and g > 240 and b > 240 67 | 68 | 69 | def extract_conversations_by_color(ocr_result, image_path, confidence_threshold=0.5, dialogue_y_threshold=(100, 550)): 70 | image = Image.open(image_path).convert('RGB') 71 | conversations = [] 72 | current_user = None 73 | current_message = "" 74 | 75 | fields = ocr_result['images'][0]['fields'] 76 | fields.sort(key=lambda x: (x['boundingPoly']['vertices'][0]['y'], x['boundingPoly']['vertices'][0]['x'])) 77 | 78 | for field in fields: 79 | if field['inferConfidence'] < confidence_threshold: 80 | continue 81 | 82 | if field['boundingPoly']['vertices'][0]['y'] < dialogue_y_threshold[0] or field['boundingPoly']['vertices'][3]['y'] > dialogue_y_threshold[1]: 83 | continue 84 | 85 | text = field['inferText'].strip() 86 | box = field['boundingPoly']['vertices'] 87 | color = get_dominant_color(image, box) 88 | 89 | if is_yellow(color): 90 | user = "나" 91 | elif is_white(color): 92 | user = "상대방" 93 | else: 94 | continue 95 | 96 | if current_user != user: 97 | if current_message: 98 | conversations.append((current_user, current_message.strip())) 99 | current_user = user 100 | current_message = text 101 | else: 102 | current_message += " " + text 103 | 104 | if current_message: 105 | conversations.append((current_user, current_message.strip())) 106 | 107 | return conversations 108 | 109 | if __name__ == "__main__": 110 | image_path = 'test2.png' 111 | 112 | # result = request_ocr(image_path) 113 | # with open('result.json', 'w', encoding='utf-8') as f: 114 | # json.dump(result, f, ensure_ascii=False, indent=4) 115 | 116 | with open('result.json', 'r', encoding='utf-8') as f: 117 | result = json.load(f) 118 | 119 | conversations = extract_conversations_by_color( 120 | result, 121 | image_path, 122 | confidence_threshold=0.5, 123 | dialogue_y_threshold=(100, 550) 124 | ) 125 | 126 | for user, message in conversations: 127 | print(f"{user}: {message}") 128 | -------------------------------------------------------------------------------- /test/result.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "V2", 3 | "requestId": "9702fab4-29ef-43e2-8575-52077a3a3f6d", 4 | "timestamp": 1728110762107, 5 | "images": [ 6 | { 7 | "uid": "7d8aeac8e3714bef8a0e5707e60e3382", 8 | "name": "demo", 9 | "inferResult": "SUCCESS", 10 | "message": "SUCCESS", 11 | "validationResult": { 12 | "result": "NO_REQUESTED" 13 | }, 14 | "convertedImageInfo": { 15 | "width": 813, 16 | "height": 1004, 17 | "pageIndex": 0, 18 | "longImage": false 19 | }, 20 | "fields": [ 21 | { 22 | "valueType": "ALL", 23 | "boundingPoly": { 24 | "vertices": [ 25 | { 26 | "x": 772.0, 27 | "y": 17.0 28 | }, 29 | { 30 | "x": 795.0, 31 | "y": 17.0 32 | }, 33 | { 34 | "x": 795.0, 35 | "y": 39.0 36 | }, 37 | { 38 | "x": 772.0, 39 | "y": 39.0 40 | } 41 | ] 42 | }, 43 | "inferText": "X", 44 | "inferConfidence": 0.6551, 45 | "type": "NORMAL", 46 | "lineBreak": true 47 | }, 48 | { 49 | "valueType": "ALL", 50 | "boundingPoly": { 51 | "vertices": [ 52 | { 53 | "x": 168.0, 54 | "y": 91.0 55 | }, 56 | { 57 | "x": 242.0, 58 | "y": 91.0 59 | }, 60 | { 61 | "x": 242.0, 62 | "y": 134.0 63 | }, 64 | { 65 | "x": 168.0, 66 | "y": 134.0 67 | } 68 | ] 69 | }, 70 | "inferText": "채팅", 71 | "inferConfidence": 1.0, 72 | "type": "NORMAL", 73 | "lineBreak": false 74 | }, 75 | { 76 | "valueType": "ALL", 77 | "boundingPoly": { 78 | "vertices": [ 79 | { 80 | "x": 300.0, 81 | "y": 92.0 82 | }, 83 | { 84 | "x": 443.0, 85 | "y": 92.0 86 | }, 87 | { 88 | "x": 443.0, 89 | "y": 134.0 90 | }, 91 | { 92 | "x": 300.0, 93 | "y": 134.0 94 | } 95 | ] 96 | }, 97 | "inferText": "오픈채팅", 98 | "inferConfidence": 1.0, 99 | "type": "NORMAL", 100 | "lineBreak": false 101 | }, 102 | { 103 | "valueType": "ALL", 104 | "boundingPoly": { 105 | "vertices": [ 106 | { 107 | "x": 749.0, 108 | "y": 105.0 109 | }, 110 | { 111 | "x": 767.0, 112 | "y": 105.0 113 | }, 114 | { 115 | "x": 767.0, 116 | "y": 120.0 117 | }, 118 | { 119 | "x": 749.0, 120 | "y": 120.0 121 | } 122 | ] 123 | }, 124 | "inferText": "+", 125 | "inferConfidence": 1.0, 126 | "type": "NORMAL", 127 | "lineBreak": true 128 | }, 129 | { 130 | "valueType": "ALL", 131 | "boundingPoly": { 132 | "vertices": [ 133 | { 134 | "x": 87.0, 135 | "y": 204.0 136 | }, 137 | { 138 | "x": 102.0, 139 | "y": 204.0 140 | }, 141 | { 142 | "x": 102.0, 143 | "y": 222.0 144 | }, 145 | { 146 | "x": 87.0, 147 | "y": 222.0 148 | } 149 | ] 150 | }, 151 | "inferText": "8", 152 | "inferConfidence": 0.9977, 153 | "type": "NORMAL", 154 | "lineBreak": false 155 | }, 156 | { 157 | "valueType": "ALL", 158 | "boundingPoly": { 159 | "vertices": [ 160 | { 161 | "x": 289.0, 162 | "y": 189.0 163 | }, 164 | { 165 | "x": 362.0, 166 | "y": 189.0 167 | }, 168 | { 169 | "x": 362.0, 170 | "y": 219.0 171 | }, 172 | { 173 | "x": 289.0, 174 | "y": 219.0 175 | } 176 | ] 177 | }, 178 | "inferText": "희블리", 179 | "inferConfidence": 0.9983, 180 | "type": "NORMAL", 181 | "lineBreak": false 182 | }, 183 | { 184 | "valueType": "ALL", 185 | "boundingPoly": { 186 | "vertices": [ 187 | { 188 | "x": 676.0, 189 | "y": 193.0 190 | }, 191 | { 192 | "x": 721.0, 193 | "y": 193.0 194 | }, 195 | { 196 | "x": 721.0, 197 | "y": 217.0 198 | }, 199 | { 200 | "x": 676.0, 201 | "y": 217.0 202 | } 203 | ] 204 | }, 205 | "inferText": "오후", 206 | "inferConfidence": 1.0, 207 | "type": "NORMAL", 208 | "lineBreak": false 209 | }, 210 | { 211 | "valueType": "ALL", 212 | "boundingPoly": { 213 | "vertices": [ 214 | { 215 | "x": 726.0, 216 | "y": 197.0 217 | }, 218 | { 219 | "x": 768.0, 220 | "y": 197.0 221 | }, 222 | { 223 | "x": 768.0, 224 | "y": 214.0 225 | }, 226 | { 227 | "x": 726.0, 228 | "y": 214.0 229 | } 230 | ] 231 | }, 232 | "inferText": "3:45", 233 | "inferConfidence": 0.9999, 234 | "type": "NORMAL", 235 | "lineBreak": true 236 | }, 237 | { 238 | "valueType": "ALL", 239 | "boundingPoly": { 240 | "vertices": [ 241 | { 242 | "x": 289.0, 243 | "y": 226.0 244 | }, 245 | { 246 | "x": 342.0, 247 | "y": 226.0 248 | }, 249 | { 250 | "x": 342.0, 251 | "y": 256.0 252 | }, 253 | { 254 | "x": 289.0, 255 | "y": 256.0 256 | } 257 | ] 258 | }, 259 | "inferText": "동화", 260 | "inferConfidence": 0.9999, 261 | "type": "NORMAL", 262 | "lineBreak": false 263 | }, 264 | { 265 | "valueType": "ALL", 266 | "boundingPoly": { 267 | "vertices": [ 268 | { 269 | "x": 346.0, 270 | "y": 226.0 271 | }, 272 | { 273 | "x": 396.0, 274 | "y": 226.0 275 | }, 276 | { 277 | "x": 396.0, 278 | "y": 255.0 279 | }, 280 | { 281 | "x": 346.0, 282 | "y": 255.0 283 | } 284 | ] 285 | }, 286 | "inferText": "말고", 287 | "inferConfidence": 1.0, 288 | "type": "NORMAL", 289 | "lineBreak": false 290 | }, 291 | { 292 | "valueType": "ALL", 293 | "boundingPoly": { 294 | "vertices": [ 295 | { 296 | "x": 743.0, 297 | "y": 237.0 298 | }, 299 | { 300 | "x": 758.0, 301 | "y": 237.0 302 | }, 303 | { 304 | "x": 758.0, 305 | "y": 257.0 306 | }, 307 | { 308 | "x": 743.0, 309 | "y": 257.0 310 | } 311 | ] 312 | }, 313 | "inferText": "2", 314 | "inferConfidence": 1.0, 315 | "type": "NORMAL", 316 | "lineBreak": true 317 | }, 318 | { 319 | "valueType": "ALL", 320 | "boundingPoly": { 321 | "vertices": [ 322 | { 323 | "x": 289.0, 324 | "y": 329.0 325 | }, 326 | { 327 | "x": 485.0, 328 | "y": 329.0 329 | }, 330 | { 331 | "x": 485.0, 332 | "y": 359.0 333 | }, 334 | { 335 | "x": 289.0, 336 | "y": 359.0 337 | } 338 | ] 339 | }, 340 | "inferText": "오빠라고불러다오", 341 | "inferConfidence": 0.9996, 342 | "type": "NORMAL", 343 | "lineBreak": false 344 | }, 345 | { 346 | "valueType": "ALL", 347 | "boundingPoly": { 348 | "vertices": [ 349 | { 350 | "x": 489.0, 351 | "y": 333.0 352 | }, 353 | { 354 | "x": 506.0, 355 | "y": 333.0 356 | }, 357 | { 358 | "x": 506.0, 359 | "y": 355.0 360 | }, 361 | { 362 | "x": 489.0, 363 | "y": 355.0 364 | } 365 | ] 366 | }, 367 | "inferText": "3", 368 | "inferConfidence": 1.0, 369 | "type": "NORMAL", 370 | "lineBreak": false 371 | }, 372 | { 373 | "valueType": "ALL", 374 | "boundingPoly": { 375 | "vertices": [ 376 | { 377 | "x": 676.0, 378 | "y": 333.0 379 | }, 380 | { 381 | "x": 722.0, 382 | "y": 333.0 383 | }, 384 | { 385 | "x": 722.0, 386 | "y": 359.0 387 | }, 388 | { 389 | "x": 676.0, 390 | "y": 359.0 391 | } 392 | ] 393 | }, 394 | "inferText": "오후", 395 | "inferConfidence": 1.0, 396 | "type": "NORMAL", 397 | "lineBreak": false 398 | }, 399 | { 400 | "valueType": "ALL", 401 | "boundingPoly": { 402 | "vertices": [ 403 | { 404 | "x": 726.0, 405 | "y": 336.0 406 | }, 407 | { 408 | "x": 768.0, 409 | "y": 336.0 410 | }, 411 | { 412 | "x": 768.0, 413 | "y": 354.0 414 | }, 415 | { 416 | "x": 726.0, 417 | "y": 354.0 418 | } 419 | ] 420 | }, 421 | "inferText": "3:43", 422 | "inferConfidence": 1.0, 423 | "type": "NORMAL", 424 | "lineBreak": true 425 | }, 426 | { 427 | "valueType": "ALL", 428 | "boundingPoly": { 429 | "vertices": [ 430 | { 431 | "x": 290.0, 432 | "y": 366.0 433 | }, 434 | { 435 | "x": 325.0, 436 | "y": 366.0 437 | }, 438 | { 439 | "x": 325.0, 440 | "y": 395.0 441 | }, 442 | { 443 | "x": 290.0, 444 | "y": 395.0 445 | } 446 | ] 447 | }, 448 | "inferText": "네,", 449 | "inferConfidence": 0.9999, 450 | "type": "NORMAL", 451 | "lineBreak": false 452 | }, 453 | { 454 | "valueType": "ALL", 455 | "boundingPoly": { 456 | "vertices": [ 457 | { 458 | "x": 325.0, 459 | "y": 366.0 460 | }, 461 | { 462 | "x": 379.0, 463 | "y": 366.0 464 | }, 465 | { 466 | "x": 379.0, 467 | "y": 396.0 468 | }, 469 | { 470 | "x": 325.0, 471 | "y": 396.0 472 | } 473 | ] 474 | }, 475 | "inferText": "저는", 476 | "inferConfidence": 0.9986, 477 | "type": "NORMAL", 478 | "lineBreak": false 479 | }, 480 | { 481 | "valueType": "ALL", 482 | "boundingPoly": { 483 | "vertices": [ 484 | { 485 | "x": 382.0, 486 | "y": 365.0 487 | }, 488 | { 489 | "x": 560.0, 490 | "y": 365.0 491 | }, 492 | { 493 | "x": 560.0, 494 | "y": 396.0 495 | }, 496 | { 497 | "x": 382.0, 498 | "y": 396.0 499 | } 500 | ] 501 | }, 502 | "inferText": "인공지능입니다.", 503 | "inferConfidence": 0.9999, 504 | "type": "NORMAL", 505 | "lineBreak": true 506 | }, 507 | { 508 | "valueType": "ALL", 509 | "boundingPoly": { 510 | "vertices": [ 511 | { 512 | "x": 289.0, 513 | "y": 454.0 514 | }, 515 | { 516 | "x": 366.0, 517 | "y": 454.0 518 | }, 519 | { 520 | "x": 366.0, 521 | "y": 486.0 522 | }, 523 | { 524 | "x": 289.0, 525 | "y": 486.0 526 | } 527 | ] 528 | }, 529 | "inferText": "한준구", 530 | "inferConfidence": 1.0, 531 | "type": "NORMAL", 532 | "lineBreak": false 533 | }, 534 | { 535 | "valueType": "ALL", 536 | "boundingPoly": { 537 | "vertices": [ 538 | { 539 | "x": 367.0, 540 | "y": 454.0 541 | }, 542 | { 543 | "x": 445.0, 544 | "y": 454.0 545 | }, 546 | { 547 | "x": 445.0, 548 | "y": 486.0 549 | }, 550 | { 551 | "x": 367.0, 552 | "y": 486.0 553 | } 554 | ] 555 | }, 556 | "inferText": "선생님", 557 | "inferConfidence": 1.0, 558 | "type": "NORMAL", 559 | "lineBreak": false 560 | }, 561 | { 562 | "valueType": "ALL", 563 | "boundingPoly": { 564 | "vertices": [ 565 | { 566 | "x": 448.0, 567 | "y": 455.0 568 | }, 569 | { 570 | "x": 499.0, 571 | "y": 455.0 572 | }, 573 | { 574 | "x": 499.0, 575 | "y": 484.0 576 | }, 577 | { 578 | "x": 448.0, 579 | "y": 484.0 580 | } 581 | ] 582 | }, 583 | "inferText": "옥천", 584 | "inferConfidence": 1.0, 585 | "type": "NORMAL", 586 | "lineBreak": false 587 | }, 588 | { 589 | "valueType": "ALL", 590 | "boundingPoly": { 591 | "vertices": [ 592 | { 593 | "x": 504.0, 594 | "y": 454.0 595 | }, 596 | { 597 | "x": 582.0, 598 | "y": 454.0 599 | }, 600 | { 601 | "x": 582.0, 602 | "y": 485.0 603 | }, 604 | { 605 | "x": 504.0, 606 | "y": 485.0 607 | } 608 | ] 609 | }, 610 | "inferText": "삼양초", 611 | "inferConfidence": 1.0, 612 | "type": "NORMAL", 613 | "lineBreak": true 614 | }, 615 | { 616 | "valueType": "ALL", 617 | "boundingPoly": { 618 | "vertices": [ 619 | { 620 | "x": 675.0, 621 | "y": 472.0 622 | }, 623 | { 624 | "x": 722.0, 625 | "y": 472.0 626 | }, 627 | { 628 | "x": 722.0, 629 | "y": 498.0 630 | }, 631 | { 632 | "x": 675.0, 633 | "y": 498.0 634 | } 635 | ] 636 | }, 637 | "inferText": "오후", 638 | "inferConfidence": 1.0, 639 | "type": "NORMAL", 640 | "lineBreak": false 641 | }, 642 | { 643 | "valueType": "ALL", 644 | "boundingPoly": { 645 | "vertices": [ 646 | { 647 | "x": 726.0, 648 | "y": 476.0 649 | }, 650 | { 651 | "x": 770.0, 652 | "y": 476.0 653 | }, 654 | { 655 | "x": 770.0, 656 | "y": 495.0 657 | }, 658 | { 659 | "x": 726.0, 660 | "y": 495.0 661 | } 662 | ] 663 | }, 664 | "inferText": "3:39", 665 | "inferConfidence": 1.0, 666 | "type": "NORMAL", 667 | "lineBreak": true 668 | }, 669 | { 670 | "valueType": "ALL", 671 | "boundingPoly": { 672 | "vertices": [ 673 | { 674 | "x": 290.0, 675 | "y": 492.0 676 | }, 677 | { 678 | "x": 340.0, 679 | "y": 492.0 680 | }, 681 | { 682 | "x": 340.0, 683 | "y": 521.0 684 | }, 685 | { 686 | "x": 290.0, 687 | "y": 521.0 688 | } 689 | ] 690 | }, 691 | "inferText": "그럼", 692 | "inferConfidence": 1.0, 693 | "type": "NORMAL", 694 | "lineBreak": false 695 | }, 696 | { 697 | "valueType": "ALL", 698 | "boundingPoly": { 699 | "vertices": [ 700 | { 701 | "x": 344.0, 702 | "y": 491.0 703 | }, 704 | { 705 | "x": 396.0, 706 | "y": 491.0 707 | }, 708 | { 709 | "x": 396.0, 710 | "y": 522.0 711 | }, 712 | { 713 | "x": 344.0, 714 | "y": 522.0 715 | } 716 | ] 717 | }, 718 | "inferText": "어떤", 719 | "inferConfidence": 1.0, 720 | "type": "NORMAL", 721 | "lineBreak": false 722 | }, 723 | { 724 | "valueType": "ALL", 725 | "boundingPoly": { 726 | "vertices": [ 727 | { 728 | "x": 401.0, 729 | "y": 491.0 730 | }, 731 | { 732 | "x": 502.0, 733 | "y": 491.0 734 | }, 735 | { 736 | "x": 502.0, 737 | "y": 523.0 738 | }, 739 | { 740 | "x": 401.0, 741 | "y": 523.0 742 | } 743 | ] 744 | }, 745 | "inferText": "출판사나", 746 | "inferConfidence": 1.0, 747 | "type": "NORMAL", 748 | "lineBreak": false 749 | }, 750 | { 751 | "valueType": "ALL", 752 | "boundingPoly": { 753 | "vertices": [ 754 | { 755 | "x": 505.0, 756 | "y": 491.0 757 | }, 758 | { 759 | "x": 580.0, 760 | "y": 491.0 761 | }, 762 | { 763 | "x": 580.0, 764 | "y": 523.0 765 | }, 766 | { 767 | "x": 505.0, 768 | "y": 523.0 769 | } 770 | ] 771 | }, 772 | "inferText": "기관에", 773 | "inferConfidence": 0.9995, 774 | "type": "NORMAL", 775 | "lineBreak": false 776 | }, 777 | { 778 | "valueType": "ALL", 779 | "boundingPoly": { 780 | "vertices": [ 781 | { 782 | "x": 584.0, 783 | "y": 491.0 784 | }, 785 | { 786 | "x": 637.0, 787 | "y": 491.0 788 | }, 789 | { 790 | "x": 637.0, 791 | "y": 522.0 792 | }, 793 | { 794 | "x": 584.0, 795 | "y": 522.0 796 | } 797 | ] 798 | }, 799 | "inferText": "제안", 800 | "inferConfidence": 1.0, 801 | "type": "NORMAL", 802 | "lineBreak": true 803 | }, 804 | { 805 | "valueType": "ALL", 806 | "boundingPoly": { 807 | "vertices": [ 808 | { 809 | "x": 289.0, 810 | "y": 522.0 811 | }, 812 | { 813 | "x": 365.0, 814 | "y": 522.0 815 | }, 816 | { 817 | "x": 365.0, 818 | "y": 551.0 819 | }, 820 | { 821 | "x": 289.0, 822 | "y": 551.0 823 | } 824 | ] 825 | }, 826 | "inferText": "해보는", 827 | "inferConfidence": 1.0, 828 | "type": "NORMAL", 829 | "lineBreak": false 830 | }, 831 | { 832 | "valueType": "ALL", 833 | "boundingPoly": { 834 | "vertices": [ 835 | { 836 | "x": 368.0, 837 | "y": 522.0 838 | }, 839 | { 840 | "x": 397.0, 841 | "y": 522.0 842 | }, 843 | { 844 | "x": 397.0, 845 | "y": 551.0 846 | }, 847 | { 848 | "x": 368.0, 849 | "y": 551.0 850 | } 851 | ] 852 | }, 853 | "inferText": "건", 854 | "inferConfidence": 1.0, 855 | "type": "NORMAL", 856 | "lineBreak": false 857 | }, 858 | { 859 | "valueType": "ALL", 860 | "boundingPoly": { 861 | "vertices": [ 862 | { 863 | "x": 401.0, 864 | "y": 522.0 865 | }, 866 | { 867 | "x": 466.0, 868 | "y": 522.0 869 | }, 870 | { 871 | "x": 466.0, 872 | "y": 551.0 873 | }, 874 | { 875 | "x": 401.0, 876 | "y": 551.0 877 | } 878 | ] 879 | }, 880 | "inferText": "어때?", 881 | "inferConfidence": 0.9997, 882 | "type": "NORMAL", 883 | "lineBreak": false 884 | }, 885 | { 886 | "valueType": "ALL", 887 | "boundingPoly": { 888 | "vertices": [ 889 | { 890 | "x": 467.0, 891 | "y": 522.0 892 | }, 893 | { 894 | "x": 521.0, 895 | "y": 522.0 896 | }, 897 | { 898 | "x": 521.0, 899 | "y": 552.0 900 | }, 901 | { 902 | "x": 467.0, 903 | "y": 552.0 904 | } 905 | ] 906 | }, 907 | "inferText": "좋은", 908 | "inferConfidence": 1.0, 909 | "type": "NORMAL", 910 | "lineBreak": false 911 | }, 912 | { 913 | "valueType": "ALL", 914 | "boundingPoly": { 915 | "vertices": [ 916 | { 917 | "x": 524.0, 918 | "y": 521.0 919 | }, 920 | { 921 | "x": 637.0, 922 | "y": 521.0 923 | }, 924 | { 925 | "x": 637.0, 926 | "y": 551.0 927 | }, 928 | { 929 | "x": 524.0, 930 | "y": 551.0 931 | } 932 | ] 933 | }, 934 | "inferText": "아이디어...", 935 | "inferConfidence": 0.9994, 936 | "type": "NORMAL", 937 | "lineBreak": true 938 | }, 939 | { 940 | "valueType": "ALL", 941 | "boundingPoly": { 942 | "vertices": [ 943 | { 944 | "x": 290.0, 945 | "y": 614.0 946 | }, 947 | { 948 | "x": 354.0, 949 | "y": 614.0 950 | }, 951 | { 952 | "x": 354.0, 953 | "y": 634.0 954 | }, 955 | { 956 | "x": 290.0, 957 | "y": 634.0 958 | } 959 | ] 960 | }, 961 | "inferText": "OPIM", 962 | "inferConfidence": 0.9963, 963 | "type": "NORMAL", 964 | "lineBreak": false 965 | }, 966 | { 967 | "valueType": "ALL", 968 | "boundingPoly": { 969 | "vertices": [ 970 | { 971 | "x": 360.0, 972 | "y": 613.0 973 | }, 974 | { 975 | "x": 392.0, 976 | "y": 613.0 977 | }, 978 | { 979 | "x": 392.0, 980 | "y": 636.0 981 | }, 982 | { 983 | "x": 360.0, 984 | "y": 636.0 985 | } 986 | ] 987 | }, 988 | "inferText": "67", 989 | "inferConfidence": 1.0, 990 | "type": "NORMAL", 991 | "lineBreak": false 992 | }, 993 | { 994 | "valueType": "ALL", 995 | "boundingPoly": { 996 | "vertices": [ 997 | { 998 | "x": 724.0, 999 | "y": 611.0 1000 | }, 1001 | { 1002 | "x": 769.0, 1003 | "y": 611.0 1004 | }, 1005 | { 1006 | "x": 769.0, 1007 | "y": 638.0 1008 | }, 1009 | { 1010 | "x": 724.0, 1011 | "y": 638.0 1012 | } 1013 | ] 1014 | }, 1015 | "inferText": "어제", 1016 | "inferConfidence": 1.0, 1017 | "type": "NORMAL", 1018 | "lineBreak": true 1019 | }, 1020 | { 1021 | "valueType": "ALL", 1022 | "boundingPoly": { 1023 | "vertices": [ 1024 | { 1025 | "x": 53.0, 1026 | "y": 630.0 1027 | }, 1028 | { 1029 | "x": 82.0, 1030 | "y": 630.0 1031 | }, 1032 | { 1033 | "x": 82.0, 1034 | "y": 662.0 1035 | }, 1036 | { 1037 | "x": 53.0, 1038 | "y": 662.0 1039 | } 1040 | ] 1041 | }, 1042 | "inferText": "A", 1043 | "inferConfidence": 0.8399, 1044 | "type": "NORMAL", 1045 | "lineBreak": true 1046 | }, 1047 | { 1048 | "valueType": "ALL", 1049 | "boundingPoly": { 1050 | "vertices": [ 1051 | { 1052 | "x": 289.0, 1053 | "y": 645.0 1054 | }, 1055 | { 1056 | "x": 364.0, 1057 | "y": 645.0 1058 | }, 1059 | { 1060 | "x": 364.0, 1061 | "y": 675.0 1062 | }, 1063 | { 1064 | "x": 289.0, 1065 | "y": 675.0 1066 | } 1067 | ] 1068 | }, 1069 | "inferText": "사진을", 1070 | "inferConfidence": 1.0, 1071 | "type": "NORMAL", 1072 | "lineBreak": false 1073 | }, 1074 | { 1075 | "valueType": "ALL", 1076 | "boundingPoly": { 1077 | "vertices": [ 1078 | { 1079 | "x": 368.0, 1080 | "y": 645.0 1081 | }, 1082 | { 1083 | "x": 499.0, 1084 | "y": 645.0 1085 | }, 1086 | { 1087 | "x": 499.0, 1088 | "y": 676.0 1089 | }, 1090 | { 1091 | "x": 368.0, 1092 | "y": 676.0 1093 | } 1094 | ] 1095 | }, 1096 | "inferText": "보냈습니다.", 1097 | "inferConfidence": 1.0, 1098 | "type": "NORMAL", 1099 | "lineBreak": true 1100 | }, 1101 | { 1102 | "valueType": "ALL", 1103 | "boundingPoly": { 1104 | "vertices": [ 1105 | { 1106 | "x": 297.0, 1107 | "y": 755.0 1108 | }, 1109 | { 1110 | "x": 317.0, 1111 | "y": 755.0 1112 | }, 1113 | { 1114 | "x": 317.0, 1115 | "y": 773.0 1116 | }, 1117 | { 1118 | "x": 297.0, 1119 | "y": 773.0 1120 | } 1121 | ] 1122 | }, 1123 | "inferText": "나", 1124 | "inferConfidence": 1.0, 1125 | "type": "NORMAL", 1126 | "lineBreak": false 1127 | }, 1128 | { 1129 | "valueType": "ALL", 1130 | "boundingPoly": { 1131 | "vertices": [ 1132 | { 1133 | "x": 325.0, 1134 | "y": 749.0 1135 | }, 1136 | { 1137 | "x": 402.0, 1138 | "y": 749.0 1139 | }, 1140 | { 1141 | "x": 402.0, 1142 | "y": 780.0 1143 | }, 1144 | { 1145 | "x": 325.0, 1146 | "y": 780.0 1147 | } 1148 | ] 1149 | }, 1150 | "inferText": "이태희", 1151 | "inferConfidence": 0.9998, 1152 | "type": "NORMAL", 1153 | "lineBreak": false 1154 | }, 1155 | { 1156 | "valueType": "ALL", 1157 | "boundingPoly": { 1158 | "vertices": [ 1159 | { 1160 | "x": 402.0, 1161 | "y": 749.0 1162 | }, 1163 | { 1164 | "x": 475.0, 1165 | "y": 749.0 1166 | }, 1167 | { 1168 | "x": 475.0, 1169 | "y": 781.0 1170 | }, 1171 | { 1172 | "x": 402.0, 1173 | "y": 781.0 1174 | } 1175 | ] 1176 | }, 1177 | "inferText": "(빵형)", 1178 | "inferConfidence": 0.9962, 1179 | "type": "NORMAL", 1180 | "lineBreak": false 1181 | }, 1182 | { 1183 | "valueType": "ALL", 1184 | "boundingPoly": { 1185 | "vertices": [ 1186 | { 1187 | "x": 723.0, 1188 | "y": 751.0 1189 | }, 1190 | { 1191 | "x": 769.0, 1192 | "y": 749.0 1193 | }, 1194 | { 1195 | "x": 770.0, 1196 | "y": 778.0 1197 | }, 1198 | { 1199 | "x": 724.0, 1200 | "y": 780.0 1201 | } 1202 | ] 1203 | }, 1204 | "inferText": "어제", 1205 | "inferConfidence": 0.9999, 1206 | "type": "NORMAL", 1207 | "lineBreak": true 1208 | }, 1209 | { 1210 | "valueType": "ALL", 1211 | "boundingPoly": { 1212 | "vertices": [ 1213 | { 1214 | "x": 532.0, 1215 | "y": 792.0 1216 | }, 1217 | { 1218 | "x": 539.0, 1219 | "y": 792.0 1220 | }, 1221 | { 1222 | "x": 539.0, 1223 | "y": 799.0 1224 | }, 1225 | { 1226 | "x": 532.0, 1227 | "y": 799.0 1228 | } 1229 | ] 1230 | }, 1231 | "inferText": "/", 1232 | "inferConfidence": 0.8409, 1233 | "type": "NORMAL", 1234 | "lineBreak": true 1235 | }, 1236 | { 1237 | "valueType": "ALL", 1238 | "boundingPoly": { 1239 | "vertices": [ 1240 | { 1241 | "x": 209.0, 1242 | "y": 848.0 1243 | }, 1244 | { 1245 | "x": 234.0, 1246 | "y": 847.0 1247 | }, 1248 | { 1249 | "x": 234.0, 1250 | "y": 854.0 1251 | }, 1252 | { 1253 | "x": 210.0, 1254 | "y": 855.0 1255 | } 1256 | ] 1257 | }, 1258 | "inferText": "건축'입니다", 1259 | "inferConfidence": 0.8235, 1260 | "type": "NORMAL", 1261 | "lineBreak": true 1262 | }, 1263 | { 1264 | "valueType": "ALL", 1265 | "boundingPoly": { 1266 | "vertices": [ 1267 | { 1268 | "x": 205.0, 1269 | "y": 858.0 1270 | }, 1271 | { 1272 | "x": 247.0, 1273 | "y": 858.0 1274 | }, 1275 | { 1276 | "x": 247.0, 1277 | "y": 869.0 1278 | }, 1279 | { 1280 | "x": 205.0, 1281 | "y": 869.0 1282 | } 1283 | ] 1284 | }, 1285 | "inferText": "전원주택의", 1286 | "inferConfidence": 0.9996, 1287 | "type": "NORMAL", 1288 | "lineBreak": false 1289 | }, 1290 | { 1291 | "valueType": "ALL", 1292 | "boundingPoly": { 1293 | "vertices": [ 1294 | { 1295 | "x": 247.0, 1296 | "y": 858.0 1297 | }, 1298 | { 1299 | "x": 265.0, 1300 | "y": 858.0 1301 | }, 1302 | { 1303 | "x": 265.0, 1304 | "y": 869.0 1305 | }, 1306 | { 1307 | "x": 247.0, 1308 | "y": 869.0 1309 | } 1310 | ] 1311 | }, 1312 | "inferText": "명가", 1313 | "inferConfidence": 0.9859, 1314 | "type": "NORMAL", 1315 | "lineBreak": false 1316 | }, 1317 | { 1318 | "valueType": "ALL", 1319 | "boundingPoly": { 1320 | "vertices": [ 1321 | { 1322 | "x": 356.0, 1323 | "y": 849.0 1324 | }, 1325 | { 1326 | "x": 464.0, 1327 | "y": 849.0 1328 | }, 1329 | { 1330 | "x": 464.0, 1331 | "y": 883.0 1332 | }, 1333 | { 1334 | "x": 356.0, 1335 | "y": 883.0 1336 | } 1337 | ] 1338 | }, 1339 | "inferText": "대한민국", 1340 | "inferConfidence": 0.9999, 1341 | "type": "NORMAL", 1342 | "lineBreak": false 1343 | }, 1344 | { 1345 | "valueType": "ALL", 1346 | "boundingPoly": { 1347 | "vertices": [ 1348 | { 1349 | "x": 466.0, 1350 | "y": 849.0 1351 | }, 1352 | { 1353 | "x": 575.0, 1354 | "y": 849.0 1355 | }, 1356 | { 1357 | "x": 575.0, 1358 | "y": 882.0 1359 | }, 1360 | { 1361 | "x": 466.0, 1362 | "y": 882.0 1363 | } 1364 | ] 1365 | }, 1366 | "inferText": "전원주택", 1367 | "inferConfidence": 1.0, 1368 | "type": "NORMAL", 1369 | "lineBreak": false 1370 | }, 1371 | { 1372 | "valueType": "ALL", 1373 | "boundingPoly": { 1374 | "vertices": [ 1375 | { 1376 | "x": 580.0, 1377 | "y": 851.0 1378 | }, 1379 | { 1380 | "x": 662.0, 1381 | "y": 851.0 1382 | }, 1383 | { 1384 | "x": 662.0, 1385 | "y": 882.0 1386 | }, 1387 | { 1388 | "x": 580.0, 1389 | "y": 882.0 1390 | } 1391 | ] 1392 | }, 1393 | "inferText": "브랜드", 1394 | "inferConfidence": 0.9999, 1395 | "type": "NORMAL", 1396 | "lineBreak": false 1397 | }, 1398 | { 1399 | "valueType": "ALL", 1400 | "boundingPoly": { 1401 | "vertices": [ 1402 | { 1403 | "x": 664.0, 1404 | "y": 851.0 1405 | }, 1406 | { 1407 | "x": 735.0, 1408 | "y": 851.0 1409 | }, 1410 | { 1411 | "x": 735.0, 1412 | "y": 881.0 1413 | }, 1414 | { 1415 | "x": 664.0, 1416 | "y": 881.0 1417 | } 1418 | ] 1419 | }, 1420 | "inferText": "\"로하", 1421 | "inferConfidence": 0.9998, 1422 | "type": "NORMAL", 1423 | "lineBreak": true 1424 | }, 1425 | { 1426 | "valueType": "ALL", 1427 | "boundingPoly": { 1428 | "vertices": [ 1429 | { 1430 | "x": 137.0, 1431 | "y": 869.0 1432 | }, 1433 | { 1434 | "x": 194.0, 1435 | "y": 869.0 1436 | }, 1437 | { 1438 | "x": 194.0, 1439 | "y": 881.0 1440 | }, 1441 | { 1442 | "x": 137.0, 1443 | "y": 881.0 1444 | } 1445 | ] 1446 | }, 1447 | "inferText": "(주)로하스홈", 1448 | "inferConfidence": 0.9367, 1449 | "type": "NORMAL", 1450 | "lineBreak": false 1451 | }, 1452 | { 1453 | "valueType": "ALL", 1454 | "boundingPoly": { 1455 | "vertices": [ 1456 | { 1457 | "x": 203.0, 1458 | "y": 867.0 1459 | }, 1460 | { 1461 | "x": 267.0, 1462 | "y": 867.0 1463 | }, 1464 | { 1465 | "x": 267.0, 1466 | "y": 880.0 1467 | }, 1468 | { 1469 | "x": 203.0, 1470 | "y": 880.0 1471 | } 1472 | ] 1473 | }, 1474 | "inferText": "1661-5399", 1475 | "inferConfidence": 0.9998, 1476 | "type": "NORMAL", 1477 | "lineBreak": true 1478 | }, 1479 | { 1480 | "valueType": "ALL", 1481 | "boundingPoly": { 1482 | "vertices": [ 1483 | { 1484 | "x": 357.0, 1485 | "y": 887.0 1486 | }, 1487 | { 1488 | "x": 423.0, 1489 | "y": 887.0 1490 | }, 1491 | { 1492 | "x": 423.0, 1493 | "y": 917.0 1494 | }, 1495 | { 1496 | "x": 357.0, 1497 | "y": 917.0 1498 | } 1499 | ] 1500 | }, 1501 | "inferText": "스홈\"", 1502 | "inferConfidence": 0.9989, 1503 | "type": "NORMAL", 1504 | "lineBreak": true 1505 | }, 1506 | { 1507 | "valueType": "ALL", 1508 | "boundingPoly": { 1509 | "vertices": [ 1510 | { 1511 | "x": 357.0, 1512 | "y": 926.0 1513 | }, 1514 | { 1515 | "x": 448.0, 1516 | "y": 926.0 1517 | }, 1518 | { 1519 | "x": 448.0, 1520 | "y": 953.0 1521 | }, 1522 | { 1523 | "x": 357.0, 1524 | "y": 953.0 1525 | } 1526 | ] 1527 | }, 1528 | "inferText": "로하스홈", 1529 | "inferConfidence": 0.995, 1530 | "type": "NORMAL", 1531 | "lineBreak": true 1532 | } 1533 | ] 1534 | } 1535 | ] 1536 | } --------------------------------------------------------------------------------