搜索
首页科技周边人工智能如何只用两个Python函数在几分钟内创建完整的计算机视觉应用程序

如何只用两个Python函数在几分钟内创建完整的计算机视觉应用程序

译者 | 李睿

审校 | 重楼

这篇文章首先简要介绍了计算机视觉应用程序的基本要求。接着,详细介绍了Pipeless这一开源框架,它为嵌入式计算机视觉提供了无服务器开发体验。最后,提供了一个详细的步骤指南,演示如何使用几个Python函数和一个模型创建和运行一个简单的对象检测应用程序。

创建计算机视觉应用程序

描述“计算机视觉”的一种方式是将其定义为“利用摄像头和算法技术进行图像识别和处理的领域”。然而,这种简单的定义可能无法完全满足人们对这一概念的理解。因此,为了更深入地了解计算机视觉应用程序的构建过程,我们需要考虑每个子系统所需实现的功能。 计算机视觉应用程序的构建过程涉及多个关键步骤,包括图像采集、图像处理、特征提取、目标识别和决策制定。首先,通过摄像头或其他图像采集设备获取图像数据。然后,利用算法对图像进行处理,包括去噪、增强和分割等操作,以便进一步分析。在特征提取阶段,系统会识别图像中的关键特征,如

为了实时处理60 fps的视频流,需要在16毫秒内处理每一帧。这通常通过多线程和多处理进程实现。有时候,甚至需要在上一帧完成之前就开始处理下一帧,以确保能够实现真正快速的帧处理。

对于人工智能模型,现在幸好有许多优秀的开源模型可供使用,因此大多数情况下无需从零开始开发自己的模型,只需微调参数以满足特定用例即可。这些模型在每一帧上运行推理,执行对象检测、分割、姿态估计等任务。

•推理运行时间:推理运行时间负责加载模型,并在不同的可用设备(GPU或CPU)上高效运行。

为了确保模型在推理过程中能够快速运行,采用GPU是必不可少的。GPU能够处理比CPU更多数量级的并行操作,尤其是在处理大量数学运算时效果更为显著。在处理帧时,需要考虑帧所在的内存位置,可以选择存储在GPU内存或CPU内存(RAM)中。然而,在这两种不同的内存之间复制帧会导致运算速度变慢,尤其是当帧的大小较大时。这也意味着需要权衡内存的选择以及数据传输的开销,以实现更高效的模型推理过程。

多媒体管道是一组部件,用于从数据源中获取视频流,并将其分割成帧,然后将其作为模型的输入。有时,这些部件还可以对视频流进行修改和重建,以便进行转发。这些部件在处理视频数据时发挥着关键作用,确保视频流能够被有效地传输和处理。

•视频流管理:开发人员可能希望应用程序能够抵抗视频流的中断、重新连接、动态添加和删除视频流、同时处理多个视频流,等等。

所有这些系统都需要创建或合并到项目中,因此,需要维护代码。然而,面临的问题是最终维护的大量代码并非特定于应用程序,而是围绕实际案例特定代码的子系统。

Pipeless框架

为了避免从头开始构建上述所有内容,可以代用Pipeless框架。这是一个用于计算机视觉的开源框架,允许提供一些特定于案例的功能,并且能够处理其他事物。

Pipeless框架将应用程序的逻辑划分为“阶段”,其中的一个阶段就像单个模型的微型应用程序。一个阶段可以包括预处理、使用预处理的输入运行推理,以及对模型输出进行后处理以采取行动。然后,可以链接尽可能多的阶段,以组成完整的应用程序,甚至使用多个模型。

为了提供每个阶段的逻辑,只需添加一个特定于应用程序的代码函数,然后在需要时由Pipeless负责调用它。这就是可以将Pipeless视为一个框架的原因,它为嵌入式计算机视觉提供类似服务器的开发体验,并且提供了一些功能,不必担心需要其他的子系统。

Pipeless的另一个重要特性是,可以通过CLI或REST API动态地添加、删除和更新视频流,从而实现视频流处理的自动化。甚至可以指定重新启动策略,指示何时应该重新启动视频流的处理,是否应该在出现错误后重新启动,等等。

最后,部署Pipeless框架,只需要在任何设备上安装它并与代码函数一起运行,无论是在云计算虚拟机或容器化模式中,还是直接在Nvidia Jetson、Raspberry等边缘设备中。

创建对象检测应用程序

以下深入地了解如何使用Pipeless框架创建一个简单的对象检测应用程序。

第一就是安装。安装脚本,使其安装非常简单:

Curl https://raw.githubusercontent.com/pipeless-ai/pipeless/main/install.sh | bash

现在,必须创建一个项目。Pipeless项目是一个包含阶段的目录。每个阶段都在子目录下,在每个子目录中,创建包含hooks(特定的代码函数)的文件。为每个阶段文件夹提供的名称是稍后要为视频流运行该阶段时,必须向Pipeless框指示的阶段名称。

pipeless init my-project --template emptycd my-project

在这里,空模板告诉CLI只创建目录,如果不提供任何模板,CLI将提示几个问题以交互式地创建阶段。

如上所述,现在需要为项目添加一个阶段。采用下面的命令从GitHub下载一个阶段示例:

wget -O - https://github.com/pipeless-ai/pipeless/archive/main.tar.gz | tar -xz --strip=2 "pipeless-main/examples/onnx-yolo"


这将创建一个阶段目录onnx-yolo,其中包含应用程序函数。

然后,检查每个阶段文件的内容,也就是应用程序hooks。

这里有一个pre-process.py文件,它定义了一个接受一个框架和一个场景的函数(hooks)。该函数执行一些操作来准备接收RGB帧的输入数据,以便与模型期望的格式匹配。该数据被添加到frame_data[' interence_input ']中,这是Pipeless将传递给模型的数据。

def hook(frame_data, context):frame = frame_data["original"].view()yolo_input_shape = (640, 640, 3) # h,w,cframe = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)frame = resize_rgb_frame(frame, yolo_input_shape)frame = cv2.normalize(frame, None, 0.0, 1.0, cv2.NORM_MINMAX)frame = np.transpose(frame, axes=(2,0,1)) # Convert to c,h,winference_inputs = frame.astype("float32")frame_data['inference_input'] = inference_inputs... (some other auxiliar functions that we call from the hook function)

还有process.json文件,它指示要使用的Pipeless推理运行时间(在本例中为ONNX运行时间),在哪里可以找到它应该加载的模型,以及它的一些可选参数,例如要使用的execution_provider,即CPU、CUDA、TensortRT等。

{ "runtime": "onnx","model_uri": "https://pipeless-public.s3.eu-west-3.amazonaws.com/yolov8n.onnx","inference_params": { "execution_provider": "tensorrt" }}

最后,post-process.py文件定义了一个类似于pre-process.py中的函数。这一次,它接受Pipeless存储在frame_data["inference_output"]中的推理输出,并执行将该输出解析为边界框的操作。稍后,它在框架上绘制边界框,最后将修改后的框架分配给frame_data['modified']。这样,Pipeless将转发提供的视频流,但带有修改后的帧,其中包括边界框。

def hook(frame_data, _):frame = frame_data['original']model_output = frame_data['inference_output']yolo_input_shape = (640, 640, 3) # h,w,cboxes, scores, class_ids =  parse_yolo_output(model_output, frame.shape, yolo_input_shape)class_labels = [yolo_classes[id] for id in class_ids]for i in range(len(boxes)):draw_bbox(frame, boxes[i], class_labels[i], scores[i])frame_data['modified'] = frame... (some other auxiliar functions that we call from the hook function)

最后一步是启动Pipeless并提供一个视频流。要启动Pipeless,只需在my-project目录下运行以下命令:

pipeless start --stages-dir .

一旦运行,将提供来自网络摄像头(v4l2)的视频流,并直接在屏幕上显示输出。需要注意的是,必须提供视频流按顺序执行的阶段列表。在这个例子中,它只是onnx-yolo阶段:

pipeless add stream --input-uri "v4l2" --output-uri "screen" --frame-path "onnx-yolo"

结论

创建计算机视觉应用程序是一项复杂的任务,因为有许多因素和必须围绕它实现的子系统。使用像Pipeless这样的框架,启动和运行只需要几分钟,可以专注于为特定用例编写代码。此外,Pipeless的“阶段”是高度可重用的,易于维护,因此维护将会很容易,可以非常快速地迭代。

如果希望参与Pipeless的开发,可以通过它的GitHub存储库来实现。

原文标题:Create a Complete Computer Vision App in Minutes With Just Two Python Functions,作者:Miguel Angel Cabrera

链接:https://www.php.cn/link/e26dbb5b1843bf566ea7ec757f3325c4

以上是如何只用两个Python函数在几分钟内创建完整的计算机视觉应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:51CTO.COM。如有侵权,请联系admin@php.cn删除
10个生成AI编码扩展,在VS代码中,您必须探索10个生成AI编码扩展,在VS代码中,您必须探索Apr 13, 2025 am 01:14 AM

嘿,编码忍者!您当天计划哪些与编码有关的任务?在您进一步研究此博客之前,我希望您考虑所有与编码相关的困境,这是将其列出的。 完毕? - 让&#8217

烹饪创新:人工智能如何改变食品服务烹饪创新:人工智能如何改变食品服务Apr 12, 2025 pm 12:09 PM

AI增强食物准备 在新生的使用中,AI系统越来越多地用于食品制备中。 AI驱动的机器人在厨房中用于自动化食物准备任务,例如翻转汉堡,制作披萨或组装SA

Python名称空间和可变范围的综合指南Python名称空间和可变范围的综合指南Apr 12, 2025 pm 12:00 PM

介绍 了解Python功能中变量的名称空间,范围和行为对于有效编写和避免运行时错误或异常至关重要。在本文中,我们将研究各种ASP

视觉语言模型(VLMS)的综合指南视觉语言模型(VLMS)的综合指南Apr 12, 2025 am 11:58 AM

介绍 想象一下,穿过​​美术馆,周围是生动的绘画和雕塑。现在,如果您可以向每一部分提出一个问题并获得有意义的答案,该怎么办?您可能会问:“您在讲什么故事?

联发科技与kompanio Ultra和Dimenty 9400增强优质阵容联发科技与kompanio Ultra和Dimenty 9400增强优质阵容Apr 12, 2025 am 11:52 AM

继续使用产品节奏,本月,Mediatek发表了一系列公告,包括新的Kompanio Ultra和Dimenty 9400。这些产品填补了Mediatek业务中更传统的部分,其中包括智能手机的芯片

本周在AI:沃尔玛在时尚趋势之前设定了时尚趋势本周在AI:沃尔玛在时尚趋势之前设定了时尚趋势Apr 12, 2025 am 11:51 AM

#1 Google推出了Agent2Agent 故事:现在是星期一早上。作为AI驱动的招聘人员,您更聪明,而不是更努力。您在手机上登录公司的仪表板。它告诉您三个关键角色已被采购,审查和计划的FO

生成的AI遇到心理摩托车生成的AI遇到心理摩托车Apr 12, 2025 am 11:50 AM

我猜你一定是。 我们似乎都知道,心理障碍包括各种chat不休,这些chat不休,这些chat不休,混合了各种心理术语,并且常常是难以理解的或完全荒谬的。您需要做的一切才能喷出fo

原型:科学家将纸变成塑料原型:科学家将纸变成塑料Apr 12, 2025 am 11:49 AM

根据本周发表的一项新研究,只有在2022年制造的塑料中,只有9.5%的塑料是由回收材料制成的。同时,塑料在垃圾填埋场和生态系统中继续堆积。 但是有帮助。一支恩金团队

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用