OpenCV物体检测分类

一、前言

物体检测分类是一种机器学习任务,旨在识别图像或视频中的物体,并将其分为不同的类别。与传统的物体分类任务不同,物体检测分类不仅可以确定图像中物体的类别,还可以确定它们在图像中的位置和边界框。

物体检测分类通常涉及以下步骤:

  1. 数据收集和标注:收集包含不同类别物体的图像或视频数据,并进行标注,标注包括每个物体的类别和边界框信息。

  2. 特征提取:使用图像处理和计算机视觉技术,从收集的图像中提取有用的特征。这些特征可以包括颜色直方图、纹理特征、形状描述符等。

  3. 模型训练:使用机器学习算法或深度学习模型,将提取的特征与标注的类别和边界框进行训练。常用的深度学习模型包括卷积神经网络(Convolutional Neural Networks,CNN)和目标检测模型,如Faster R-CNN、YOLO等。

  4. 模型评估和调优:通过在测试集上评估模型的性能,如准确率、召回率、精确度等指标,来评估模型的性能。如果模型表现不佳,可以进行调优,例如增加训练数据、调整模型参数等。

  5. 预测和应用:使用训练好的模型对新的图像或视频进行预测,识别和分类其中的物体,并生成边界框以及对应的类别标签。

物体检测分类在许多应用领域都有广泛的应用,包括自动驾驶、视频监控、物体识别和图像搜索等。它可以帮助计算机理解图像中的物体内容,为各种实际问题提供解决方案。

而卷积神经网络训练目标检测模型,受机器、显卡等资源影响较大,对很多数人来说是不友好的。这里介绍一款在线工具Teachable Machine,它可以帮助用户无需编写代码就能创建自己的机器学习模型。Teachable Machine的目标是使机器学习技术更加普及和易于理解,使更多的人能够利用机器学习来解决各种问题。

二、Teachable Machine

Teachable Machine的使用很简单,如下所示:

1.首页

 2.训练

可以使用Teachable Machine创建自定义模型来分类图像、识别物体、检测姿势、识别声音等等。

这里我们选择图像检测分类:

 接下来分别导入100张(越多越准确)猫和狗的图像,进行训练。

 点击Train Model

 训练结束,点击Export Model,接着如下下载模型

 下载解压后,可以得到训练好的模型keras_model.h5和label.txt

 三、实战

项目介绍:使用OpenCV和上述训练好的模型,快速实现猫、狗的检测分类,效果如下:

 1.安装环境

pip install cvzone
pip install opencv-python
pip install tensorflow

 2.代码

import cv2
import os
import cvzone
from cvzone.ClassificationModule import Classifier

cap = cv2.VideoCapture('Wait_detection/dog.51.jpg')  # 加载图片
# cap = cv2.VideoCapture(0) 视频检测

imgAnimalsList = [] # 物体列表
pathFolderAnimal = "animals" # 物体文件
pathlist = os.listdir(pathFolderAnimal)
# print(pathlist)
for path in pathlist:
    print(path)
    imgAnimalsList.append(cv2.imread(os.path.join(pathFolderAnimal, path), cv2.IMREAD_UNCHANGED))

maskClassifier = Classifier('model/keras_model.h5', 'model/labels.txt')  # 引入模型

label_file = open('model/labels.txt', "r")
list_labels = []  # 可检测的物体名称列表
for line in label_file:
    stripped_line = line.strip()
    list_labels.append(stripped_line)
label_file.close()
# print(list_labels[1])

while True:
    _, img = cap.read()
    # imgresize = cv2.resize(img, (454, 340))
    # 图像宽、高
    w = int(cap.get(3))
    h = int(cap.get(4))
    imgbackgoround = cv2.imread('background.png')  # 背景图片
    predection = maskClassifier.getPrediction(img)  # 检测
    print(predection)
    # print(predection[1])
    id = predection[1]  # 物体id
    imgbackgoround = cvzone.overlayPNG(imgbackgoround, imgAnimalsList[id], (910, 150))  # 输出检测到的物体

    imgbackgoround[148:148 + h, 159:159 + w] = img  # 待检物体图片

    cv2.putText(imgbackgoround, str(list_labels[id]),
                (990, 120), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 1), 2)  # 检测出的物体名称
    print(list_labels[id])
    # cv2.imshow("Image", img)
    cv2.putText(imgbackgoround, 'result:', (830, 120), cv2.FONT_HERSHEY_PLAIN, 3, (0, 255, 0), 3)
    cv2.imshow("Output", imgbackgoround)

    cv2.waitKey(0)  # 按任意键退出

检测猫:

 最后,也可以参考完整项目文件

猜你喜欢

转载自blog.csdn.net/weixin_44686138/article/details/130658201