【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

这篇具有很好参考价值的文章主要介绍了【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

英特尔公司发行的模型部署工具OpenVINO™模型部署套件,可以实现在不同系统环境下运行,且发布的OpenVINO™ 2023最新版目前已经支持MacOS系统并同时支持在苹果M系列芯片上部署模型。在该项目中,我们将向大家展示如何在MacOS系统、M2芯片的Macbook Air电脑上,展示使用OpenVINO™ C++ API 部署深度学习模型。

目录
  • 1. OpenVINO™
  • 2. OpenVINO™ 下载
  • 3. 代码实现
  • 4. 项目编译运行
  • 5. 总结

1. OpenVINO™

英特尔发行版 OpenVINO™ 工具套件基于 oneAPI 而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。通过简化的开发工作流程,OpenVINO™ 可赋能开发者在现实世界中部署高性能应用程序和算法。

【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

OpenVINO™ 2023.2 于 2023 年 11 月 16 日发布,该工具包带来了挖掘生成人工智能全部潜力的新功能。更多的生成式 AI 覆盖和框架集成,以最大限度地减少代码更改,并且扩展了对直接 PyTorch 模型转换的模型支持。支持更多新的模型,包括 LLaVA、chatGLM、Bark 和 LCM 等著名模型。支持更广泛的大型语言模型(LLM)和更多模型压缩技术,支持运行时推理支持以下 Int4 模型压缩格式,通过神经网络压缩框架(NNCF) 进行本机 Int4 压缩等一系列新的功能。

【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

通过OpenVINO™官网信息,我们可以看出,目前OpenVINO™已经能够在苹果MacOS系统、M系列芯片上运行,这为使用MacOS系统的开发者提供了很好的工具。因此在此处,我们将在MacOS系统、M2芯片的Macbook Air电脑上,展示使用 OpenVINO™ C++ API 部署深度学习模型的详细流程。

2. OpenVINO™ 下载

官方在发布版本中已经提供MacOS系统的编译库,因此在此处我们只需要下载官方编译库即可

首先访问OpenVINO™网站,依次选择版本号、操作系统、安装方式等内容,然后点击下载,如下图所示:

【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

下面是官方编译的文件,此处主要提供了两个版本,一个是适用于苹果电脑之前的版本,主要是MacOS 10以及之前的版本系统并且使用的是Intel CPU,另一个是使用了苹果的M系列芯片的新版本电脑,主要是MacOS 11 之后的系统。大家可以根据自己的电脑进行选择:

【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

下载完后,将该文件解压到任意文件夹,在此处为了方便后续使用一集更新,将其解压到用户文件夹,如下图所示:

【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

后续我们会使用CMake进行项目编译,因此我们此处无需再做其他的设置。

其他环境配置:

  • MacOS:14.2.1
  • CMake:3.28
  • Make:3.81
  • 编译软件:Visual Studio Code
  • OpenCV:4.8.0
    其他环境配置此处不做过多赘述,OpenCV环境安装可以参考下述文章实现:

3. 代码实现

此处我们以Yolov8图片分类模型为例进行项目测试,由于该模型之前我们已经多次使用,所以在此处不在做耕作的阐述,具体代码如下所示:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sys/time.h>
#include "openvino/openvino.hpp" //openvino header file
#include "opencv2/opencv.hpp"    //opencv header file

int main(int argc, char* argv[])
{
    ov::Version version = ov::get_openvino_version();
    std::cout << version.description << ": " << version.buildNumber << std::endl;

    // -------- Step 1. Initialize OpenVINO Runtime Core --------
    ov::Core core;

    // -------- Step 2. Compile the Model --------
    auto compiled_model = core.compile_model("yolov8s-cls.xml", "CPU");

    // -------- Step 3. Create an Inference Request --------
    ov::InferRequest infer_request = compiled_model.create_infer_request();

    // -------- Step 4.Read a picture file and do the preprocess --------
    cv::Mat img = cv::imread("image.jpg"); 
    // Preprocess the image
    int col = img.cols;
    int row = img.rows;
    int _max = MAX(col, row);
    cv::Mat letterbox_img = cv::Mat::zeros(_max, _max, CV_8UC3);
    img.copyTo(letterbox_img(cv::Rect(0, 0, col, row)));
    
    cv::Mat blob = cv::dnn::blobFromImage(letterbox_img, 1.0 / 255.0, cv::Size(224, 224), cv::Scalar(), true);

    // -------- Step 5. Feed the blob into the input node of the Model -------
    // Get input port for model with one input
    auto input_port = compiled_model.input();
    std::cout << "The shape of input tensor:" << input_port.get_shape() << std::endl;
    // Create tensor from external memory
    ov::Tensor input_tensor(input_port.get_element_type(), input_port.get_shape(), blob.ptr(0));
    // Set input tensor for model with one input
    infer_request.set_input_tensor(input_tensor);

    // -------- Step 6. Start inference --------
    infer_request.infer();
    struct timeval start_time, end_time;
    gettimeofday(&start_time,NULL);
    infer_request.infer();
    gettimeofday(&end_time,NULL);
    // Get the elapsed millisecond time
    double elapsed_time = (end_time.tv_sec - start_time.tv_sec)*1000 + (end_time.tv_usec - start_time.tv_usec)/1000;
    // -------- Step 7. Get the inference result --------
    auto output = infer_request.get_output_tensor(0);
    auto output_shape = output.get_shape();
    std::cout << "The shape of output tensor:" << output_shape << std::endl;

    // -------- Step 8. Postprocess the result --------
    float* output_buffer = output.data<float>();
    std::vector<float> result(output_buffer, output_buffer + output_shape[1]);
    auto max_idx = std::max_element(result.begin(), result.end());
    int class_id = max_idx - result.begin();
    float score = *max_idx;
    std::cout << "Class ID:" << class_id << " Score:" <<score<< std::endl;
    std::cout << "infer time:" <<elapsed_time<< std::endl;
    return 0;
}

在该代码中,主要是获取OpenVINO™版本信息,然后按照模型部署流程部署测试了Yolov8图片分类模型,并打印输出结果以及推理时间。

4. 项目编译运行

在该项目中通过CMake编译项目,定义的CMakeLists.txt文件如下所示:

cmake_minimum_required(VERSION 3.28)
project(test_openvino)
set(OpenCV_DIR /Users/ygj/3lib/opencv_4.8.0/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV_DIR = ${OpenCV_DIR}")
message(STATUS "OpenCV_INCLUDE_DIRS = ${OpenCV_INCLUDE_DIRS}")
message(STATUS "OpenCV_LIBS = ${OpenCV_LIBS}")
set(OpenVINO_DIR /Users/ygj/3lib/openvino_2023.2/runtime/cmake)
set(OpenVINO_LIBs "/Users/ygj/3lib/openvino_2023.2/runtime/lib/arm64/Release/libopenvino.2320.dylib")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
include_directories(
    /Users/ygj/3lib/openvino_2023.2/runtime/include
    ${OpenCV_INCLUDE_DIRS}
)
add_executable(test_openvino test_openvino.cpp )
target_link_libraries(test_openvino ${OpenVINO_LIBs} ${OpenCV_LIBS})

在这个CMakeLists文件中,需要同时配置OpenCV以及OpenVINO这两个依赖库,具体编译以及配置方式参考CMake手册。

接下来就可以项目编译了,在终端中输入一下命令,就可以进行项目配置了,输出结果如下所示:

cmake .

【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

接下来就是进行项目编译,CMake编译后会生成Makefile文件,之后就可以运行make命令进行项目最后的编译,然后就可以直接运行生成的项目文件,如下所示:

make
./test_openvino

【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

上图中展示了项目最后运行结果,可以看出,此处使用的模型输入大小为[1,3,224,224],输出大小为[1,1000],识别结果Class ID=386,查看分类结果字典,图片识别结果与图片一致;模型的推理时间为:7ms。

5. 总结

该项目中,我们在MacOS 14.2.1 系统、M2芯片的 Macbook Air 电脑上,成功使用OpenVINO™ C++ API 部署了Yolov8图片分类深度学习模型,并详细演示了OpenVINO™ C++ API在苹果电脑上使用与配置流程,为使用MacOS系统的开发者提供了很好的范例与参考。文章来源地址https://www.toymoban.com/news/detail-783657.html

到了这里,关于【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 英特尔开始加码封装领域 | 百能云芯

      在积极推进先进制程研发的同时,英特尔正在加大先进封装领域的投入。在这个背景下,该公司正在马来西亚槟城兴建一座全新的封装厂,以加强其在2.5D/3D封装布局领域的实力。据了解,英特尔计划到2025年前,将其最先进的3D Foveros封装产能扩增至目前的四倍,同时还向客

    2024年02月11日
    浏览(29)
  • 英特尔® NUC迷你电脑设置带电自启

    连接电源后英特尔® NUC迷你电脑可以自动启动吗? (intel.cn)    想死的风还是吹到了公司 | 👨‍✈️喂,劳动仲裁吗?这里有人强迫猫咪打工!😿  

    2024年02月07日
    浏览(38)
  • 在英特尔 CPU 上加速 Stable Diffusion 推理

    前一段时间,我们向大家介绍了最新一代的 英特尔至强 CPU (代号 Sapphire Rapids),包括其用于加速深度学习的新硬件特性,以及如何使用它们来加速自然语言 transformer 模型的 分布式微调 和 推理。 英特尔至强处理器: https://www.intel.com/content/www/us/en/products/details/processors/xeon/scal

    2024年02月09日
    浏览(44)
  • 在英特尔 CPU 上微调 Stable Diffusion 模型

    扩散模型能够根据文本提示生成逼真的图像,这种能力促进了生成式人工智能的普及。人们已经开始把这些模型用在包括数据合成及内容创建在内的多个应用领域。Hugging Face Hub 包含超过 5 千个预训练的文生图 模型。这些模型与 Diffusers 库 结合使用,使得构建图像生成工作流

    2024年02月15日
    浏览(79)
  • 联手英特尔,释放星飞分布式全闪存储潜能

    近日,英特尔官网发布了与 XSKY 星辰天合联手打造的解决方案,即 XSKY 的新一代全闪分布式存储系统 XINFINI,该存储系统采用英特尔 QAT 加速数据压缩/解压缩,从而大幅度提升存储系统性能。 全闪存储系统面临的解压缩挑战 在存储系统的数据服务层中,通常需要进行一定的压

    2024年02月01日
    浏览(38)
  • AMD出招,英特尔最不想看到的对手来了

    前段时间的CES上,AMD正式发布Ryzen 7000的3D缓存版,对于游戏玩家来说,Ryzen 7000 3D缓存版算是今年最期待的CPU。上一代的Ryzen7 5800X3D凭借超强的游戏性能和性价比,在德国最大的PC硬件零售商的统计中,甚至成为2022年最畅销的高性能处理器。 有着Ryzen 5000 3D缓存版的珠玉在前,

    2024年02月10日
    浏览(45)
  • 解决英特尔无线网卡WiFi或者蓝牙突然消失问题

    win+R,输入“devmgmt.msc”,检查设备管理器中的无线网卡驱动是否安装好。 访问https://www.intel.cn/content/www/cn/zh/download/19351/windows-10-and-windows-11-wi-fi-drivers-for-intel-wireless-adapters.html下载对应系统版本的英特尔无线网卡WiFi驱动后安装。 访问https://www.intel.cn/content/www/cn/zh/download/18649

    2024年01月17日
    浏览(80)
  • 英特尔:处理器王座不再,AI战溃不成军

    英特尔于北京时间2024年1月26日上午的美股盘后发布了2023年第四季度财报(截止2023年12月),要点如下: 1、核心数据:数据超预期,实际经营面符合预期。 英特尔在2023年第四季度 实现营收154亿美元,略超市场预期(152亿美元)。本季度收入环比继续提升,主要得益于PC客户

    2024年02月19日
    浏览(37)
  • 英特尔和 ARM 将合作开发移动芯片技术,如何看待双方合作?

    最近市场传出Arm要自产芯片,供智能手机与笔电等使用后,外媒指Arm自产芯片将由英特尔晶圆代工部门打造,变成英特尔晶圆代工客户。将采用英特尔18A工艺,可以对标台积电的2纳米。 最近很多小伙伴找我,说想要一些ARM的资料,然后我根据自己从业十年经验,熬夜搞了几

    2024年01月17日
    浏览(42)
  • 英特尔 D435/D435i双目相机 使用指南

    目录 Intel RealSense D435深度相机介绍: 关于左右红外图像: 关于像素深度的检索: Intel RealSense 各种工具: 工具的介绍 相机基本操作 相机自校准 获取相机参数 python脚本 Linux命令行 相机运行并显示画面 获得深度图像 点云 帧对齐 英特尔官方手册:调整深度摄像头以获得最佳

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包