AI學習筆記三十二:YOLOv8-CPP-Inference測試(Linux版本)

若該文為原創文章,轉載請注明原文出處。

主要介紹如何在Linux系統上安裝和部署基于YOLOv8的C++推理項目

一、服務器準備

使用AutoDL平臺租用服務器

AutoDL有git加速,可以自行啟用

二、環境配件
1、檢查Opencv版本
pkg-config --modversion opencv4

如果版本為4.5,則需升級為4.9,否則ONNX模型在加載時可能報錯

2、檢查CMake版本
cmake --version

如果沒有安裝

sudo apt install cmake

三、安裝Opencv 4.9

運行腳本

chmod +x install_opencv_490_fresh.sh
?
./install_opencv_490_fresh.sh

腳本:

#!/bin/bashecho "=== Step 1: Installing dependencies ==="
apt update
apt install -y build-essential cmake git pkg-config \libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev \libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev \libtiff-dev gfortran openexr libatlas-base-dev python3-dev \python3-numpy libtbb-devecho "=== Step 2: Cloning OpenCV and opencv_contrib (version 4.9.0) ==="cd ~
rm -rf ~/opencv ~/opencv_contrib
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.gitcd opencv
git checkout 4.9.0
cd ../opencv_contrib
git checkout 4.9.0echo "=== Step 3: Configuring build with pkg-config generation ==="
cd ~/opencv
rm -rf build
mkdir build
cd buildcmake -D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=/usr/local \-D CMAKE_EXTRA_MODULES_PATH=~/opencv_contrib/modules \-D BUILD_EXAMPLES=OFF \-D WITH_CUDA=OFF \-D OPENCV_GENERATE_PKGCONFIG=ON \..if [ $? -ne 0 ]; thenecho "CMake failed! Check the error log."exit 1
fiecho "=== Step 4: Building OpenCV ==="
make -j$(nproc)echo "=== Step 5: Installing OpenCV ==="
make install
ldconfigecho "=== Step 6: Done! Verifying installation ==="
/usr/local/bin/opencv_version
?

編譯時間很長,耐心等待

驗證

pkg-config --modversion opencv4
四、YOLOV8模型導出
git clone https://github.com/ultralytics/ultralytics.git
?
cd ultralytics
?
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

導出ONNX模型(簡化版本,兼容OpenCV DNN)

yolo export model=yolov8s.pt format=onnx opset=12 dynamic=False simplify=True
五、適配Linux無圖形界面

將原來的顯示代碼替換為保存圖片

替換前:

cv:imshow("Inference", frame);
?
cv::waitKey(-1);

替換后:

std::string outputPath = "output_" + std::to_string(i) + ".jpg";
?
cv::imwrite(outputPath, frame);
?
std::cout << "Saved result to: " << outputPath << std::endl;
六、修改文件

修改main.cpp文件,主要是修改路徑和要不要啟用GPU

七、CMakeLists.txt示例
# 設置最低CMake版本要求
cmake_minimum_required(VERSION 3.5)
# 項目名稱和版本
project(Yolov8CPPInference VERSION 0.1)
#設置包含當前目錄的頭文件路徑
set(CMAKE_INCLUDE_CURRENT_DIR ON)
?
#----------------- CUDA 設置 -----------------
# 設置 CUDA 路徑(根據系統配置調整)
set(CUDA_TOOLKIT_ROOT_DIR "/usr/local/cuda")
# 查找并啟用 CUDA (要求至少為CUDA 11)
find_package(CUDA 11 REQUIRED)
?
# 設置 CUDA 標準為 C++11
set(CMAKE_CUDA_STANDARD 11)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
# !CUDA
#-------------------------------------------
?
#----------------- OpenCV 設置 -----------------
# OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
# !OpenCV
#-------------------------------------------
?
# 定義項目源文件
set(PROJECT_SOURCESmain.cpp
?inference.hinference.cpp
)
?
# 生成可執行文件
add_executable(Yolov8CPPInference ${PROJECT_SOURCES})
?
# 鏈接 OpenCV 庫
target_link_libraries(Yolov8CPPInference ${OpenCV_LIBS})
?
八、構建與運行項目
# 創建構建項目
mkdir build
# 進入構建目錄 
cd build
# 生成Makefile文件
cmake ..
# 編譯項目
make
?
# 運行推理程序
./Yolov8CPPInference
?
?

后續想部署到自己的虛擬機上,并使用攝像頭實時檢測

如有侵權,或需要完整代碼,請及時聯系博主。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89242.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89242.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89242.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

113:路徑總和 II

題目&#xff1a;給你二叉樹的根節點 root 和一個整數目標和 targetSum &#xff0c;找出所有 從根節點到葉子節點 路徑總和等于給定目標和的路徑。葉子節點 是指沒有子節點的節點。解答&#xff1a;用 go主要坑有兩個&#xff0c;一個是二維結果切片傳遞用指針&#xff0c;一個…

Perl 數組

Perl 數組 在Perl編程語言中&#xff0c;數組是處理數據的一種強大工具。數組允許我們將多個值存儲在單個變量中&#xff0c;從而簡化了代碼并提高了效率。本文將詳細介紹Perl數組的創建、操作、遍歷以及一些高級用法。 數組的創建 在Perl中&#xff0c;創建一個數組非常簡單。…

優先隊列的實現

目錄 引言 堆的基本概念與特性 堆的插入與向上調整 堆的刪除與向下調整 優先隊列的設計思路 模板參數設計 比較器的作用 核心接口實現 push pop top 附錄(完整代碼) 引言 優先隊列&#xff08;Priority Queue&#xff09;是一種特殊的隊列數據結構&#xff0c;其中每…

現代CSS實戰:用變量與嵌套重構可維護的前端樣式

現代CSS實戰&#xff1a;用變量與嵌套重構可維護的前端樣式 引言 在傳統CSS開發中&#xff0c;我們常常陷入「樣式冗余」與「維護噩夢」的循環&#xff1a; 想調整主題色&#xff1f;得全局搜索所有 #3498db 手動替換&#xff0c;稍有不慎就漏改某個角落&#xff1b; 寫嵌套…

DHTMLX Suite 9.2 重磅發布:支持歷史記錄、類Excel交互、剪貼板、拖放增強等多項升級

全球知名的 JavaScript UI 組件庫 DHTMLX Suite 迎來 9.2 新版本&#xff01;此次更新雖為次版本號&#xff0c;卻實質性提升了 Grid 網格組件的交互能力與用戶體驗&#xff0c;引入了包括歷史記錄管理、剪貼板操作、數據選擇范圍管理、Block 區塊選擇等多項高級模塊&#xff0…

深入理解Java中的Map.Entry接口

文章目錄深入理解Java中的Map.Entry接口1. 接口定義2. 核心方法解析2.1 基本方法2.2 Java 8新增的靜態方法3. 基本使用示例3.1 遍歷Map的條目3.2 修改Map中的值3.3 使用比較器排序4. Java 8/9增強特性4.1 與Stream API結合4.2 Java 9的equals和hashCode默認方法5. 實際應用場景…

AI培訓學習2

不要打擾用戶的習慣&#xff0c;比如APP右下角的我的&#xff0c;放到第一個就不合適 先抄再超 lifeTime value NPS: 評價 Product market 平衡 ARPU&#xff1a; LT活躍時長 游戲中好友的重要性 不花錢存活率很少 如何花錢&#xff0c;1分錢買東西 聯影醫療 figma uizard…

npm 安裝時候怎么指定某一個子包的版本 overrides

有時候用 npm install 安裝的時候會報錯&#xff0c;比如 express 包依賴 "escape-html": "^1.0.2" 版本的包&#xff0c;但是因為 escape-html" 升級到 1.0.3 版本了&#xff0c;但是這個版本有問題&#xff0c;導致express 下載不下來。怎么固定下載…

python學智能算法(十九)|SVM基礎概念-超平面

引言 前序學習進程中&#xff0c;對向量相關的基本知識進行了學習&#xff0c;鏈接為&#xff1a; 向量的值和方向 向量點積 在實際的支持向量機算法使用中&#xff0c;最核心的目標是找出可以實現分類的超平面&#xff0c;超平面就是分割的點、線或者面&#xff0c;不要在這個…

python 基于 httpx 的流式請求

文章目錄1. 環境介紹2. 同步客戶端2.1. 面向過程2.1.1. 流式輸出2.1.2. 非流式輸出2.2. 面向對象3. 異步客戶端3.1. 面向過程3.2. 面向對象3.3. Attempted to call a sync iterator on an async stream.參考&#xff1a;https://www.jb51.net/article/262636.htm次要參考&#…

Python 數據建模與分析項目實戰預備 Day 4 - EDA(探索性數據分析)與可視化

? 今日目標 使用 Pandas Matplotlib/Seaborn 對簡歷數據進行探索性分析分析不同字段與目標變量的相關性通過可視化呈現簡歷篩選的潛在規律&#x1f9fe; 一、建議分析內容 &#x1f539; 分類字段分析字段圖表建議說明degree柱狀圖&#xff08;分組通過率&#xff09;分析學歷…

力扣每日一題--2025.7.17

&#x1f4da; 力扣每日一題–2025.7.17 &#x1f4da; 3202. 找出有效子序列的最大長度 II&#xff08;中等&#xff09; 今天我們要解決的是力扣上的第 3202 題——找出有效子序列的最大長度 II。這道題是昨天 3201 題的擴展&#xff0c;需要我們處理更一般化的情況。 ??…

github不能訪問怎么辦

訪問&#xff1a;“github.com”國內多個地點網站測速結果_網站測速 - 站長工具訪問“github.global.ssl.fastly.net”國內多個地點網站測速結果_網站測速 - 站長工具復制紅框中的ip 打開“C:\Windows\System32\drivers\etc\hosts”文件輸入&#xff1a; 20.205.243.166 githu…

【深度學習新浪潮】AI在finTech領域有哪些值得關注的進展?

近年來,AI在金融科技(FinTech)領域的應用呈現爆發式增長,尤其在大模型技術突破和政策支持的雙重驅動下,多個關鍵領域取得了顯著進展。以下是值得關注的核心方向及具體案例: 一、大模型技術重塑金融服務范式 以DeepSeek為代表的國產大模型通過開源和低成本部署(本地化成…

【中等】題解力扣22:括號生成

題目詳情 數字 n 代表生成括號的對數&#xff0c;設計一個函數生成所有可能的并且有效的括號組合。 示例 1&#xff1a; 輸入&#xff1a;n 3 輸出&#xff1a;[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2&#xff1a; 輸入&#xff1a;n 1 輸出&#…

【JEECG 組件擴展】JSwitch開關組件擴展單個多選框樣式

功能說明&#xff1a;基于JeecgBoot開源框架&#xff0c;JSwitch開關組件擴展&#xff0c;支持單個多選樣式。效果展示&#xff1a;使用示例&#xff1a;{field: JSwitch,component: JSwitch,label: JSwitch,},{field: JSwitchCheckBox,component: JSwitch,label: JSwitchCheck…

(轉)Kubernetes基礎介紹

Kubernetes是用于自動部署、擴展和管理容器化應用程序的開源系統。

vue 播放海康m3u8視頻流筆記

1、安裝hls.jsnpm i hls 2、使用<el-dialogtitle"監控"top"5vh":visible.sync"dialogVisible"width"30%"><video id"video" style"width:100%;height:300px" controls><sourcetype"applicati…

如何清除 npm 緩存

清除 npm 緩存&#xff1a;利弊分析與操作指南 在使用 Node.js 和 npm 進行項目開發時&#xff0c;我們經常會與 npm install 命令打交道。這個過程中&#xff0c;npm 會在本地建立一個緩存機制&#xff0c;用以存儲已下載的包&#xff0c;從而顯著提升后續安裝的速度。然而&am…

Java學習-----消息隊列

消息隊列是分布式系統中重要的組件之一。使用消息隊列主要是為了通過異步處理提高系統性能和削峰、降低系統耦合性。使用消息隊列主要有三點好處&#xff1a;&#xff08;1&#xff09;通過異步處理提高系統性能&#xff08;減少響應所需時間&#xff09;&#xff1a;用戶提交請…