|
|
@@ -88,6 +88,9 @@ class EnhancedDocPipeline:
|
|
|
'interline_equation_yolo', 'interline_equation_number'
|
|
|
]
|
|
|
|
|
|
+ # Seal(印章)类元素 - 需要 VLM 识别
|
|
|
+ SEAL_CATEGORIES = ['seal']
|
|
|
+
|
|
|
# 丢弃类元素(水印、装饰等)
|
|
|
DISCARD_CATEGORIES = ['abandon', 'discarded']
|
|
|
|
|
|
@@ -750,6 +753,7 @@ class EnhancedDocPipeline:
|
|
|
'image_body': [],
|
|
|
'image_text': [],
|
|
|
'equation': [],
|
|
|
+ 'seal': [], # 🔧 添加 seal 类别
|
|
|
'code': [],
|
|
|
'discard': []
|
|
|
}
|
|
|
@@ -769,6 +773,8 @@ class EnhancedDocPipeline:
|
|
|
classified['image_text'].append(item)
|
|
|
elif category in self.EQUATION_CATEGORIES:
|
|
|
classified['equation'].append(item)
|
|
|
+ elif category in self.SEAL_CATEGORIES:
|
|
|
+ classified['seal'].append(item)
|
|
|
elif category in self.CODE_CATEGORIES:
|
|
|
classified['code'].append(item)
|
|
|
elif category in self.DISCARD_CATEGORIES:
|
|
|
@@ -784,6 +790,7 @@ class EnhancedDocPipeline:
|
|
|
f"image={len(classified['image_body'])}, "
|
|
|
f"image_text={len(classified['image_text'])}, "
|
|
|
f"equation={len(classified['equation'])}, "
|
|
|
+ f"seal={len(classified['seal'])}, "
|
|
|
f"code={len(classified['code'])}, "
|
|
|
f"discard={len(classified['discard'])}")
|
|
|
|
|
|
@@ -952,6 +959,17 @@ class EnhancedDocPipeline:
|
|
|
logger.warning(f"⚠️ Equation processing failed: {e}")
|
|
|
processed_elements.append(ElementProcessors.create_error_element(item, str(e)))
|
|
|
|
|
|
+ # 🔧 处理 Seal(印章)元素 - 使用 VLM 识别
|
|
|
+ for item in classified_elements['seal']:
|
|
|
+ try:
|
|
|
+ element = self.element_processors.process_seal_element(
|
|
|
+ detection_image, item
|
|
|
+ )
|
|
|
+ processed_elements.append(element)
|
|
|
+ except Exception as e:
|
|
|
+ logger.warning(f"⚠️ Seal processing failed: {e}")
|
|
|
+ processed_elements.append(ElementProcessors.create_error_element(item, str(e)))
|
|
|
+
|
|
|
# 处理图片主体
|
|
|
for item in classified_elements['image_body']:
|
|
|
try:
|