LLDDWW Claude commited on
Commit
39446f7
ยท
1 Parent(s): 7138a91

refactor: simplify to OCR-only output

Browse files

- Remove LLM medication extraction step
- Show only raw OCR text output
- Simplify UI to single output panel

๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

Files changed (1) hide show
  1. app.py +16 -26
app.py CHANGED
@@ -172,20 +172,18 @@ def format_results(extracted_text: str, medications: List[str]) -> Tuple[str, st
172
 
173
 
174
  def run_analysis(image: Optional[Image.Image], progress=gr.Progress()):
175
- """๋ฉ”์ธ ๋ถ„์„ ํŒŒ์ดํ”„๋ผ์ธ: OCR โ†’ LLM"""
176
  if image is None:
177
- return "๐Ÿ“ท ์•ฝ ๋ด‰ํˆฌ๋‚˜ ์ฒ˜๋ฐฉ์ „ ์‚ฌ์ง„์„ ์—…๋กœ๋“œํ•ด์ฃผ์„ธ์š”.", ""
178
 
179
- progress(0.2, desc="๐Ÿ“ธ Stage 1: OCR ํ…์ŠคํŠธ ์ถ”์ถœ ์ค‘...")
180
- progress(0.6, desc="๐Ÿค– Stage 2: LLM ์•ฝ๋ฌผ ๋ถ„์„ ์ค‘...")
181
 
182
- extracted_text, medications = extract_medication_names(image)
183
-
184
- progress(0.9, desc="๐Ÿ“ ๊ฒฐ๊ณผ ์ •๋ฆฌ ์ค‘...")
185
- text_output, med_output = format_results(extracted_text, medications)
186
-
187
- progress(1.0, desc="โœ… ์™„๋ฃŒ!")
188
- return text_output, med_output
189
 
190
 
191
  # ์‹ฌํ”Œํ•œ CSS
@@ -283,31 +281,23 @@ with gr.Blocks(theme=gr.themes.Soft(), css=CUSTOM_CSS) as demo:
283
  with gr.Column(elem_classes=["upload-section"]):
284
  gr.Markdown("### ๐Ÿ“ธ ์‚ฌ์ง„ ์—…๋กœ๋“œ")
285
  image_input = gr.Image(type="pil", label="์•ฝ๋ด‰ํˆฌ ๋˜๋Š” ์ฒ˜๋ฐฉ์ „ ์‚ฌ์ง„", height=350)
286
- analyze_button = gr.Button("๐Ÿ” 2๋‹จ๊ณ„ ๋ถ„์„ ์‹œ์ž‘ (OCR โ†’ LLM)", elem_classes=["analyze-btn"], size="lg")
287
 
288
- with gr.Row():
289
- with gr.Column(elem_classes=["result-section"]):
290
- gr.Markdown("### ๐Ÿ“‹ Stage 1: OCR ๊ฒฐ๊ณผ")
291
- text_output = gr.Markdown("OCR๋กœ ์ถ”์ถœ๋œ ์ „์ฒด ํ…์ŠคํŠธ๊ฐ€ ์—ฌ๊ธฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.")
292
-
293
- with gr.Column(elem_classes=["result-section"]):
294
- gr.Markdown("### ๐Ÿ“‹ Stage 2: LLM ๋ถ„์„ ๊ฒฐ๊ณผ")
295
- med_output = gr.Markdown("LLM์ด ๋ถ„์„ํ•œ ์•ฝ๋ฌผ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์—ฌ๊ธฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.")
296
 
297
  analyze_button.click(
298
  run_analysis,
299
  inputs=image_input,
300
- outputs=[text_output, med_output],
301
  )
302
 
303
  gr.Markdown("""
304
  ---
305
 
306
- **โ„น๏ธ 2๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ**
307
- - **Stage 1**: Korean TrOCR (ddobokki/ko-trocr) - ์ด๋ฏธ์ง€์—์„œ ํ•œ๊ตญ์–ด ํ…์ŠคํŠธ ์ถ”์ถœ
308
- - **Stage 2**: Qwen2.5 7B (LLM) - ์ถ”์ถœ๋œ ํ…์ŠคํŠธ์—์„œ ์•ฝ ์ด๋ฆ„๋งŒ ์‹๋ณ„
309
-
310
- ์‹ค์ œ ๋ณต์•ฝ์€ ์˜์‚ฌยท์•ฝ์‚ฌ์˜ ์ง€์‹œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.
311
  """)
312
 
313
  if __name__ == "__main__":
 
172
 
173
 
174
  def run_analysis(image: Optional[Image.Image], progress=gr.Progress()):
175
+ """๋ฉ”์ธ ๋ถ„์„ ํŒŒ์ดํ”„๋ผ์ธ: OCR๋งŒ ์‹คํ–‰"""
176
  if image is None:
177
+ return "๐Ÿ“ท ์•ฝ ๋ด‰ํˆฌ๋‚˜ ์ฒ˜๋ฐฉ์ „ ์‚ฌ์ง„์„ ์—…๋กœ๋“œํ•ด์ฃผ์„ธ์š”."
178
 
179
+ progress(0.5, desc="๐Ÿ“ธ OCR ํ…์ŠคํŠธ ์ถ”์ถœ ์ค‘...")
 
180
 
181
+ try:
182
+ extracted_text = extract_text_from_image(image)
183
+ progress(1.0, desc="โœ… ์™„๋ฃŒ!")
184
+ return f"### ๐Ÿ“„ OCR ์ถ”์ถœ ๊ฒฐ๊ณผ\n\n```\n{extracted_text}\n```"
185
+ except Exception as e:
186
+ return f"### โš ๏ธ ์˜ค๋ฅ˜ ๋ฐœ์ƒ\n\n{str(e)}"
 
187
 
188
 
189
  # ์‹ฌํ”Œํ•œ CSS
 
281
  with gr.Column(elem_classes=["upload-section"]):
282
  gr.Markdown("### ๐Ÿ“ธ ์‚ฌ์ง„ ์—…๋กœ๋“œ")
283
  image_input = gr.Image(type="pil", label="์•ฝ๋ด‰ํˆฌ ๋˜๋Š” ์ฒ˜๋ฐฉ์ „ ์‚ฌ์ง„", height=350)
284
+ analyze_button = gr.Button("๐Ÿ” OCR ํ…์ŠคํŠธ ์ถ”์ถœ", elem_classes=["analyze-btn"], size="lg")
285
 
286
+ with gr.Column(elem_classes=["result-section"]):
287
+ gr.Markdown("### ๐Ÿ“‹ OCR ์ถ”์ถœ ๊ฒฐ๊ณผ")
288
+ text_output = gr.Markdown("OCR๋กœ ์ถ”์ถœ๋œ ์ „์ฒด ํ…์ŠคํŠธ๊ฐ€ ์—ฌ๊ธฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.")
 
 
 
 
 
289
 
290
  analyze_button.click(
291
  run_analysis,
292
  inputs=image_input,
293
+ outputs=text_output,
294
  )
295
 
296
  gr.Markdown("""
297
  ---
298
 
299
+ **โ„น๏ธ OCR ๋ชจ๋ธ**
300
+ - Korean TrOCR (ddobokki/ko-trocr) - ํ•œ๊ตญ์–ด ํ…์ŠคํŠธ ์ธ์‹์— ์ตœ์ ํ™”๋œ ๋ชจ๋ธ
 
 
 
301
  """)
302
 
303
  if __name__ == "__main__":