|
@@ -22,7 +22,7 @@ def create_adjustment_section(structure):
|
|
|
# 行操作, 列操作
|
|
# 行操作, 列操作
|
|
|
adjustment_action = st.radio(
|
|
adjustment_action = st.radio(
|
|
|
"行&列操作",
|
|
"行&列操作",
|
|
|
- ["调整横线", "添加横线", "删除横线", "调整竖线", "添加竖线", "删除竖线"],
|
|
|
|
|
|
|
+ ["调整横线", "添加横线", "删除横线", "调整竖线", "添加竖线", "删除竖线", "微调旋转"],
|
|
|
horizontal=True,
|
|
horizontal=True,
|
|
|
index=None,
|
|
index=None,
|
|
|
label_visibility="collapsed",
|
|
label_visibility="collapsed",
|
|
@@ -132,7 +132,6 @@ def create_adjustment_section(structure):
|
|
|
if idx not in structure['modified_v_lines']:
|
|
if idx not in structure['modified_v_lines']:
|
|
|
structure['modified_v_lines'].append(idx)
|
|
structure['modified_v_lines'].append(idx)
|
|
|
_update_column_intervals(structure)
|
|
_update_column_intervals(structure)
|
|
|
- _update_column_intervals(structure)
|
|
|
|
|
clear_table_image_cache()
|
|
clear_table_image_cache()
|
|
|
adjusted = True
|
|
adjusted = True
|
|
|
st.success(f"✅ 新增竖线 X={new_v_x}")
|
|
st.success(f"✅ 新增竖线 X={new_v_x}")
|
|
@@ -153,6 +152,54 @@ def create_adjustment_section(structure):
|
|
|
adjusted = True
|
|
adjusted = True
|
|
|
st.success(f"✅ 已删除 {len(to_delete)} 条竖线")
|
|
st.success(f"✅ 已删除 {len(to_delete)} 条竖线")
|
|
|
|
|
|
|
|
|
|
+ elif adjustment_action == "微调旋转":
|
|
|
|
|
+ st.info("📐 微调图片的旋转角度 (基于当前角度), 正值逆时针旋转,负值顺时针旋转")
|
|
|
|
|
+
|
|
|
|
|
+ if 'generator' in st.session_state:
|
|
|
|
|
+ generator = st.session_state.generator
|
|
|
|
|
+ current_skew = generator.ocr_data.get('skew_angle', 0.0)
|
|
|
|
|
+ original_skew = generator.ocr_data.get('original_skew_angle', 0.0)
|
|
|
|
|
+
|
|
|
|
|
+ st.markdown(f"""
|
|
|
|
|
+ **当前总倾斜校正:** `{current_skew:.2f}°` -- *(原始文件读取: `{original_skew:.2f}°`)*
|
|
|
|
|
+ """)
|
|
|
|
|
+
|
|
|
|
|
+ col1, col2 = st.columns([1, 1], width=300, gap="small")
|
|
|
|
|
+ with col1:
|
|
|
|
|
+ delta_angle = st.number_input(
|
|
|
|
|
+ "旋转偏移量 (度)",
|
|
|
|
|
+ min_value=-10.0,
|
|
|
|
|
+ max_value=10.0,
|
|
|
|
|
+ value=0.0,
|
|
|
|
|
+ step=0.01,
|
|
|
|
|
+ format="%.2f",
|
|
|
|
|
+ help="正值逆时针旋转,负值顺时针旋转",
|
|
|
|
|
+ label_visibility="collapsed",
|
|
|
|
|
+ key="rotate_delta_input"
|
|
|
|
|
+ )
|
|
|
|
|
+ with col2:
|
|
|
|
|
+ if st.button("🔄 应用", key="apply_rotate_btn"):
|
|
|
|
|
+ if delta_angle != 0:
|
|
|
|
|
+ # 更新 skew_angle
|
|
|
|
|
+ generator.ocr_data['skew_angle'] = current_skew + delta_angle
|
|
|
|
|
+
|
|
|
|
|
+ with st.spinner("正在重新校正图片..."):
|
|
|
|
|
+ # 强制重新校正
|
|
|
|
|
+ corrected_image, _ = generator.correct_skew(force=True)
|
|
|
|
|
+ st.session_state.image = corrected_image
|
|
|
|
|
+
|
|
|
|
|
+ # 清除缓存
|
|
|
|
|
+ clear_table_image_cache()
|
|
|
|
|
+ adjusted = True
|
|
|
|
|
+
|
|
|
|
|
+ # 标记需要重新分析结构
|
|
|
|
|
+ st.session_state.need_reanalysis = True
|
|
|
|
|
+
|
|
|
|
|
+ st.success(f"✅ 已应用旋转 {delta_angle}°")
|
|
|
|
|
+ st.rerun()
|
|
|
|
|
+ else:
|
|
|
|
|
+ st.warning("⚠️ 无法获取 TableLineGenerator 实例")
|
|
|
|
|
+
|
|
|
return adjusted
|
|
return adjusted
|
|
|
|
|
|
|
|
|
|
|