图像区域计数工具:PolygonZone

在计算机视觉项目中,经常需要对图像中的特定区域进行对象计数。例如,在一个交通监控视频中,可能想要计算每个车道中有多少辆车。如果没有预先知道图像中每个区域的坐标,手动绘制这些区域将非常困难。

为了解决这个问题,推出了PolygonZone,这是一个独立的网页工具,允许在图像上绘制多边形,并获取包含绘制的多边形顶点的PythonNumPy数组或JSON对象。

步骤1:捕获图像

首先,需要从视频流中捕获一张图像。这张图像必须与稍后绘制多边形的图像具有相同的尺寸和分辨率,以确保坐标正确。如果打算在静态图像上绘制多边形,可以跳过这一步。

在教程中,将使用一个Jupyter笔记本,该笔记本使用Roboflow Supervision库来计算绘制的多边形内的对象数量。打开相应的笔记本并执行前两个单元格。

在笔记本的“捕获图像”部分,有一行代码会保存视频中的第一帧。由于摄像机在视频中不改变角度,知道在该帧上绘制的多边形将适用于整个视频。

执行代码单元格以将帧保存到文件。然后,从Colab中通过点击侧边栏中的图像名称,然后点击三个点,再点击“下载”链接来下载图像。

步骤2:计算多边形坐标

接下来,打开网络浏览器中的PolygonZone。将在上一步中保存的“first_frame.png”文件,或任何其他想要绘制多边形坐标的图像拖入要求放入文件的框中。

可以使用鼠标滚轮或笔记本电脑触控板放大图像。当准备好时,点击图像以绘制多边形。绘制完一个多边形后,按Enter键完成绘制。绘制完一个多边形后,可以创建另一个多边形,并继续重复此过程,直到绘制了所有需要的感兴趣区域。

当绘制多边形时,页面底部的PythonJSON代码片段将改变,显示绘制的新坐标。

例如,已经为交通视频中的每个车道绘制了两个多边形。这是道路上带有完成多边形的图像:

PolygonZone为生成了一些Python代码,可以将这些代码复制到脚本中,用于在视频流中创建感兴趣区域。还可以通过点击“保存图像”按钮来保存图像以供参考。这是为坐标生成的NumPy代码:

[ np.array([ [754, 579],[942, 579],[899, 1073],[21, 1064],[8, 988] ]),np.array([ [978, 585],[1054, 1064],[1905, 1067],[1172, 573] ]) ]

有了多边形坐标,就可以监控在多个图像和视频中的帧中,一个区域内出现的对象数量。

步骤3:使用Supervision绘制坐标

要绘制图像上的坐标,可以使用Supervision Zones功能。Zones功能允许使用多边形坐标在图像上绘制不同的区域。

在在步骤1中使用的Colab笔记本中,用从PolygonZone检索到的代码替换“polygons”变量。然后,运行笔记本中相应的单元格。运行直到“视频推理”部分的剩余单元格。这些单元格初始化了区域和注释器功能,以便可以在图像上绘制区域并在图像上对其进行注释。然后,代码执行了一个YOLOv8s模型(没有任何微调)来运行推理。

运行最后一个单元格后,将看到多边形绘制在图像上。模型返回的所有检测将在Colab笔记本中的图像上显示。这是正在使用的路视频的一个示例:

模型在标记区域内检测到了许多车辆。每个区域中间都有一个大数字,显示在该区域内进行了多少次预测。左车道发现了12辆车,右车道发现了11辆车。左车道用红色注释,右车道用绿色注释。两个区域之外的对象预测没有显示在注释图像上。这是由监督库处理的。

车道中的一些车辆没有注释。这是因为为此特定目的使用了没有微调的模型。要改进预测,可以微调一个识别汽车的模型。如果想改进汽车计数用例的模型,请访问Roboflow Universe以找到用于汽车计数的预训练数据集和模型。

额外:在视频上运行推理

本项目的Colab笔记本包含一行代码,该代码将使用计算的多边形在指定视频的每一帧上绘制区域。执行“视频推理”部分下的代码单元格,以查看注释应用于视频中的每一帧。请注意,这可能需要一些时间,具体取决于视频大小。

注释后的视频保存到一个名为"result.mp4"的文件中。交通计数应用程序的示例结果出现在本文的开头。

在本教程中,介绍了如何使用PolygonZone计算图像上的多边形坐标。可以使用这些坐标在图像上绘制感兴趣区域。结合监督库,这些坐标可以用来监控给定区域内的对象数量。

有了PolygonZone,计算计算机视觉项目中的多边形坐标不再需要手动、耗时的过程。上传图像,绘制多边形,并复制需要的坐标以在应用程序中使用。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485