- 環境準備
在進行物體檢測之前,確保你已經在 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
此命令將編譯程式並執行,顯示包含檢測框的影像。