2022版本的安裝包跟之前的不一樣地方包括: -OpenCV部分不在默認(rèn)安裝包中 -Dev Tools 跟 Runtime安裝方式不同 -Dev Tools包模型轉(zhuǎn)換器跟其它開(kāi)發(fā)組件 -Runtime主要負(fù)責(zé)模型推理,,支持Python跟C++
在intel官方下載頁(yè)面選擇如下: 下載之后點(diǎn)擊安裝,,出現(xiàn)的第一個(gè)畫(huà)面如下: 點(diǎn)擊【Continue】 選擇第一種,推薦安裝方式,,點(diǎn)擊【Continue】 點(diǎn)擊【Install】就會(huì)開(kāi)始正式安裝過(guò)程!這個(gè)過(guò)程中如果你沒(méi)有安裝VS2019會(huì)有一個(gè)警告出現(xiàn),,直接選擇忽視,繼續(xù)安裝即可!因?yàn)槲襐S2017,。 配置OpenVINO2022開(kāi)發(fā)環(huán)境 主要是針對(duì)C++部分,使用VS2017配置,。這部分跟以前沒(méi)有太大差異,同樣需要配置包含路徑,,庫(kù)目錄與附加依賴(lài)項(xiàng)添加,跟環(huán)境變量,,這幾個(gè)部分的配置分別如下:1. 包含目錄 2. 庫(kù)目錄 3. 附加依賴(lài)項(xiàng)添加 這樣就完成了 最后配置好環(huán)境變量 然后重啟VS2017,執(zhí)行如下代碼測(cè)試: #include <openvino/openvino.hpp> #include <opencv2/opencv.hpp>
using namespace cv; using namespace std;
int main(int argc, char** argv) { // 創(chuàng)建IE插件, 查詢(xún)支持硬件設(shè)備 ov::Core ie; vector<string> availableDevices = ie.get_available_devices(); for (int i = 0; i < availableDevices.size(); i++) { printf('supported device name : %s \n', availableDevices[i].c_str()); } return 0; }
運(yùn)行結(jié)果如下: OpenVINO2022版本推理開(kāi)發(fā)跟之前版本最大的不同在于全新的SDK設(shè)計(jì),新的SDK設(shè)計(jì)顯然對(duì)齊了ONNXRUNTIME,,libtorch等這些部署框架簡(jiǎn)約SDK設(shè)計(jì)中的優(yōu)點(diǎn),從模型的讀取,,到數(shù)據(jù)預(yù)處理,到模型推理,、預(yù)測(cè)結(jié)果解析,在數(shù)據(jù)流通跟推理流程方面都比之前的SDK簡(jiǎn)單易學(xué),,非常方便開(kāi)發(fā)者使用。ov::CompiledModel compiled_model = ie.compile_model(onnx_path, 'AUTO'); ov::InferRequest infer_request = compiled_model.create_infer_request(); 兩行代碼就搞定了,,之前的SDK比較啰嗦,很不符合設(shè)計(jì)的KISS規(guī)則,,現(xiàn)在直接兩行代碼就可以得到推理請(qǐng)求了。另外支持”AUTO”自動(dòng)模式硬件支持,,讓開(kāi)發(fā)這不用在選擇硬件平臺(tái)ov::Tensor input_tensor = infer_request.get_input_tensor(); ov::Shape tensor_shape = input_tensor.get_shape(); 也是兩行代碼搞定,,另外再也不用手動(dòng)設(shè)置各種數(shù)據(jù)格式了,,這樣可以避免開(kāi)發(fā)者犯一些數(shù)據(jù)類(lèi)型設(shè)置錯(cuò)誤,,提高了開(kāi)發(fā)接口的易用性,這點(diǎn)必須點(diǎn)贊,!size_t num_channels = tensor_shape[1]; size_t h = tensor_shape[2]; size_t w = tensor_shape[3]; Mat blob_image; resize(src, blob_image, Size(w, h)); blob_image.convertTo(blob_image, CV_32F); blob_image = blob_image / 255.0;
// NCHW float* image_data = input_tensor.data(); for (size_t row = 0; row < h; row++) { for (size_t col = 0; col < w; col++) { image_data[row * w + col] = blob_image.at(row, col); } } 跟之前類(lèi)似,,這步一直很簡(jiǎn)單,,這樣就OK了,。// 執(zhí)行預(yù)測(cè) infer_request.infer();
// 獲取輸出數(shù)據(jù) auto output_tensor = infer_request.get_output_tensor(); const float* detection = (float*)output_tensor.data(); 很容易獲取輸出的數(shù)據(jù),有了輸出數(shù)據(jù),,下面的解析就會(huì)簡(jiǎn)單很多,可以說(shuō)相比之前代碼,,這里是一步獲取輸出數(shù)據(jù)。最終UNet道理裂紋分割的模型運(yùn)行結(jié)果如下:ov::InferRequest支持直接獲取輸入跟輸出tensor,,分別對(duì)應(yīng)方法是 get_input_tensor() get_output_tensor() 這兩個(gè)方法只有在模型只有一個(gè)輸入跟輸出的時(shí)候才會(huì)正確工作,。當(dāng)模型有多個(gè)輸入跟輸出的時(shí)候請(qǐng)使用方法, 它支持名稱(chēng)作為參數(shù)獲取多個(gè)輸入跟輸出tensor。 第一次配置VS2017之后,,運(yùn)行會(huì)得到C4996錯(cuò)誤,,請(qǐng)把SDL檢查關(guān)掉就好拉,怎么關(guān)掉看這里即可: 升級(jí)為OpenVINO2022版本之后,,我之前的推理程序代碼行數(shù)會(huì)下降20~30代碼行左右,,最新版本C++ SDK真的很不錯(cuò),! 只需要再做一步即可,打開(kāi)環(huán)境變量,,新建PYTHONPATH,如下圖: 記得輸入的路徑最后版本號(hào)一定要跟系統(tǒng)安裝的python版本號(hào)保持一致,。測(cè)試:
|