日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2024/1/16 windows 28 coder
生活随笔 收集整理的這篇文章主要介紹了 【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? 2023.2 于 2023 年 11 月 16 日發布,該工具包帶來了挖掘生成人工智能全部潛力的新功能。更多的生成式 AI 覆蓋和框架集成,以最大限度地減少代碼更改,并且擴展了對直接 PyTorch 模型轉換的模型支持。支持更多新的模型,包括 LLaVA、chatGLM、Bark 和 LCM 等著名模型。支持更廣泛的大型語言模型(LLM)和更多模型壓縮技術,支持運行時推理支持以下 Int4 模型壓縮格式,通過神經網絡壓縮框架(NNCF) 進行本機 Int4 壓縮等一系列新的功能。

通過OpenVINO?官網信息,我們可以看出,目前OpenVINO?已經能夠在蘋果MacOS系統、M系列芯片上運行,這為使用MacOS系統的開發者提供了很好的工具。因此在此處,我們將在MacOS系統、M2芯片的Macbook Air電腦上,展示使用 OpenVINO? C++ API 部署深度學習模型的詳細流程。

2. OpenVINO? 下載

官方在發布版本中已經提供MacOS系統的編譯庫,因此在此處我們只需要下載官方編譯庫即可

首先訪問OpenVINO?網站,依次選擇版本號、操作系統、安裝方式等內容,然后點擊下載,如下圖所示:

下面是官方編譯的文件,此處主要提供了兩個版本,一個是適用于蘋果電腦之前的版本,主要是MacOS 10以及之前的版本系統并且使用的是Intel CPU,另一個是使用了蘋果的M系列芯片的新版本電腦,主要是MacOS 11 之后的系統。大家可以根據自己的電腦進行選擇:

下載完后,將該文件解壓到任意文件夾,在此處為了方便后續使用一集更新,將其解壓到用戶文件夾,如下圖所示:

后續我們會使用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 .

接下來就是進行項目編譯,CMake編譯后會生成Makefile文件,之后就可以運行make命令進行項目最后的編譯,然后就可以直接運行生成的項目文件,如下所示:

make
./test_openvino

上圖中展示了項目最后運行結果,可以看出,此處使用的模型輸入大小為[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系統的開發者提供了很好的范例與參考。

總結

以上是生活随笔為你收集整理的【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美一区二区三区系列电影 | xxx日本少妇 | 日韩欧美不卡 | 国产精品久久久久久无人区 | 欧美亚洲精品一区 | 内射中出日韩无国产剧情 | 免费成人激情视频 | 精品一区日韩 | 久久奇米 | 成 年人 黄 色 片 | 欧美三级大片 | 日本一本在线 | 爱情岛论坛亚洲品质自拍 | 91成人精品 | 免费日批网站 | a∨鲁丝一区鲁丝二区鲁丝三区 | 国产成人精品免费 | 最新国产网址 | 亚洲精品男人的天堂 | 美女诱惑一区二区 | 丝袜一区二区三区 | 加勒比一区二区 | 国产精品成人av性教育 | 色婷婷yy| 成人h动漫精品一区二区无码 | 伊人影院亚洲 | 97人妻精品一区二区 | 一区二区福利视频 | 欧美黑人一区二区三区 | 欧美性生活免费视频 | 亚洲一区二区视频 | 欧美天堂 | 亚洲天天 | 人妻少妇偷人精品无码 | 白浆av| 天天色视频 | 伊人狠狠干 | 国产精品成人在线 | 日日干av| 男生和女生一起差差差很痛的视频 | 主人性调教le百合sm | 久久亚洲综合国产精品99麻豆精品福利 | 好吊操免费视频 | 日韩一级片免费 | 国产乱妇乱子 | 麻豆视频国产精品 | 国产成人精品一区在线播放 | jizz91| 国产chinese男男网站大全 | 久久国产精品一区二区三区 | 好吊色视频988gao在线观看 | 反差在线观看免费版全集完整版 | 国产久一| 亚洲最色网站 | 国产日韩在线观看一区 | 国产精品一区二区三区四区在线观看 | 极品国产一区 | 撸啊撸在线视频 | 国产精品5区 | 自拍偷在线精品自拍偷无码专区 | 嫩草影院菊竹影院 | 无罩大乳的熟妇正在播放 | 亚洲日本中文字幕在线 | 男生女生搞鸡视频 | 亚洲AV无码乱码国产精品色欲 | 美丽的姑娘在线观看免费 | 91毛片网站 | 影音先锋国产精品 | 欧美高清久久 | 亚洲自啪 | 香蕉视频黄在线观看 | 欧美大片免费在线观看 | 国产91在线高潮白浆在线观看 | 色综合一区二区三区 | 欧美精品久久久久久久多人混战 | 国产精品99久久久久久久久久久久 | 午夜精品亚洲 | 日韩 欧美 亚洲 | 99在线视频免费观看 | 99蜜桃臀久久久欧美精品网站 | 国产一区二区激情 | 91九色丨porny丨国产jk | 亚洲天堂网在线视频 | 婷婷九月| 日韩三级国产精品 | 在线免费观看欧美大片 | 影音先锋波多野结衣 | 亚洲天堂美女视频 | 好男人视频www | 很色的网站 | 国产手机在线视频 | 欧美乱强伦 | 日韩欧美四区 | 六月丁香在线视频 | av动漫免费观看 | 献给魔王伊伏洛基亚吧动漫在线观看 | 欧美一区欧美二区 | 亚洲第一二区 | 理论片在线观看理伦片 |