C 語言實現物體檢測:使用 YOLO 模型

ttocr、com發表於2024-12-04
  1. 環境準備
    在進行物體檢測之前,確保你已經在 C 語言環境中安裝了以下軟體:

OpenCV 用於影像處理。
Darknet 用於 YOLO 模型訓練和推理。
安裝步驟:
安裝 OpenCV:
bash

sudo apt-get install libopencv-dev
安裝 Darknet:
bash

git clone https://github.com/pjreddie/darknet.git
cd darknet
make
下載 YOLO 模型權重:
bash

wget https://pjreddie.com/media/files/yolov3.weights
2. C 語言程式碼:呼叫 YOLO 模型進行物體檢測
假設已經成功安裝了 Darknet 庫,我們將在 C 語言中載入 YOLO 模型並進行物體檢測。程式碼如下:

C 語言示例程式碼:
c

include <stdio.h>

include <opencv2/opencv.hpp>

include "darknet.h"

using namespace cv;

int main() {
// 初始化網路模型
char *cfgfile = "cfg/yolov3.cfg"; // YOLO配置檔案
char *weightfile = "yolov3.weights"; // YOLO預訓練權重檔案
char *datafile = "cfg/coco.data"; // 資料檔案,指定類別資訊

// 載入網路並進行初始化
network *net = load_network(cfgfile, weightfile, 0);
set_batch_network(net, 1);

// 載入影像
Mat image = imread("test.jpg");
if (image.empty()) {
    printf("Could not open or find the image!\n");
    return -1;
}

// 將影像轉換為 YOLO 輸入所需的格式
image *im = mat_to_image(image);

// 執行推理,得到檢測結果
float *predictions = network_predict(net, im->data);

// 解析輸出,篩選出置信度高的框
int num_classes = 80;  // COCO 資料集的類數
float threshold = 0.5;  // 置信度閾值

// 透過後處理得到檢測框
detection *dets = get_network_boxes(net, image.cols, image.rows, threshold, 0.5, 0, 1, &num_dets);

// 篩選檢測框並繪製框
for (int i = 0; i < num_dets; i++) {
    if (dets[i].prob[0] > threshold) {
        Rect box(dets[i].bbox.x, dets[i].bbox.y, dets[i].bbox.w, dets[i].bbox.h);
        rectangle(image, box, Scalar(0, 255, 0), 2);
    }
}

// 顯示檢測結果
imshow("Detection", image);
waitKey(0);  // 等待按鍵事件

return 0;

}更多內容訪問ttocr.com或聯絡1436423940
3. 程式碼解析
初始化 YOLO 網路: 使用 load_network() 載入 YOLO 配置檔案和預訓練權重。
載入影像: 使用 OpenCV 函式 imread() 載入待檢測的影像。
輸入影像格式轉換: 將影像轉換為 YOLO 模型輸入需要的格式。
執行推理: 使用 network_predict() 對影像進行前向推理,得到預測結果。
後處理和繪製框: 解析模型輸出,並根據置信度篩選出檢測框,然後用 OpenCV 在影像上繪製綠色的矩形框。
顯示檢測結果: 使用 OpenCV 的 imshow() 顯示最終檢測結果。
4. 執行程式碼
編譯並執行 C 程式:

bash

gcc -o object_detection object_detection.c -lopencv_core -lopencv_highgui -lopencv_imgproc -L./darknet -l darknet
./object_detection
此命令將編譯程式並執行,顯示包含檢測框的影像。

相關文章