物體檢測(YOLO)示例:使用 C 語言

ttocr、com發表於2024-12-03

在深度學習中,YOLO(You Only Look Once)是一種非常流行的目標檢測方法,它透過迴歸問題的形式進行影像中的物體檢測。YOLO 屬於 One-Stage 方法,它透過一個神經網路直接從影像中預測邊界框和類別機率。我們將使用 C 語言 來實現一個簡單的物體檢測流程。

  1. 安裝和環境配置
    首先,確保你已準備好深度學習框架所需的工具:

作業系統:Ubuntu 16.04
C 編譯器:gcc
深度學習框架:Darknet(YOLO 的實現)
我們將使用 Darknet 作為框架來執行 YOLO 模型,並在其上進行物體檢測。

bash

安裝 Darknet 和依賴

git clone https://github.com/pjreddie/darknet
cd darknet
make
2. 配置 YOLO 模型
在 Darknet 中,我們可以使用 YOLO 模型進行物體檢測。為了加速訓練,我們將使用 YOLOv3 的 Tiny 版本,這樣可以在較低的計算資源下獲得較快的速度。

在 cfg/yolov3-tiny.cfg 檔案中,我們需要做一些調整:

plaintext

修改 batch size 和 subdivisions

batch=24
subdivisions=8

修改 filters 和 classes 設定

filters=(classes + 5) * 3
classes=1 # 只檢測文字
3. 編寫 C 語言程式進行物體檢測
在 C 語言中,我們將呼叫 Darknet 提供的 API 來載入 YOLO 模型並進行物體檢測。以下是一個簡單的 C 程式,演示如何使用 Darknet 進行物體檢測。

c

include <stdio.h>

include <stdlib.h>

include <string.h>

include "darknet.h"

void detect_objects(char *cfg_file, char *weights_file, char *image_file)
{
// 載入網路配置和權重檔案
network *net = load_network(cfg_file, weights_file, 0);
set_batch_network(net, 1);

// 載入影像
image im = load_image_color(image_file, 0, 0);

// 使用網路進行檢測
float *predictions = network_predict(net, im.data);

// 獲取檢測結果
int nboxes = 0;
detection *dets = get_network_boxes(net, im.w, im.h, 0.5, 0.5, 0, 1, &nboxes);

// 顯示檢測結果
draw_detections(im, dets, nboxes, 0.5, coco_names, 80);

// 儲存檢測後的影像
save_image(im, "predictions.jpg");

// 釋放資源
free_detections(dets, nboxes);
free_image(im);

}

int main(int argc, char **argv)
{
if (argc < 4) {
fprintf(stderr, "Usage: %s <cfg_file> <weights_file> <image_file>\n", argv[0]);
return -1;
}

// 獲取輸入檔案
char *cfg_file = argv[1];
char *weights_file = argv[2];
char *image_file = argv[3];

// 呼叫物體檢測函式

更多內容訪問ttocr.com或聯絡1436423940
detect_objects(cfg_file, weights_file, image_file);

return 0;

}
4. 編譯 C 程式
確保你已經安裝了 Darknet 和相關依賴(例如 OpenCV 和 CUDA)。然後可以透過以下命令編譯 C 程式:

bash

gcc -o yolo_detect yolo_detect.c -L./darknet -l darknet -I./darknet
5. 執行物體檢測
現在可以執行程式,傳入配置檔案、權重檔案和測試圖片進行物體檢測:

bash

./yolo_detect cfg/yolov3-tiny.cfg weights/yolov3-tiny.weights test_image.jpg
程式將輸出包含檢測框的影像,並儲存為 predictions.jpg。

相關文章