feat: add contrast/sharpen strength controls, disable binarization

Major improvements to preprocessing controls:

Backend:
- Add contrast_strength (0.5-3.0) and sharpen_strength (0.5-2.0) to PreprocessingConfig
- Auto-detection now calculates optimal strength based on image quality metrics:
  - Lower contrast → Higher contrast_strength
  - Lower edge strength → Higher sharpen_strength
- Disable binarization in auto mode (rarely beneficial)
- CLAHE clipLimit now scales with contrast_strength
- Sharpening uses unsharp mask with variable strength

Frontend:
- Add strength sliders for contrast and sharpen in manual mode
- Sliders show current value and strength level (輕微/正常/強/最強)
- Move binarize option to collapsible "進階選項" section
- Updated i18n translations for strength labels

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
egg
2025-11-27 17:18:44 +08:00
parent f6d2957592
commit 5982fff71c
7 changed files with 212 additions and 53 deletions

View File

@@ -116,7 +116,9 @@ def process_task_ocr(
from app.schemas.task import PreprocessingContrastEnum
preprocess_config_obj = PreprocessingConfig(
contrast=PreprocessingContrastEnum(preprocessing_config.get("contrast", "clahe")),
contrast_strength=preprocessing_config.get("contrast_strength", 1.0),
sharpen=preprocessing_config.get("sharpen", True),
sharpen_strength=preprocessing_config.get("sharpen_strength", 1.0),
binarize=preprocessing_config.get("binarize", False)
)
@@ -772,7 +774,9 @@ async def start_task(
if options.preprocessing_config:
preprocessing_config = {
"contrast": options.preprocessing_config.contrast.value,
"contrast_strength": options.preprocessing_config.contrast_strength,
"sharpen": options.preprocessing_config.sharpen,
"sharpen_strength": options.preprocessing_config.sharpen_strength,
"binarize": options.preprocessing_config.binarize
}
logger.info(f"Preprocessing: mode={preprocessing_mode}, config={preprocessing_config}")