21xrx.com
2024-12-22 16:35:10 Sunday
登录
文章检索 我的文章 写文章
使用OpenCV调用YOLOv4模型
2023-09-26 18:50:46 深夜i     --     --
OpenCV YOLOv4 模型调用

OpenCV是一款广泛应用于计算机视觉领域的开源库。它提供了丰富的功能和工具,能够方便地进行图像处理、特征提取和物体识别等任务。而YOLOv4则是一种基于卷积神经网络的物体检测模型,具有快速、准确和实时性的优势。本文将介绍如何使用OpenCV调用YOLOv4模型来实现物体识别。

首先,我们需要准备模型文件和权重文件。YOLOv4模型的网络结构保存在一个配置文件中,而权重文件则保存了模型训练得到的参数。可以通过下载或自行训练得到这两个文件。在Python中,我们可以使用OpenCV的`dnn`模块来加载并使用这些文件。

接下来,我们可以使用代码片段来完成模型的加载和图像的预处理。首先,我们需要创建一个模型对象,并加载网络结构和权重文件。

python

import cv2

# 加载网络结构和权重文件

net = cv2.dnn.readNetFromDarknet('yolov4.cfg', 'yolov4.weights')

# 设置计算设备

net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)

net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)

接着,我们可以读取图像,并对其进行预处理。YOLOv4要求输入图像的尺寸为416x416像素,因此我们需要调整图像的大小。

python

# 读取图像

image = cv2.imread('image.jpg')

# 调整图像大小

blob = cv2.dnn.blobFromImage(image, 1/255, (416, 416), swapRB=True, crop=False)

在预处理完成后,我们可以将图像数据输入到模型中,并得到预测结果。

python

# 设置模型输入

net.setInput(blob)

# 获取网络输出层

layer_names = net.getLayerNames()

output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

# 运行模型

outputs = net.forward(output_layers)

最后,我们可以解析输出结果,并在图像上绘制出检测到的物体。

python

# 解析输出结果

conf_threshold = 0.5

nms_threshold = 0.4

class_ids = []

boxes = []

confidences = []

for output in outputs:

  for detection in output:

    scores = detection[5:]

    class_id = np.argmax(scores)

    confidence = scores[class_id]

    if confidence > conf_threshold:

      center_x = int(detection[0] * image.shape[1])

      center_y = int(detection[1] * image.shape[0])

      width = int(detection[2] * image.shape[1])

      height = int(detection[3] * image.shape[0])

      left = int(center_x - width / 2)

      top = int(center_y - height / 2)

      class_ids.append(class_id)

      confidences.append(float(confidence))

      boxes.append([left, top, width, height])

# 应用非最大值抑制

indices = cv2.dnn.NMSBoxes(boxes, confidences, conf_threshold, nms_threshold)

# 绘制检测结果

colors = np.random.uniform(0, 255, size=(len(class_ids), 3))

for i in indices:

  i = i[0]

  box = boxes[i]

  left, top, width, height = box

  label = f"{class_names[class_ids[i]]}: {confidences[i]:.2f}"

  color = colors[i]

  cv2.rectangle(image, (left, top), (left + width, top + height), color, 2)

  cv2.putText(image, label, (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

# 显示结果图像

cv2.imshow("Output", image)

cv2.waitKey(0)

cv2.destroyAllWindows()

通过以上步骤,我们成功地使用OpenCV调用YOLOv4模型,实现了物体识别的功能。这个示例代码可以应用于各种实际场景,例如安防监控、智能驾驶、机器人导航等。利用OpenCV和YOLOv4,我们能够更加高效地进行物体检测和识别,为人们的生活带来更多便利和安全。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复