|
|
@@ -58,31 +58,46 @@ class MinerUPreprocessor(BasePreprocessor):
|
|
|
"""清理资源"""
|
|
|
pass
|
|
|
|
|
|
- def process(self, image: Union[np.ndarray, Image.Image]) -> tuple[np.ndarray, int]:
|
|
|
- """图像预处理"""
|
|
|
- # 转换为numpy数组
|
|
|
+ def remove_watermark(self, image: Union[np.ndarray, Image.Image]) -> np.ndarray:
|
|
|
+ """页级水印去除(应在整页图像上调用一次,勿对裁剪块重复调用)。"""
|
|
|
if isinstance(image, Image.Image):
|
|
|
image = np.array(image)
|
|
|
|
|
|
- rotate_angle = 0
|
|
|
- processed_image = image
|
|
|
-
|
|
|
- # 水印去除(在方向校正之前,避免旋转引入额外噪声)
|
|
|
watermark_cfg = self.config.get('watermark_removal', {})
|
|
|
- if watermark_cfg.get('enabled', False):
|
|
|
- threshold = watermark_cfg.get('threshold', 160)
|
|
|
- morph_close_kernel = watermark_cfg.get('morph_close_kernel', 0)
|
|
|
- try:
|
|
|
- processed_image = remove_watermark_from_image_rgb(
|
|
|
- processed_image,
|
|
|
- threshold=threshold,
|
|
|
- morph_close_kernel=morph_close_kernel,
|
|
|
- return_pil=False,
|
|
|
- )
|
|
|
- logger.info(f"🧹 Watermark removed (threshold={threshold})")
|
|
|
- except Exception as e:
|
|
|
- logger.warning(f"⚠️ Watermark removal failed, using original: {e}")
|
|
|
- processed_image = image
|
|
|
+ if not watermark_cfg.get('enabled', False):
|
|
|
+ return image
|
|
|
+
|
|
|
+ threshold = watermark_cfg.get('threshold', 160)
|
|
|
+ morph_close_kernel = watermark_cfg.get('morph_close_kernel', 0)
|
|
|
+ try:
|
|
|
+ cleaned = remove_watermark_from_image_rgb(
|
|
|
+ image,
|
|
|
+ threshold=threshold,
|
|
|
+ morph_close_kernel=morph_close_kernel,
|
|
|
+ return_pil=False,
|
|
|
+ )
|
|
|
+ logger.info(f"🧹 Watermark removed (threshold={threshold})")
|
|
|
+ return cleaned
|
|
|
+ except Exception as e:
|
|
|
+ logger.warning(f"⚠️ Watermark removal failed, using original: {e}")
|
|
|
+ return image
|
|
|
+
|
|
|
+ def process(
|
|
|
+ self,
|
|
|
+ image: Union[np.ndarray, Image.Image],
|
|
|
+ skip_watermark: bool = False,
|
|
|
+ ) -> tuple[np.ndarray, int]:
|
|
|
+ """图像预处理:可选水印去除 + 方向校正。
|
|
|
+
|
|
|
+ Args:
|
|
|
+ image: 输入图像
|
|
|
+ skip_watermark: 为 True 时跳过水印(页级已去水印或裁剪块场景)
|
|
|
+ """
|
|
|
+ if isinstance(image, Image.Image):
|
|
|
+ image = np.array(image)
|
|
|
+
|
|
|
+ rotate_angle = 0
|
|
|
+ processed_image = image if skip_watermark else self.remove_watermark(image)
|
|
|
|
|
|
# 方向校正
|
|
|
if self.orientation_classifier is not None:
|