VideoAgentTrek-ScreenFilter一文详解屏幕内容检测JSON字段解析你是不是经常需要从一堆视频或图片里快速找出哪些画面包含了屏幕内容比如监控录像里找电脑屏幕、会议录像里找PPT投影、或者从用户上传的视频里过滤掉含有手机屏幕的片段。手动一帧一帧看眼睛都要花了。今天要介绍的VideoAgentTrek-ScreenFilter就是专门解决这个问题的AI工具。它就像一个“屏幕探测器”能自动识别图像或视频中的屏幕类物体比如显示器、电视、手机、平板等并把检测结果用清晰的结构化数据JSON告诉你。这篇文章我们不谈复杂的算法原理就聚焦在最实用的部分它输出的JSON数据到底怎么看每个字段代表什么意思怎么用这些数据做二次开发无论你是想集成这个功能到自己的系统里还是单纯想理解检测结果这篇详解都能帮到你。1. 快速了解VideoAgentTrek-ScreenFilter在深入JSON之前我们先花一分钟看看这个工具是干什么的以及它能怎么用。1.1 工具是什么简单说VideoAgentTrek-ScreenFilter是一个基于YOLO目标检测模型的AI应用。它的核心任务只有一个在图片或视频中找出所有可能是“屏幕”的物体并用框标出来。它部署在CSDN星图镜像平台上提供了一个中文的Web界面你不需要懂编程也能直接用。上传图片或视频点个按钮它就能帮你分析。1.2 两种使用模式工具主要支持两种输入对应两种输出图片检测模式你给一张图片JPG/PNG格式。它给一张画好了红色检测框的结果图直观展示找到了哪些屏幕。一份JSON格式的检测明细详细列出每个框的位置、类别和可信度。视频检测模式你给一段视频建议先用10-30秒的短视频测试。它给一段处理后的视频每一帧上有屏幕的地方都被标上了框。一份JSON格式的统计报告汇总了整个视频的检测情况。无论是哪种模式JSON数据都是核心。图片的JSON告诉你这一张图里的所有细节视频的JSON则告诉你整段视频的宏观统计和每一帧的微观明细。2. 核心揭秘JSON字段逐行解析现在我们进入正题。假设你已经运行了一次检测拿到了一份JSON数据。它可能长得有点复杂别担心我们把它拆开揉碎了看。一份典型的检测结果JSON主要包含几个大的部分元信息、统计信息和检测明细。下面我们用一个简化后的例子来逐一解释每个字段。{ “model_path”: “/root/ai-models/.../best.pt”, “type”: “image”, “count”: 2, “class_count”: { “monitor”: 1, “cell phone”: 1 }, “boxes”: [ { “frame”: 0, “class_id”: 0, “class_name”: “monitor”, “confidence”: 0.89, “xyxy”: [350, 120, 850, 720] }, { “frame”: 0, “class_id”: 2, “class_name”: “cell phone”, “confidence”: 0.76, “xyxy”: [920, 400, 1020, 600] } ] }2.1 元信息部分这部分告诉你这次检测的基本背景。model_path(字符串)含义这次检测所使用的模型文件在服务器上的具体位置。解读就像软件的“版本号”确保你知道结果是哪个模型生成的。对于普通用户这个字段主要用于技术排查。type(字符串)含义输入数据的类型。取值“image”或“video”。解读一眼就知道你处理的是图片还是视频。这决定了你该如何理解boxes里的frame字段。2.2 统计信息部分这部分给你一个全局的、快速的概览。count(整数)含义总共检测到了多少个目标框。解读最直观的指标。比如上面例子中“count”: 2就表示在这张图里找到了2块屏幕。class_count(对象/字典)含义按类别统计的检测数量。结构键(Key)是类别名称值(Value)是该类别的出现次数。解读比count更细致。它告诉你找到的屏幕具体是什么。例如{“monitor”: 1, “cell phone”: 1}表示找到了1台显示器和1部手机。这对于分析场景内容非常有用比如一个会议视频里是电脑投影多还是手机展示多。2.3 检测明细部分 (boxes)这是JSON的精华所在包含了每一个检测框的详细信息。boxes是一个列表数组里面的每个元素都是一个目标框的信息。我们以第一个框为例详解{ “frame”: 0, “class_id”: 0, “class_name”: “monitor”, “confidence”: 0.89, “xyxy”: [350, 120, 850, 720] }frame(整数)含义该目标出现在第几帧。图片模式固定为0因为图片只有一“帧”。视频模式从0开始计数。例如frame: 15表示这个屏幕是在视频的第16帧计算机从0开始数被检测到的。这是做视频分析时定位时间点的关键依据。class_id与class_name(整数 和 字符串)含义目标的类别。class_id是类别编号class_name是类别名称。常见类别模型通常能识别monitor显示器、cell phone手机、tv电视、laptop笔记本电脑等。解读id更适合程序处理name更适合人阅读。两者是对应的。confidence(浮点数)含义模型对这个检测结果的“自信程度”或者说可信度。范围0到1之间越接近1表示模型越肯定这是个屏幕。解读这是过滤结果的重要参数你可以设定一个阈值比如0.5只保留confidence高于0.5的结果这样可以过滤掉一些模棱两可的误检。工具界面上的“置信度阈值”调的就是这个。xyxy(数组包含4个整数)含义检测框的像素坐标格式为[x1, y1, x2, y2]。解读x1, y1框的左上角的横坐标和纵坐标。x2, y2框的右下角的横坐标和纵坐标。坐标原点(0, 0)在图像的左上角。如何使用有了这四个数字你就能在图像上唯一确定一个矩形区域。这是后续进行截图、裁剪、打码等所有操作的基础。3. 图片 vs. 视频JSON的差异与关联虽然JSON结构一样但“图片模式”和“视频模式”下的数据内涵有所不同。3.1 图片模式JSON的特点frame字段全部为0。boxes列表包含了这张图片里所有被检测到的屏幕。class_count就是对这张图片里boxes的类别统计。数据关系countboxes列表的长度 class_count中所有值的总和。使用场景快速分析单张图片获取其中所有屏幕的位置和类型。3.2 视频模式JSON的特点视频的JSON可以看作是所有帧的检测结果的汇总报告。frame字段变得至关重要。每个框都属于特定的某一帧。boxes列表非常长它包含了视频每一帧里检测到的所有框。一个10秒、30帧/秒的视频如果每帧都有屏幕这个列表可能有300个元素。class_count统计的是整个视频中所有框的类别总和。count同样是整个视频中所有框的总数。视频JSON的实用价值宏观分析看class_count就知道视频里哪种屏幕出现最多。微观定位根据frame字段你可以精确知道某个屏幕出现在视频的哪一秒时间戳 ≈ frame / 帧率。趋势判断通过分析不同frame的检测结果可以判断屏幕是持续出现还是间歇出现。4. 动手实践如何利用JSON数据理解了字段含义我们来看看这些数据能怎么用。这里提供几个简单的思路和代码片段。4.1 场景一从图片中裁剪出所有屏幕假设你有一张包含多个显示器的办公室照片你想把每个显示器都单独保存下来。import json from PIL import Image # 1. 加载检测结果JSON with open(‘detection_result.json‘, ‘r‘) as f: data json.load(f) # 2. 打开原始图片 original_img Image.open(‘your_office_photo.jpg‘) # 3. 遍历所有检测框并裁剪 for i, box in enumerate(data[‘boxes‘]): # 获取坐标 x1, y1, x2, y2 box[‘xyxy‘] # 从原图裁剪 screen_crop original_img.crop((x1, y1, x2, y2)) # 保存文件名包含类别和序号 filename f“screen_{box[‘class_name‘]}_{i}.jpg” screen_crop.save(filename) print(f“已保存: {filename}”)4.2 场景二分析视频中屏幕出现的时间线你想知道一段产品演示视频中手机屏幕主要出现在哪个时间段。import json # 加载视频检测结果JSON with open(‘video_detection_result.json‘, ‘r‘) as f: data json.load(f) # 假设视频帧率为 30 fps fps 30 phone_appearances [] # 筛选出所有手机类别的检测框 for box in data[‘boxes‘]: if box[‘class_name‘] ‘cell phone‘: frame_num box[‘frame‘] # 将帧号转换为时间秒 time_in_seconds frame_num / fps phone_appearances.append({ ‘time_s‘: round(time_in_seconds, 2), ‘confidence‘: box[‘confidence‘] }) # 打印结果 print(f“视频中手机共出现 {len(phone_appearances)} 次”) for app in phone_appearances[:5]: # 打印前5次出现 print(f“ 时间: {app[‘time_s‘]}秒, 置信度: {app[‘confidence‘]:.2f}”)4.3 场景三根据置信度过滤误检你觉得结果里有些框不太准想只保留高置信度的结果。import json # 加载结果 with open(‘detection_result.json‘, ‘r‘) as f: data json.load(f) # 设置一个置信度阈值 confidence_threshold 0.6 # 过滤boxes filtered_boxes [box for box in data[‘boxes‘] if box[‘confidence‘] confidence_threshold] # 更新统计信息可选 filtered_count len(filtered_boxes) # ... 可以重新计算 class_count ... print(f“原始检测数: {data[‘count‘]}, 过滤后检测数: {filtered_count}”)5. 总结与进阶提示通过上面的详解相信你已经对VideoAgentTrek-ScreenFilter输出的JSON数据了如指掌了。我们来总结一下关键点boxes是核心它提供了每个检测目标的详细信息包括位置(xyxy)、类别(class_name)、可信度(confidence)和出现帧(frame)。class_count看分布一眼看清视频或图片中各类屏幕的占比。confidence用于调优通过调整置信度阈值可以在“不漏检”和“减少误检”之间找到平衡。frame是视频分析的关键它将静态的框与动态的时间轴关联起来。一些进阶的使用提示参数调优如果发现很多屏幕没检测到漏检可以尝试在Web界面将“置信度阈值”调低如0.15。如果发现很多不是屏幕的东西被框出来了误检则应将阈值调高如0.5。处理长视频工具默认只处理前60秒视频以保证响应速度。如果需要处理更长视频可以参考文档调整环境变量。结果集成这份结构化的JSON数据可以非常方便地被其他程序调用。你可以写一个脚本定时扫描某个文件夹将新视频丢给这个工具处理然后解析JSON结果实现全自动化的屏幕内容过滤或统计。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。