
本文将深入探讨如何利用 OpenVINO™ 异步推理 API 处理图像列表输入,并提供相应的解决方案。正如文章摘要所述,我们将借鉴官方提供的图像分类异步推理 Python 示例,介绍如何将图像文件路径列表作为输入,从而避免使用视频流输入方式。这将帮助开发者更灵活地应用于实际场景,例如从消息队列(如 RabbitMQ)接收图像数据的情况。
异步推理可以显著提高推理效率,尤其是在处理大量数据时。通过将推理任务分解为多个异步请求,可以充分利用 CPU 和 GPU 资源,减少等待时间,从而提升整体吞吐量。
OpenVINO™ 官方提供了一个图像分类异步推理 Python 示例,该示例展示了如何使用异步推理 API 处理图像输入。该示例的代码可以在 OpenVINO 仓库中找到:Image Classification Async Python Sample 和 OpenVINO repository.
这个示例的关键在于它支持通过图像文件路径列表作为输入。这意味着您可以将从队列或其他来源获取的图像文件路径添加到列表中,然后将该列表传递给推理引擎。
以下是一个改编自官方示例的简化代码片段,展示了如何使用图像文件路径列表进行异步推理:
import openvino.runtime as ov
import cv2
import numpy as np
import os
def async_inference_image_list(image_paths, model_path, device="CPU"):
"""
使用 OpenVINO 异步推理 API 处理图像列表。
Args:
image_paths: 图像文件路径列表。
model_path: OpenVINO 模型文件路径 (.xml)。
device: 推理设备 (例如 "CPU", "GPU")。
"""
# 1. 加载 OpenVINO 模型
core = ov.Core()
model = core.read_model(model_path)
compiled_model = core.compile_model(model=model, device_name=device)
# 2. 获取输入和输出层
input_layer = compiled_model.input(0)
output_layer = compiled_model.output(0)
# 3. 获取输入尺寸
input_shape = input_layer.shape
_, _, h, w = input_shape
# 4. 创建异步推理请求
infer_requests = [compiled_model.create_infer_request() for _ in range(2)] # 使用两个请求实现流水线
# 5. 预处理图像并提交推理请求
results = []
for i, image_path in enumerate(image_paths):
# 读取图像
image = cv2.imread(image_path)
if image is None:
print(f"Error: Could not read image at {image_path}")
continue
# 调整图像尺寸并进行预处理
resized_image = cv2.resize(image, (w, h))
input_data = np.expand_dims(resized_image.transpose(2, 0, 1), 0)
# 获取当前和下一个推理请求
current_request_id = i % 2
next_request_id = (i + 1) % 2
# 设置输入张量并启动异步推理
infer_requests[current_request_id].set_tensor(input_layer, ov.Tensor(input_data))
infer_requests[current_request_id].start_async()
# 如果不是第一张图像,则等待上一个推理请求完成
if i > 0:
infer_requests[next_request_id].wait()
output = infer_requests[next_request_id].get_tensor(output_layer).data
results.append(output)
# 6. 等待最后一个推理请求完成
infer_requests[(len(image_paths) - 1) % 2].wait()
output = infer_requests[(len(image_paths) - 1) % 2].get_tensor(output_layer).data
results.append(output)
return results
# 示例用法
if __name__ == "__main__":
# 创建一些示例图像文件(或者使用你自己的图像文件路径)
image_paths = ["image1.jpg", "image2.jpg", "image3.jpg"] # 替换为实际图像路径
for path in image_paths:
if not os.path.exists(path):
# 创建一个假的图像文件
blank_image = np.zeros((100, 100, 3), dtype=np.uint8)
cv2.imwrite(path, blank_image)
model_path = "your_model.xml" # 替换为你的 OpenVINO 模型路径
# 执行异步推理
results = async_inference_image_list(image_paths, model_path)
# 打印结果
for i, result in enumerate(results):
print(f"Image {i+1} result: {result}")代码解释:
注意事项:
通过使用 OpenVINO™ 提供的图像分类异步推理 Python 示例,我们可以轻松地实现图像列表的异步推理。这种方法避免了使用视频流输入,更加灵活,适用于各种需要处理图像数据的场景。通过调整代码中的参数和预处理步骤,您可以将其应用于不同的模型和任务,从而充分利用 OpenVINO™ 的强大功能。记住,异步推理的关键在于合理地管理推理请求,充分利用硬件资源,从而提高整体推理效率。
以上就是OpenVINO 异步推理:图像列表输入解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号