<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在MacOS上編譯OpenVINO C++項目呢?

英特爾物聯網 ? 來源:英特爾物聯網 ? 2024-01-11 18:07 ? 次閱讀

前言

英特爾公司發行的模型部署工具 OpenVINO 模型部署套件,可以實現在不同系統環境下運行,且發布的 OpenVINO 2023 最新版目前已經支持 MacOS 系統并同時支持在蘋果 M 系列芯片上部署模型。在該項目中,我們將向大家展示如何在 MacOS 系統、M2芯片的 Macbook Air 電腦上,展示使用 OpenVINO C++ API 部署深度學習模型。

1. OpenVINO

英特爾發行版 OpenVINO 工具套件基于 oneAPI 而開發,可以加快高性能計算機視覺和深度學習視覺應用開發速度工具套件,適用于從邊緣到云的各種英特爾平臺上,幫助用戶更快地將更準確地真實世界結果部署到生產系統中。通過簡化的開發工作流程,OpenVINO 可賦能開發者在現實世界中部署高性能應用程序和算法。

5a94c9e4-b067-11ee-8b88-92fbcf53809c.png

OpenVINO 2023.2 于 2023 年 11 月 16 日發布,該工具包帶來了挖掘生成人工智能全部潛力的新功能。更多的生成式 AI 覆蓋和框架集成,以最大限度地減少代碼更改,并且擴展了對直接 PyTorch 模型轉換的模型支持。支持更多新的模型,包括 LLaVA、chatGLM、Bark 和 LCM 等著名模型。

支持更廣泛的大型語言模型(LLM)和更多模型壓縮技術,支持運行時推理支持以下 Int4 模型壓縮格式,通過神經網絡壓縮框架(NNCF) 進行本機 Int4 壓縮等一系列新的功能。

5c5136dc-b067-11ee-8b88-92fbcf53809c.png

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

2. OpenVINO 下載

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

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

OpenVINO 官網:

https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html

5c714d14-b067-11ee-8b88-92fbcf53809c.png

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

5c94f8ae-b067-11ee-8b88-92fbcf53809c.png

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

5cb08222-b067-11ee-8b88-92fbcf53809c.png

后續我們會使用 CMake 進行項目編譯,因此我們此處無需再做其他的設置。

其他環境配置:

● MacOS:14.2.1

● CMake:3.28

● Make:3.81

●編譯軟件:Visual Studio Code

● OpenCV:4.8.0 其他環境配置此處不做過多贅述,OpenCV 環境安裝可以參考下述文章實現:【OpenCV】在 MacOS 上源碼編譯 OpenCV

3. 代碼實現

此處我們以 Yolov8圖片分類模型為例進行項目測試,由于該模型之前我們已經多次使用,所以在此處不再做耕作的闡述,具體代碼如下所示:

#include 
#include 
#include 
#include 
#include 
#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::zeros(_max, _max, CV_8UC3);
 ? ?img.copyTo(letterbox_img(cv::Rect(0, 0, col, row)));
 ? ?
 ? ?cv::Mat blob = cv::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();
  std::vector 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:" <

在該代碼中,主要是獲取 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 .

5cc553b4-b067-11ee-8b88-92fbcf53809c.png

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

make
./test_openvino

5cd9f04e-b067-11ee-8b88-92fbcf53809c.png

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






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 英特爾
    +關注

    關注

    60

    文章

    9421

    瀏覽量

    168826
  • MacOS
    +關注

    關注

    0

    文章

    196

    瀏覽量

    17238
  • 深度學習
    +關注

    關注

    73

    文章

    5237

    瀏覽量

    119908
  • OpenVINO
    +關注

    關注

    0

    文章

    59

    瀏覽量

    91

原文標題:在 MacOS 上編譯 OpenVINO C++ 項目 | 開發者實戰

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Tisan SDK c/c++ 編譯連接問題

    在Tisan 提供的SDK即eclipse c/c++修改源碼后進行編譯鏈接可是工程build后生成的.bin文件沒有變化,就算故意語法出錯也無法檢測出來,請問這是哪里出問題了?怎樣
    發表于 02-22 19:36

    CC2540工程如何在C的工程中支持C++?

    CC2540工程都是采用C語言進行創建編譯的,應用要求增加C++的類,編譯失敗。通過修改IAR編譯器配置
    發表于 03-21 11:36

    何在ubuntu中用vscode編譯調試C\C++

    vscode軟件并進行安裝:2.等待安裝完成之后打開界面如下:2.在ubuntu中用vscode編譯調試C\C++在vscode中安裝C++的插件,按ctrl+p調出命令行,在上面輸入
    發表于 12-14 07:11

    如何編譯已有的C++去生成可在OpenHarmony系統使用的動態庫文件

    原有Linux環境下的C++ 項目,可通過在CMakeList文件中設置使用的工具鏈,編譯出各平臺開發板可使用的so文件。請問,我現在在Hi3516開發板
    發表于 03-16 10:42

    何在macOS Mojave下搭建ARM Cortex-A8的交叉編譯環境

    大家好,我想問一下如何在 macOS Mojave 下搭建 ARM Cortex-A8 的交叉編譯環境,看起來官方并沒有提供直接可用的二進制包,如果需要編譯的話又大概需要哪些參數
    發表于 09-16 14:11

    想問一下如何在macOS Mojave下搭建ARM Cortex-A8的交叉編譯環境

    Hi,大家好,我想問一下如何在 macOS Mojave 下搭建 ARM Cortex-A8 的交叉編譯環境,看起來官方并沒有提供直接可用的二進制包,如果需要編譯的話又大概需要哪些參數
    發表于 09-22 10:34

    何在MacOS下使用STM32CubeIDE打開示例Cube項目?

    我在 MacOS 下使用 STM32CubeIDE 打開 Cube 提供的項目時遇到問題。 - 大多數 ST 提供的視頻只是說“導航到 STM32CubeIDE 文件夾并雙擊‘.project’文件
    發表于 12-28 10:20

    STM32WL55 SBSFU未在MacOS編譯是為什么?

    我正在使用 STM32Cube_FW_WL_V1.0.0 開發一個項目。我無法編譯包含在 BFU_1_Image 示例項目中的 1_Image_SECoreBin 項目。我在
    發表于 01-05 08:10

    何在新版本中將C項目轉換為C++?

    我正在嘗試將 C 項目轉換為 C++。在以前的版本中,屬性中有一個“轉換為 C++”選項。我在 1.5.1 中找不到這個。如何在新版本中轉換
    發表于 01-06 08:13

    使用C++項目的正確方法是什么?

    在 STM32CubeIDE 中,我創建了一個 C++ 項目。但是 `main.c` 仍然以 .c 擴展名生成,并使用 C
    發表于 02-07 08:34

    何在macOS的Eclipse中創建新項目?

    昨天我在我的 macbook 安裝了 esp-open-sdk,我想在 Eclipse 中開發和構建它,就像在 Windows 一樣,使用 UDK(非官方開發工具包)和 make 目標。聽取建議,如何在
    發表于 06-12 06:49

    如何為Arm編譯Cc++代碼

    編寫CC++應用程序時,需要使用編譯器工具鏈將其編譯為機器代碼。然后,您可以在基于Arm的處理器運行此
    發表于 08-02 17:28

    使用OpenVINO運行C++ API創建輸入tensor并執行推理遇到的問題求解

    使用 OpenVINO? 運行時 C++ API 創建輸入 tensor 并執行推理: ov::Tensor input_tensor = ov::Tensor(input_type
    發表于 08-15 08:22

    何在使用Inspector運行OpenVINO C++樣本時避免內存泄露?

    運行OpenVINO? 圖像分類 Async C++示例帶英特爾? Inspector用于檢查內存問題。使用命令: $ pwd /home/centos
    發表于 08-15 06:18

    何在Microsoft Visual Studio 2015中使用英特爾C++編譯

    此視頻演示了如何在Microsoft * Visual Studio 2015 *中使用英特爾?C++編譯
    的頭像 發表于 10-30 06:03 ?6587次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>