当前位置: 首页 > news >正文

remap_json.py

目录
  • 1. 整体概述
  • 2. 前置字典的作用
    • 2.1 工位字典 position_dict
    • 2.2 大部件字典 major_parts_dict
    • 2.3 检测项点字典 inspection_points_dict
    • 2.4 故障结果字典 faults_dict
  • 3. 函数入口:解析长图信息
    • 3.1 从文件名解析业务字段
    • 3.2 校验工位是否合法
    • 3.3 构造新的长图文件名(鼎汉规范)
  • 4. 构造鼎汉基础结构
    • 4.1 车厢级对象 dinghan_items
    • 4.2 工位级检测对象 dinghan_check
  • 5. 遍历短图结果(核心逻辑)
    • 5.1 读取小图位置(相对于长图)
  • 6. 遍历故障信息(真正的检测项)
    • 6.1 提取故障字段
  • 7. 故障过滤逻辑(非常关键)
    • 7.1 直接忽略的情况
    • 7.2 置信度不达标
  • 8. 故障语义映射
    • 8.1 大部件 largercomponent
    • 8.2 小部件 smallcomponent
    • 8.3 故障类型 error_result
  • 9. 故障小图处理(裁剪 + 画框 + 上传)
    • 9.1 特殊逻辑:碳滑块中文标注
  • 10. 生成最终 detection 结构
    • 10.1 other 字段说明
  • 11. 结束与返回
    • 11.1 有效故障
    • 11.2 没有任何故障
  • 12. 一句话总结

1. 整体概述

remap_dinghan_item(json_data) 的作用是:

把算法推理产生的原始 JSON 结果,重新映射成“鼎汉系统”需要的检测结果格式,并完成故障小图的裁剪、画框、上传和字段编码。

如果在一张长图中检测到了符合规则的故障,就返回一个 dinghan_items 结构;
如果没有任何有效故障,则返回 None


2. 前置字典的作用

2.1 工位字典 position_dict

中文工位名映射为鼎汉需要的数字编码

"车顶" -> "1"
"底右" -> "14"

用于:

  • 校验相机工位是否合法
  • 填充 positionchecksrc.name

2.2 大部件字典 major_parts_dict

业务上的大部件名称映射成鼎汉标准部件编码

"集电靴" -> "1316"
"转向架" -> "1217"

用于:

  • largercomponentcode
  • largercomponentindex

2.3 检测项点字典 inspection_points_dict

表示小部件 / 检查项类型

"外观" -> "125"
"螺栓" -> "101"

2.4 故障结果字典 faults_dict

故障结论映射成鼎汉结果码:

"脱落" -> "101"
"表面异常" -> "107"

3. 函数入口:解析长图信息

long_img_path = json_data.get("path")
long_img_fname = os.path.basename(long_img_path)

3.1 从文件名解析业务字段

长图文件名格式:

过车时间_线路_车号_车厢号_车辆段_方向_相机工位.jpg

例如:

20241230123045_L1_1234_01_XX段_上行_车顶.jpg

解析成:

pass_time
line
train_code
carriage_number
station
direction
camera

3.2 校验工位是否合法

if camera not in position_dict:return None

非法工位直接丢弃,不上报。


3.3 构造新的长图文件名(鼎汉规范)

aizt_时间_线路_车号_车厢号_车辆段_方向_工位.jpg

4. 构造鼎汉基础结构

4.1 车厢级对象 dinghan_items

dinghan_items = {"seq": int(carriage_number),"code": train_code + carriage_number,"check": []
}

👉 表示 某一节车厢


4.2 工位级检测对象 dinghan_check

dinghan_check = {"position": position_dict[camera],"imgquality": 0,"checksrc": {"name": position_dict[camera],"width": json_data["width"],"height": json_data["height"],"url": "images/长图名.jpg"},"detections": []
}

👉 表示 某个工位上的检测结果


5. 遍历短图结果(核心逻辑)

for short_result in json_data.get("short_result", []):

每个 short_result 对应一张故障候选小图

5.1 读取小图位置(相对于长图)

fault_img_left
fault_img_top
fault_img_width
fault_img_height

6. 遍历故障信息(真正的检测项)

for fault in short_result["result"]["result"]["faults"][0]["fault_info"]:

每个 fault 是一个 具体故障框

6.1 提取故障字段

  • defect_area:部位
  • defect_name:故障名称
  • left / top / width / height:框
  • confidence:置信度

7. 故障过滤逻辑(非常关键)

7.1 直接忽略的情况

if "正常" in defect_name:continue
if 新车 and "开口销":continue

7.2 置信度不达标

threshold = get_confidence_fault(...)
if fault_rect_confidence <= threshold:continue

这是实际控制误报的关键逻辑


8. 故障语义映射

8.1 大部件 largercomponent

根据 defect_area 的关键词判断:

"受流器" -> 集电靴
"排障器" -> 排障装置
"轴箱转臂" -> 轴箱转臂

找不到就归为:

"未知部件"

8.2 小部件 smallcomponent

根据 defect_namedefect_area

  • 螺栓 → 外观
  • 空气弹簧 → 橡胶件
  • 四方锁 → 方孔锁
  • 默认 → 外观

8.3 故障类型 error_result

通过关键词判断:

关键词 映射结果
丢失 / 折断 / 裂纹 表面异常
磨耗超限 / 不在位 位置异常
破损 / 破洞 表面破损
弹出 指示点是否弹出

9. 故障小图处理(裁剪 + 画框 + 上传)

fault_img_fname = get_sub_fault_img_path_and_upload_obs(...)
  • 裁剪小图
  • 在图上画框
  • 上传到 OBS
  • 返回小图文件名

9.1 特殊逻辑:碳滑块中文标注

if "碳滑块" and "磨耗超限":draw_tanhuakuai_chinese(...)

10. 生成最终 detection 结构

dinghan_check["detections"].append({"faultuid": uuid,"faultname": "部位_缺陷","faultnameother": "大部件_小部件_结果","largercomponentcode": "...","smallcomponentcode": "...","result": "...","imgurl": "...","level": level,"other": [长图框, 小图框]
})

10.1 other 字段说明

  • type = 0:相对于长图的故障框
  • type = 2:短图在长图中的位置

👉 鼎汉要求 所有坐标都基于长图


11. 结束与返回

11.1 有效故障

shutil.copy(长图, 鼎汉目录)
dinghan_items["check"].append(dinghan_check)
return dinghan_items

11.2 没有任何故障

return None

12. 一句话总结

这段代码的本质是
“把算法输出 → 规则过滤 → 语义映射 → 鼎汉标准结构 → 图片处理 → 最终上报对象”
是一个完整的 AI 结果落地 & 上报适配层

如果你愿意,我可以再帮你画一张整体数据流示意图,或者单独把故障映射规则整理成表。

http://www.jsqmd.com/news/197751/

相关文章:

  • Wireshark抓包实操:ModbusTCP报文格式说明新手教程
  • 2025年课程顾问AI陪练系统推荐:课程顾问智能体哪家专业? - myqiye
  • 2025年轻骨料混凝土制造企业交货期/源头厂家信誉度/售后服务排名推荐 - mypinpai
  • 2025年智能运维品牌供应商推荐:服务不错的智能运维品牌商有哪些? - 工业设备
  • 2026年靠谱的透明四方袋/铝塑复合四方袋厂家推荐及选择指南 - 品牌宣传支持者
  • 2026年知名的钙粉选粉机/组合式选粉机厂家推荐及采购指南 - 品牌宣传支持者
  • 2025专项财税服务TOP5权威推荐:专业专项财税服务找哪家? - 工业品牌热点
  • Git commit规范写作技巧,搭配IndexTTS 2.0生成代码注释语音
  • 2025年重庆热门茶馆推荐:苗品记隐茶馆口碑如何? - myqiye
  • Meta新发布Voicebox不及预期?IndexTTS 2.0已落地实用
  • 频率响应奈奎斯特图:MATLAB实战案例解析
  • Web端集成IndexTTS 2.0:打造在线语音生成平台全流程
  • 【多元统计分析进阶之路】:基于R语言的PCA实战案例精讲
  • R语言随机森林模型精度提升7步法:数据预处理到超参数调优全流程
  • 如何用R语言打造期刊主编青睐的图表?揭秘高影响力论文配色密码
  • 用自然语言描述控制情绪:“愤怒地质问”也能精准合成?
  • 2025年天津短视频拍摄公司排名:靠谱、售后好、案例多的企业推荐全解析 - mypinpai
  • 数字人交互语音新选择:IndexTTS 2.0提升语音清晰度与稳定性
  • 新手必看:Allegro导出Gerber文件入门教程
  • 2025年靠谱隧道风筒布加工厂/制造厂/服务商排名 - 工业设备
  • confidence.py
  • 分类精度上不去?R语言随机森林5个常被忽略的性能陷阱,90%的人都踩过
  • 什么是IP专线
  • 2026年比较好的高定衣柜灯/护墙灯衣柜灯TOP实力厂家推荐榜 - 品牌宣传支持者
  • ChromeDriver下载地址汇总?先了解它在自动化测试中的作用
  • 你真的会用R做系统发育信号检测吗:trait数据建模常见误区与纠正
  • Mathtype公式编辑太复杂?其实你可以这样结合AI语音讲解
  • 新手教程:数字电路中触发器的基础应用详解
  • 2025年商用净水服务公司年度排名:上海浩潭环保科技实力如何? - myqiye
  • 2025丽江信誉好的装修专业公司TOP5推荐:本地业主信赖的装修品牌企业甄选指南 - 工业推荐榜