作者:

Anisha Udayakumar 英特尔AI软件布道师

武卓 英特尔AI软件布道师

介绍

基于 AI 的智能化、自动化人流统计在许多场景中都具有极大的实用价值。例如,在零售和购物中心中,它可以监控客流量,提升客户的购物体验;在公共交通中,它可以优化时间表并管理人群密度;在智能城市中,它有助于提升公共安全和改进城市规划。通过结合 OpenVINO™ 的模型优化和快速部署功能,以及搭载英特尔® 酷睿™ Ultra7 的 AI 开发套件的强大计算能力,实时人流统计可以轻松实现。

Image

让我们一起来实现吧!

幸运的是,这种应用程序已经存在于我们新的 OpenVINO™ 构建和部署存储库中:

https://github.com/openvinotoolkit/openvino_build_deploy 

并且是开源 Apache 2.0 许可证:

https://github.com/openvinotoolkit/openvino_build_deploy/blob/master/LICENSE.txt !


尽管如此,让我们一步一步地了解它是如何工作的以及如何运行它。为此,我们使用 Ubuntu 24.04 作为操作系统。

让我们从安装所有先决条件开始,尤其是 git 和 python:

sudo apt install git gcc python3-venv python3-dev

然后克隆整个仓库:

git clone https://github.com/openvinotoolkit/openvino_build_deploy.git

代码位于 “人流统计(People Counter)”目录中,因此让我们更改文件夹路径:

cd openvino_build_deploy/demos/people_counter_demo

创建和激活虚拟环境始终是一个不错的选择,可以让我们避免混淆各个项目之间的依赖关系:

python3 -m venv venvsource venv/bin/activate

准备就绪后,按照要求进行安装:

python -m pip install --upgrade pip pip install -r requirements.txt

我们已经为我们的环境做好了准备!但是,在运行应用程序之前,让我们先看一下代码。我们在这里只介绍最重要的代码片段。

要检查其他任何内容,请查看 main.py 文件。

https://github.com/openvinotoolkit/openvino_build_deploy/blob/master/demos/people_counter_demo/main.py

要计算人数,我们需要首先检测他们。为了检测人,我们使用了最先进的模型之一 - Ultralytics  的  YOLOv8

我们坚信,出色的性能也是关键,因此我们使用  OpenVINO™ 和 NNCF :

https://github.com/openvinotoolkit/openvino

https://github.com/openvinotoolkit/nncf  

来实现这一目标。然后第一步是加载、导出和量化模型(本例中为  YOLOv8 nano )。要量化模型,我们只需要设置  int8=True 。

from ultralytics import YOLO# create a YOLO object detection modelyolo_model = YOLO("yolov8n")# export the model to OpenVINO format (FP16 and INT8)yolo_model.export(format="openvino", dynamic=False, half=True)yolo_model.export(format="openvino", dynamic=False, half=True, int8=True)

由于该模型已经是 OpenVINO™ 格式,因此接下来在特定设备(例如 CPU、GPU或NPU)上加载和编译模型。但是,让我们先显示所有可用设备。

from openvino import runtime as ovcore = ov.Core()for device in core.available_devices:   device_name = core.get_property(device, "FULL_DEVICE_NAME")   print(device_name)

在延迟模式下编译模型非常重要,因为我们希望尽快获得视频帧的结果。

# read the model from filemodel = core.read_model(model_path)# compile the model for latency modemodel = core.compile_model(model, device_name="NPU", config={"PERFORMANCE_HINT": "LATENCY"})

在推理之前和之后都需要进行 预处理:和 后处理

https://github.com/openvinotoolkit/openvino_build_deploy/blob/ead86243e7227e78aef49c08e497c795637645d9/demos/people_counter_demo/main.py

我们将在这篇博客中跳过它们,但请随时访问链接以查看详细的代码信息。接下来,我们已经准备好进行模型推理了!

results = model(input_image)

就这样。只需要一行代码。我们就能够从图像得到结果。但这些结果仍然需要以某种方式解释,来方便我们的观察和理解。因此,我们在这个代码中使用的下一个库是 监督

https://github.com/roboflow/supervision  

它帮助我们过滤、注释和统计指定区域中的人员。让我们为视频流的底部创建注释器。

polygon = [[0, 360], [0, 1080], [1920, 1080], [1920, 360]]# a zone to count people inzone = sv.PolygonZone(polygon=polygon, frame_resolution_wh=(1920, 1080))# the annotator - visual part of the zonezone_annotator = sv.PolygonZoneAnnotator(zone=zone)# box annotator, showing boxes around peoplebox_annotator = sv.BoxAnnotator()

让我们用这段代码来解释。

frame = zone_annotator.annotate(scene=frame)# get detections relevant only for the zonemask = zone.trigger(detections=detections)detections_filtered = detections[mask]# visualize boxes around people in the zoneframe = box_annotator.annotate(scene=frame, detections=detections_filtered)

我们需要做的最后一件事就是进行人数统计并确认是否触发警报。这超级简单。

people_count = len(detections_filtered)# add alert text to the frame if necessary if people_count > people_limit: utils.draw_text(frame, text=f"Intel employee required in zone {zone_id}!", point=(20, 20), font_color=(0, 0, 255))

要运行所有代码并查看结果,只需在命令行中键入:

python main.py --stream 0

其中数字(例如 0)表示网络摄像头号码。如果需要,您也可以使用具体路径中的视频。当然,还有一些参数需要更改,例如模型或人数上限people_limit,这里请运行帮助选项以了解如何设置更多的输入参数修改。

python main.py --help

结果

这是在输入视频上运行人流计数的运行结果。通过我们设计的控制面板,您可以通过在键盘上按下不同的数字,轻松地在  Linux AI  开发套件中的  CPU、GPU 和 NPU  之间切换推理设备。

在本地  AI  开发套件上尝试这个 demo 吧,祝你编程开心!

如果您对  AI  充满热情并渴望探索更多有趣的 AI 演示,我们邀请您查看我们的  GitHub  仓库,网址为:

https://github.com/openvinotoolkit/openvino_build_deploy 

我们的仓库包含现成的 demo,展示了  AI  在实际应用中的能力。无论您是对优化性能、部署高级模型感兴趣,还是只是尝试新想法,我们的代码库都提供了一个完美的起点。通过克隆仓库并在您自己的计算机上运行 demo,您将获得可以加速项目开发的实战经验。不要错过这个深入研究  AI  的机会——今天就克隆我们的仓库并开始探索吧!

通知及免责声明

性能因使用情况、配置和其他因素而异。如需了解详情,请访问网址:

https://edc.intel.com/content/www/us/en/products/performance/benchmarks/overview/ 

性能结果基于截至配置中显示的日期的测试,可能无法反映所有公开可用的更新。有关配置详细信息,请参阅备份。没有任何产品或组件可以绝对安全。您的成本和结果可能会有所不同。英特尔技术可能需要支持的硬件、软件或服务激活。

Logo

为开发者提供丰富的英特尔开发套件资源、创新技术、解决方案与行业活动。欢迎关注!

更多推荐