Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +21 -6
src/streamlit_app.py
CHANGED
|
@@ -319,7 +319,6 @@ with col2:
|
|
| 319 |
st.markdown(f"**Current:** <span style='color:{field_color}'>β</span> {display_field_name}", unsafe_allow_html=True)
|
| 320 |
|
| 321 |
# ========== ZOOM CONTROLS (NOW ON RHS) ==========
|
| 322 |
-
st.markdown("---")
|
| 323 |
st.markdown("#### π Zoom")
|
| 324 |
|
| 325 |
current_zoom = st.session_state.zoom_values[selected_name]
|
|
@@ -371,13 +370,21 @@ with col2:
|
|
| 371 |
st.caption(f"Original: {pil_image.width}Γ{pil_image.height}")
|
| 372 |
|
| 373 |
# ========== OCR & VALUE SECTION ==========
|
| 374 |
-
st.markdown("---")
|
| 375 |
st.markdown("#### βοΈ OCR & Value")
|
| 376 |
|
| 377 |
current_rect_orig = st.session_state.field_rects_orig[selected_name].get(storage_field_name)
|
| 378 |
current_val = st.session_state.field_values[selected_name].get(storage_field_name, "")
|
|
|
|
|
|
|
|
|
|
| 379 |
|
| 380 |
-
new_val = st.text_area(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 381 |
|
| 382 |
col_btn1, col_btn2, col_btn3 = st.columns(3)
|
| 383 |
|
|
@@ -398,6 +405,7 @@ with col2:
|
|
| 398 |
text = pytesseract.image_to_string(crop, config="--psm 6").strip()
|
| 399 |
if text:
|
| 400 |
st.session_state.field_values[selected_name][storage_field_name] = text
|
|
|
|
| 401 |
st.success(f"OCR: {text}")
|
| 402 |
else:
|
| 403 |
st.warning("Empty result")
|
|
@@ -428,7 +436,6 @@ with col2:
|
|
| 428 |
st.write(f" {lif}: {v}")
|
| 429 |
|
| 430 |
# ========== EXPORT SECTION ==========
|
| 431 |
-
st.markdown("---")
|
| 432 |
st.markdown("#### π€ JSONL Export")
|
| 433 |
|
| 434 |
# Export ALL labeled remittances
|
|
@@ -540,6 +547,8 @@ with col1:
|
|
| 540 |
new_rect_orig = display_to_orig(new_rect_display, scale)
|
| 541 |
new_rect_orig["stroke"] = field_color
|
| 542 |
st.session_state.field_rects_orig[selected_name][storage_field_name] = new_rect_orig
|
|
|
|
|
|
|
| 543 |
|
| 544 |
# Auto-run OCR
|
| 545 |
x1 = max(0, int(new_rect_orig["left"]))
|
|
@@ -553,8 +562,14 @@ with col1:
|
|
| 553 |
text = pytesseract.image_to_string(crop, config="--psm 6").strip()
|
| 554 |
if text:
|
| 555 |
st.session_state.field_values[selected_name][storage_field_name] = text
|
|
|
|
|
|
|
| 556 |
st.toast(f"β
OCR: {text[:50]}{'...' if len(text) > 50 else ''}")
|
| 557 |
else:
|
| 558 |
-
st.toast(
|
| 559 |
except Exception:
|
| 560 |
-
st.toast(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 319 |
st.markdown(f"**Current:** <span style='color:{field_color}'>β</span> {display_field_name}", unsafe_allow_html=True)
|
| 320 |
|
| 321 |
# ========== ZOOM CONTROLS (NOW ON RHS) ==========
|
|
|
|
| 322 |
st.markdown("#### π Zoom")
|
| 323 |
|
| 324 |
current_zoom = st.session_state.zoom_values[selected_name]
|
|
|
|
| 370 |
st.caption(f"Original: {pil_image.width}Γ{pil_image.height}")
|
| 371 |
|
| 372 |
# ========== OCR & VALUE SECTION ==========
|
|
|
|
| 373 |
st.markdown("#### βοΈ OCR & Value")
|
| 374 |
|
| 375 |
current_rect_orig = st.session_state.field_rects_orig[selected_name].get(storage_field_name)
|
| 376 |
current_val = st.session_state.field_values[selected_name].get(storage_field_name, "")
|
| 377 |
+
value_state_key = f"value_{selected_name}_{storage_field_name}"
|
| 378 |
+
if value_state_key not in st.session_state:
|
| 379 |
+
st.session_state[value_state_key] = current_val
|
| 380 |
|
| 381 |
+
new_val = st.text_area(
|
| 382 |
+
"Value (auto-filled by OCR)",
|
| 383 |
+
key=value_state_key,
|
| 384 |
+
height=80,
|
| 385 |
+
label_visibility="collapsed",
|
| 386 |
+
placeholder="Value (auto-filled by OCR)",
|
| 387 |
+
)
|
| 388 |
|
| 389 |
col_btn1, col_btn2, col_btn3 = st.columns(3)
|
| 390 |
|
|
|
|
| 405 |
text = pytesseract.image_to_string(crop, config="--psm 6").strip()
|
| 406 |
if text:
|
| 407 |
st.session_state.field_values[selected_name][storage_field_name] = text
|
| 408 |
+
st.session_state[value_state_key] = text
|
| 409 |
st.success(f"OCR: {text}")
|
| 410 |
else:
|
| 411 |
st.warning("Empty result")
|
|
|
|
| 436 |
st.write(f" {lif}: {v}")
|
| 437 |
|
| 438 |
# ========== EXPORT SECTION ==========
|
|
|
|
| 439 |
st.markdown("#### π€ JSONL Export")
|
| 440 |
|
| 441 |
# Export ALL labeled remittances
|
|
|
|
| 547 |
new_rect_orig = display_to_orig(new_rect_display, scale)
|
| 548 |
new_rect_orig["stroke"] = field_color
|
| 549 |
st.session_state.field_rects_orig[selected_name][storage_field_name] = new_rect_orig
|
| 550 |
+
# bump rect version so canvas resets to only newest rect for this field
|
| 551 |
+
st.session_state.rect_version[selected_name] += 1
|
| 552 |
|
| 553 |
# Auto-run OCR
|
| 554 |
x1 = max(0, int(new_rect_orig["left"]))
|
|
|
|
| 562 |
text = pytesseract.image_to_string(crop, config="--psm 6").strip()
|
| 563 |
if text:
|
| 564 |
st.session_state.field_values[selected_name][storage_field_name] = text
|
| 565 |
+
value_state_key = f"value_{selected_name}_{storage_field_name}"
|
| 566 |
+
st.session_state[value_state_key] = text
|
| 567 |
st.toast(f"β
OCR: {text[:50]}{'...' if len(text) > 50 else ''}")
|
| 568 |
else:
|
| 569 |
+
st.toast("β
Rectangle saved (no text detected)")
|
| 570 |
except Exception:
|
| 571 |
+
st.toast("β
Rectangle saved")
|
| 572 |
+
else:
|
| 573 |
+
st.toast("β
Rectangle saved")
|
| 574 |
+
# force rerun so text area and canvas refresh with latest data
|
| 575 |
+
st.experimental_rerun()
|