DAMOYOLO-S实操手册:检测结果JSON转CSV/Excel用于BI工具分析

张开发
2026/4/20 17:09:04 15 分钟阅读

分享文章

DAMOYOLO-S实操手册:检测结果JSON转CSV/Excel用于BI工具分析
DAMOYOLO-S实操手册检测结果JSON转CSV/Excel用于BI工具分析你是不是也遇到过这样的问题用DAMOYOLO-S检测完一批图片看着生成的JSON文件里面密密麻麻的检测结果想做个统计分析却无从下手手动整理那得花多少时间今天我就来分享一个超实用的技巧如何把DAMOYOLO-S的检测结果JSON文件快速转换成CSV或Excel格式让你能直接用BI工具比如Power BI、Tableau甚至Excel本身进行深度分析。1. 为什么需要转换格式DAMOYOLO-S检测完成后默认输出的是JSON格式。这个格式对程序很友好但对人来说尤其是想做数据分析的时候就不那么方便了。JSON格式的痛点结构嵌套数据藏在多层结构里一眼看不全。不易统计想数数某个类别出现了多少次得写脚本或者手动翻找。分析困难想计算平均置信度、分析目标分布或者做可视化图表JSON格式很难直接导入BI工具。转换成CSV/Excel的好处一目了然所有检测结果类别、分数、坐标都平铺在一张表里。轻松统计用Excel的筛选、排序、数据透视表几秒钟就能完成统计。无缝对接CSV是BI工具的“通用语言”Power BI、Tableau、甚至Python的pandas都能直接读取做可视化分析易如反掌。简单说转换格式就是为了把“机器看得懂”的数据变成“人用着爽”的报表。2. 准备工作理解DAMOYOLO-S的输出结构在动手转换之前我们得先搞清楚JSON文件里到底有什么。这样转换的时候才知道该提取哪些信息。DAMOYOLO-S对单张图片的检测结果JSON结构大致如下{ threshold: 0.3, count: 2, detections: [ { label: person, score: 0.95, box: [100, 150, 200, 300] }, { label: car, score: 0.87, box: [300, 200, 450, 350] } ] }关键字段解释threshold: 你设置的置信度阈值。所有score低于这个值的目标都不会显示。count: 这张图片里检测到的目标总数。detections: 一个列表包含了所有检测到的目标。每个目标是一个字典。label: 目标类别比如“person”人、“car”车共80类COCO数据集。score: 置信度分数范围0-1越高表示模型越确信。box: 边界框坐标格式通常是[x_min, y_min, x_max, y_max]即左上角和右下角的坐标。如果是批量处理多张图片你可能会有多个这样的JSON文件或者一个包含所有图片结果的大JSON。我们的目标就是把每个detections里的信息连同图片文件名一起变成表格的一行行数据。3. 方法一使用Python脚本批量转换推荐这是最灵活、最强大的方法适合处理大量文件。我会提供一个完整的、可以直接运行的脚本。3.1 脚本功能与思路这个脚本会做以下几件事遍历指定文件夹找到所有的JSON结果文件。解析每个JSON文件提取出每张图片里每个检测目标的信息。把信息整理成表格的一行包括图片名、目标类别、置信度、边界框坐标。将所有行保存到一个CSV文件中。3.2 完整Python脚本创建一个文件比如叫做json_to_csv.py然后把下面的代码复制进去。import json import csv import os import argparse from pathlib import Path def convert_damoyolo_json_to_csv(json_dir, output_csv): 将DAMOYOLO-S输出的JSON结果文件批量转换为CSV格式。 参数: json_dir (str): 存放JSON文件的目录路径。 output_csv (str): 输出的CSV文件路径。 # 准备CSV文件的列名 fieldnames [ image_filename, # 图片文件名从JSON文件名推断 label, # 检测类别 score, # 置信度 x_min, # 边界框左上角X坐标 y_min, # 边界框左上角Y坐标 x_max, # 边界框右下角X坐标 y_max, # 边界框右下角Y坐标 threshold # 检测时使用的置信度阈值 ] all_rows [] # 遍历目录下的所有JSON文件 json_path Path(json_dir) for json_file in json_path.glob(*.json): try: with open(json_file, r, encodingutf-8) as f: data json.load(f) # 从文件名推断原图片名假设JSON文件名为image1.jpg.json # 你可以根据实际情况调整这里的逻辑 base_name json_file.stem # 去掉.json后缀 # 如果图片名还包含其他后缀比如 .jpg可以再处理一次 # 例如如果json文件是 cat.jpg.json这里 base_name 是 cat.jpg # 我们可以选择保留或者去掉图片后缀。这里我们保留完整base_name。 image_name base_name threshold data.get(threshold, N/A) detections data.get(detections, []) for det in detections: label det.get(label, unknown) score det.get(score, 0.0) box det.get(box, []) # 确保box有4个值 x_min, y_min, x_max, y_max (box [0, 0, 0, 0])[:4] row { image_filename: image_name, label: label, score: score, x_min: x_min, y_min: y_min, x_max: x_max, y_max: y_max, threshold: threshold } all_rows.append(row) except Exception as e: print(f处理文件 {json_file} 时出错: {e}) continue # 写入CSV文件 if all_rows: with open(output_csv, w, newline, encodingutf-8) as csvfile: writer csv.DictWriter(csvfile, fieldnamesfieldnames) writer.writeheader() writer.writerows(all_rows) print(f转换完成共处理 {len(all_rows)} 条检测记录。) print(f结果已保存至: {output_csv}) else: print(未找到任何有效的检测数据。) if __name__ __main__: parser argparse.ArgumentParser(description转换DAMOYOLO JSON结果为CSV) parser.add_argument(--json_dir, typestr, requiredTrue, help存放JSON文件的目录路径) parser.add_argument(--output, typestr, defaultdetection_results.csv, help输出的CSV文件路径 (默认: detection_results.csv)) args parser.parse_args() convert_damoyolo_json_to_csv(args.json_dir, args.output)3.3 如何使用这个脚本第一步保存脚本将上面的代码保存到你电脑的某个位置比如D:\tools\json_to_csv.py。第二步准备你的JSON文件假设你的DAMOYOLO-S检测结果JSON文件都放在D:\damoyolo_results这个文件夹里。第三步运行脚本打开命令行CMD或终端切换到脚本所在目录然后运行# 最基本用法使用默认输出文件名 python json_to_csv.py --json_dir D:\damoyolo_results # 或者指定输出文件路径和名字 python json_to_csv.py --json_dir D:\damoyolo_results --output my_analysis.csv运行成功后你会在当前目录下看到一个detection_results.csv或你指定的名字文件。3.4 生成的CSV文件长什么样用Excel或文本编辑器打开生成的CSV文件你会看到类似下面的表格image_filenamelabelscorex_miny_minx_maxy_maxthresholdstreet_scene.jpgperson0.951001502003000.3street_scene.jpgcar0.873002004503500.3office.jpgchair0.7650801201500.25office.jpglaptop0.922001003502500.25每一行代表一个检测到的目标。这样规整的数据分析起来就太方便了。4. 方法二使用在线转换工具快速简单如果你只有一两个JSON文件或者不想写代码在线工具是个不错的选择。操作步骤打开一个可靠的JSON转CSV在线工具网站例如https://www.convertcsv.com/json-to-csv.htm。将你的DAMOYOLO-S JSON结果复制到网站的输入框里。注意你需要复制detections列表里的内容或者把整个JSON结构调整成工具能识别的格式。有些工具需要最外层是一个数组[...]。点击“转换”或“Download CSV”按钮。下载生成的CSV文件。优缺点优点无需安装任何软件打开网页就能用适合快速处理小文件。缺点需要手动调整JSON结构批量处理很麻烦。数据隐私问题敏感数据不建议上传到第三方网站。功能有限无法像Python脚本那样灵活处理文件名、批量操作等。5. 方法三在Excel/Power BI中直接使用JSON进阶如果你经常需要分析并且数据源固定可以考虑在Power BI或新版Excel中直接连接JSON文件。以Power BI Desktop为例打开Power BI选择“获取数据” - “文件” - “JSON”。选择你的JSON文件。在导航器中你会看到JSON的结构。选择detections记录列表。Power BI会自动将其转换为表格。你可能需要使用“转换数据”功能将box列表展开成单独的列x_min, y_min等。点击“关闭并应用”数据就加载到Power BI模型里了可以开始创建可视化报表。这种方法适合构建可刷新的分析报告。当你有新的检测结果JSON时只需在Power BI中刷新数据源即可。6. 数据分析实战用CSV数据驱动BI洞察数据已经规整好了现在让我们看看能用它做什么有趣的分析。这里用Excel的数据透视表来演示几个常见场景。场景一统计各类别出现的频率在Excel中打开CSV文件。选中数据区域点击“插入” - “数据透视表”。将“label”字段拖到“行”再将“label”字段拖到“值”计算计数。瞬间你就得到了一张表格清晰地告诉你“person”出现了多少次“car”出现了多少次。可以马上生成一个柱状图。场景二分析置信度分布同样插入数据透视表。将“score”字段拖到“行”可能需要分组比如按0.1的区间分组0-0.1 0.1-0.2...。将任意字段拖到“值”计算计数。这样你就知道大部分检测结果的置信度集中在哪个区间有助于你评估模型在不同置信度阈值下的表现。场景三按图片分析目标密度插入数据透视表。将“image_filename”拖到“行”将“label”拖到“列”再将任意字段拖到“值”计算计数。你会得到一个交叉表显示每张图片里各个类别分别检测到了多少个。这能帮你快速找出哪些图片场景复杂目标多哪些图片简单。更高级的分析在Power BI/Tableau中空间热力图利用x_min, y_min, x_max, y_max坐标可以近似地在图片背景上绘制目标出现位置的热力图分析目标的常见分布区域。时间序列分析如果你的图片是按时间顺序命名的如frame_001.jpg,frame_002.jpg你可以分析某个类别如“car”数量随时间的变化用于视频流分析。关联分析探索不同类别同时出现的概率比如“person”和“car”经常一起出现吗7. 总结与最佳实践把DAMOYOLO-S的JSON结果转换成CSV就像给数据装上了“轮子”让它能从模型的“后端仓库”快速跑进分析的“前线战场”。流程回顾理解结构先看懂JSON里detections列表的结构。选择工具批量、自动化、灵活首选Python脚本。我提供的脚本开箱即用还能根据你的需求定制比如计算边界框中心点、面积等。单文件、快速查看试试在线转换工具但要小心数据安全。构建持续报告在Power BI中直接连接JSON文件夹设置定时刷新。开始分析将生成的CSV导入你熟悉的BI工具或Excel利用筛选、透视表、图表等功能挖掘数据背后的信息。给你的几个建议规范命名给JSON文件起名时最好能体现原图片名这样在转换和后续分析时更容易对应。我的脚本假设JSON文件名为原图名.json或原图名.jpg.json。保存原始数据转换后的CSV用于分析但原始的JSON文件建议也保留一份以备不时之需。迭代分析分析结果可能会指导你调整DAMOYOLO-S的检测阈值Score Threshold或者发现某些场景下模型表现不佳需要补充训练数据或尝试其他模型。希望这份手册能帮你把DAMOYOLO-S的强大检测能力真正转化为可度量、可分析的商业或学术洞察。数据转换只是第一步更精彩的故事等待你用BI工具去发现和讲述。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章