基于深度学习的对象检测

简介: 【6月更文挑战第6天】基于深度学习的对象检测。

对象检测是指检测出图像中的所有对象,并识别对象的类型。使用OpenCV中的深度学习预训练模型进行对象检测的基本步骤如下。
(1)从配置文件和预训练模型文件中加载模型。
(2)创建图像文件的块数据。
(3)将图像文件的块数据设置为模型的输入。
(4)执行预测。
(5)处理预测结果。
1.使用基于MobileNet_SSD和Caffe的预训练模型进行对象检测
MobileNet是安德鲁·霍华德(Andrew G. Howard)等人在其论文中提出的一种用于移动和嵌入式视觉应用的高效模型,它使用深度可分离卷积来构建轻型深度神经网络。
SSD(Single Shot MultiBox Detector)为单发多盒检测器,它是一种对象检测算法。MobileNet_SSD结合了MobileNet和SSD的特点。
下面的代码使用基于MobileNet_SSD和Caffe的预训练模型进行对象检测。

使用基于MobileNet_SSD和Caffe的预训练模型进行对象检测

……
import cv2
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
from PIL import ImageFont, ImageDraw, Image

加载字体,以便显示汉字

fontpath = "STSONG.TTF"
font = ImageFont.truetype(fontpath,20) #载入字体,设置字号
font2 = {'family': 'STSONG', "size": 22}
matplotlib.rc('font', **font2) #设置plt字体

准备对象名称类别,设置为中文

object_names = ('背景', '飞机', '自行车', '鸟', '船', '瓶子', '公共汽车', '小汽车',
'猫', '椅子', '牛', '餐桌', '狗', '马','摩托车',
'人','盆栽', '羊', '沙发', '火车', '监视器')
mode = cv2.dnn.readNetFromCaffe("MobileNetSSD_deploy.txt", #从文件加载Caffe模型
"MobileNetSSD_Caffemodel.dat")
image = cv2.imread("objects.jpg") #打开用于对象检测的图像
blob = cv2.dnn.blobFromImage(image, 0.007843, (224,224), #创建图像的块数据
(120, 120, 127))
mode.setInput(blob) #将块数据设置为模型输入
result = mode.forward() #执行预测
ptime, x = mode.getPerfProfile() #获得完成预测时间
title='完成预测时间: %.2f ms' % (ptime * 1000.0 / cv2.getTickFrequency())

for i in range(result.shape[2]): #处理检测结果
confidence = result[0, 0, i, 2] #获得可信度
if confidence > 0.3: #输出可信度大于30%的检测结果
a,id,a,x1,y1,x2,y2=result[0, 0, i]
name_id = int(id) #获得类别名称id
blob_size=280
heightScale = image.shape[0] / blob_size#计算原图像和图像块的高度比例
widthScale = image.shape[1] / blob_size#计算原图像和图像块的宽度比例

    #计算检测出的对象的左下角和右上角坐标
    x1 = int(x1 * blob_size * widthScale)
    y1 = int(y1 * blob_size * heightScale)
    x2 = int(x2 * blob_size * widthScale)
    y2 = int(y2 * blob_size * heightScale)
    cv2.rectangle(image,(x1,y1),(x2,y2),(0,255,0),2)#绘制标识对象的绿色矩形
    #在图像中输出对象名称和可信度
    if name_id in range(len(object_names)):
        text = object_names[name_id] + "\n{:.1%}".format(confidence)
        img_pil = Image.fromarray(image)
        draw = ImageDraw.Draw(img_pil)
        draw.text((x1+5,y1), text, font = font,fill=(255,0,0))    #绘制文字
        image = np.array(img_pil)

img = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
plt.title(title)
plt.imshow(img)
plt.axis('off')
plt.show()

相关文章
|
20天前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
95 5
|
2月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:智能质量检测与控制
使用Python实现深度学习模型:智能质量检测与控制 【10月更文挑战第8天】
274 62
使用Python实现深度学习模型:智能质量检测与控制
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
使用Python实现智能食品质量检测的深度学习模型
使用Python实现智能食品质量检测的深度学习模型
140 1
|
1月前
|
机器学习/深度学习 搜索推荐 安全
深度学习之社交网络中的社区检测
在社交网络分析中,社区检测是一项核心任务,旨在将网络中的节点(用户)划分为具有高内部连接密度且相对独立的子群。基于深度学习的社区检测方法,通过捕获复杂的网络结构信息和节点特征,在传统方法基础上实现了更准确、更具鲁棒性的社区划分。
76 7
|
1月前
|
机器学习/深度学习 传感器 算法
行人闯红灯检测:基于计算机视觉与深度学习的智能交通解决方案
随着智能交通系统的发展,传统的人工交通违法判断已难以满足需求。本文介绍了一种基于计算机视觉与深度学习的行人闯红灯自动检测系统,涵盖信号灯状态检测、行人检测与跟踪、行为分析及违规判定与报警四大模块,旨在提升交通管理效率与安全性。
|
2月前
|
机器学习/深度学习 运维 监控
深度学习之异常检测
基于深度学习的异常检测是一项重要的研究领域,主要用于识别数据中的异常样本或行为。异常检测广泛应用于多个领域,如网络安全、金融欺诈检测、工业设备预测性维护、医疗诊断等。
200 2
|
2月前
|
机器学习/深度学习 传感器 数据采集
深度学习之设备异常检测与预测性维护
基于深度学习的设备异常检测与预测性维护是一项利用深度学习技术分析设备运行数据,实时检测设备运行过程中的异常情况,并预测未来可能的故障,以便提前进行维护,防止意外停机和生产中断。
113 1
|
3月前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
307 5
|
2月前
|
机器学习/深度学习 自然语言处理 监控
深度学习之声音事件检测
基于深度学习的声音事件检测(Sound Event Detection, SED)是指从音频数据中检测并识别出特定的声音事件(如玻璃破碎、狗叫声、警报声等)。这种技术被广泛应用于智能家居、城市监控、医疗监护等领域,随着深度学习的进步,其性能和准确性得到了显著提升。
136 0
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
深度学习之地形分类与变化检测
基于深度学习的地形分类与变化检测是遥感领域的一个关键应用,利用深度学习技术从卫星、无人机等地球观测平台获取的遥感数据中自动分析地表特征,并识别地形的变化。这一技术被广泛应用于城市规划、环境监测、灾害预警、土地利用变化分析等领域。
193 0