| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- """
- 模式设置(新建/编辑)
- """
- import streamlit as st
- from PIL import Image
- from typing import Dict, Tuple
- import sys
- from pathlib import Path
- # 添加父目录到路径
- sys.path.insert(0, str(Path(__file__).parent.parent))
- try:
- from ..table_line_generator import TableLineGenerator
- except ImportError:
- from table_line_generator import TableLineGenerator
- from .display_controls import create_display_settings_section, create_undo_redo_section
- from .analysis_controls import create_analysis_section
- def setup_new_annotation_mode(
- ocr_data: list,
- image: Image.Image,
- display_config: Dict
- ) -> Tuple:
- """
- 设置新建标注模式
-
- Returns:
- (generator, structure, undo_stack, line_width, display_mode, zoom_level, show_line_numbers)
- """
- # 🔑 获取当前工具类型
- tool = st.session_state.get('current_tool', 'ppstructv3')
-
- # 初始化生成器
- if 'generator' not in st.session_state:
- st.session_state.generator = TableLineGenerator(image, ocr_data)
-
- # 🆕 自动校正倾斜和旋转
- corrected_image, angle = st.session_state.generator.correct_skew()
-
- # 获取角度信息
- ocr_data_dict = st.session_state.generator.ocr_data
- image_rotation_angle = ocr_data_dict.get('image_rotation_angle', 0.0) if isinstance(ocr_data_dict, dict) else 0.0
- skew_angle = ocr_data_dict.get('skew_angle', 0.0) if isinstance(ocr_data_dict, dict) else 0.0
-
- if abs(skew_angle) > 0.1 or image_rotation_angle != 0:
- st.info(f"🔄 自动校正: 旋转={image_rotation_angle}°, 倾斜={skew_angle:.2f}°")
- # 更新 session_state 中的图片
- st.session_state.image = corrected_image
-
- # 分析控件
- structure = create_analysis_section(
- st.session_state.generator,
- tool=tool # 🔑 传入工具类型
- )
-
- # 显示控件
- line_width, display_mode, zoom_level, show_line_numbers = create_display_settings_section(
- display_config
- )
-
- # 撤销/重做
- undo_stack = []
-
- return (
- st.session_state.generator,
- structure,
- undo_stack,
- line_width,
- display_mode,
- zoom_level,
- show_line_numbers
- )
- def setup_edit_annotation_mode(
- structure: Dict,
- image: Image.Image,
- display_config: Dict
- ) -> Tuple:
- """
- 设置编辑标注模式
-
- Returns:
- (image, line_width, display_mode, zoom_level, show_line_numbers)
- """
- # 显示控件
- line_width, display_mode, zoom_level, show_line_numbers = create_display_settings_section(
- display_config
- )
-
- # 撤销/重做控件
- create_undo_redo_section()
-
- return (
- image,
- line_width,
- display_mode,
- zoom_level,
- show_line_numbers
- )
|