fix: optimize diagnosis output format and fix inconsistency between fault_status and fault_type

1. 输出格式优化:
   - faults中移除冗余的bbox和confidence字段
   - summary中fault_count改名为detection_count

2. fault_status与fault_type逻辑统一:
   - normal状态时fault_type为'none',不再使用'suspect'
   - abnormal状态时才进行故障类型分类(hotspot/local_overheating/overheat)

3. 修复usage_example.py图像通道问题:
   - YOLO检测使用彩色图,温度提取时再转灰度图
This commit is contained in:
SkyLi
2026-03-27 12:03:48 +08:00
parent febd9eea8d
commit 085cbc9950
4 changed files with 16 additions and 17 deletions
+1 -3
View File
@@ -222,15 +222,13 @@
"image": "FLIR0150.jpg",
"detections": [...],
"faults": [{
"bbox": [...],
"confidence": 0.995,
"temp_max": 255.0,
"fault_status": "abnormal",
"fault_type": "hotspot"
}],
"summary": {
"status": "fault_detected",
"fault_count": 1,
"detection_count": 1,
"abnormal_count": 1
}
}
+1 -3
View File
@@ -279,8 +279,6 @@ print(f"故障类型: {result['summary']['fault_types']}")
],
"faults": [
{
"bbox": [x1, y1, x2, y2],
"confidence": 0.995,
"temp_max": 255.0,
"temp_mean": 97.49,
"temp_std": 45.2,
@@ -290,7 +288,7 @@ print(f"故障类型: {result['summary']['fault_types']}")
],
"summary": {
"status": "fault_detected",
"fault_count": 1,
"detection_count": 1,
"abnormal_count": 1,
"fault_types": ["hotspot"]
}
+6 -3
View File
@@ -52,10 +52,13 @@ def example3_temperature_extraction():
detector = InfraredDetector("weights/best.pt")
# 读取图像
gray_img = cv2.imread(SAMPLE_IMAGE, cv2.IMREAD_GRAYSCALE)
color_img = cv2.imread(SAMPLE_IMAGE, cv2.IMREAD_COLOR)
# 检测目标(复用已加载的图像)
detections = detector.detect(gray_img)
# 检测目标(彩色图)
detections = detector.detect(color_img)
# 转为灰度图用于温度提取
gray_img = cv2.cvtColor(color_img, cv2.COLOR_BGR2GRAY)
# 提取第一个检测框的温度特征
if detections:
+8 -8
View File
@@ -67,13 +67,13 @@ class FaultDiagnoser:
fault_status = self._check_fault(temp_features)
temp_features['fault_status'] = fault_status
temp_features['fault_type'] = self._classify_fault(temp_features)
# abnormal 时才进行故障分类,normal 时类型为 none
if fault_status == 'abnormal':
temp_features['fault_type'] = self._classify_fault(temp_features)
else:
temp_features['fault_type'] = 'none'
result['faults'].append({
'bbox': bbox,
'confidence': det['confidence'],
**temp_features
})
result['faults'].append(temp_features)
else:
raise ValueError("Detector not initialized with model")
@@ -137,14 +137,14 @@ class FaultDiagnoser:
摘要信息
"""
if not faults:
return {'status': 'no_detection', 'fault_count': 0}
return {'status': 'no_detection', 'detection_count': 0}
abnormal_count = sum(1 for f in faults if f.get('fault_status') == 'abnormal')
fault_types = [f.get('fault_type', 'unknown') for f in faults]
return {
'status': 'fault_detected' if abnormal_count > 0 else 'normal',
'fault_count': len(faults),
'detection_count': len(faults),
'abnormal_count': abnormal_count,
'fault_types': list(set(fault_types))
}