10 基于深度学习的目标检测

首次完成时间:2024 年 11月 20 日


1. 使用OpenCV的dnn模块实现图像分类。

1)程序代码:

import numpy as np
import cv2# 解析标签文件
row = open("model1/synset_words.txt").read().strip().split("\n")
class_label = [r[r.find(" "):].split(",")[0] for r in row]# 载入caffe所需的配置文件
net = cv2.dnn.readNetFromCaffe("model1/bvlc_googlenet.prototxt","model1/bvlc_googlenet.caffemodel")# 读取待分类图像
img = cv2.imread("photos/cat.jpg")  # 确保这里的路径是正确的# 转换格式
blob = cv2.dnn.blobFromImage(img, 1, (224, 224), (104, 117, 123))# 加载图像
net.setInput(blob)# 预测
preds = net.forward()# 排序,取概率最大的结果
idx = np.argsort(preds[0])[-1]# 获取图片的原始尺寸
(h, w) = img.shape[:2]# 等比例缩减图片大小
resized_img = cv2.resize(img, (w // 4, h // 4))# 可视化处理,显示图像类别、置信度等信息
text = "label: {}-{:.2f}%".format(class_label[idx], preds[0][idx] * 100)
cv2.putText(resized_img, text, (5, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0))# 显示缩减后的图片
cv2.imshow("resized_result", resized_img)# 保存缩减后的图片
cv2.imwrite("photos/resized_result.jpg", resized_img)cv2.waitKey(0)
cv2.destroyAllWindows()

2)代码分析:

2. 使用OpenCV实现目标检测,实现发现不明车辆或行人进入检测区,即进行报警。

1)程序代码:

import numpy as np
import cv2def prepareDataSet():# 准备数据集args = {}args["prototxt"] = "model2/MobileNetSSD_deploy.prototxt"args["model"] = "model2/MobileNetSSD_deploy.caffemodel"return argsdef createNet():# 构建网络模型对象args = prepareDataSet()# load our serialized model from diskprint("[INFO] loading model...")net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])return netif __name__ == "__main__":# 定义类别名称序列CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat","bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog","horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]# 定义边框颜色序列COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3))# 打开摄像头或视频文件camera = cv2.VideoCapture("videos/12686501_3840_2160_60fps.mp4")# 构建网络模型net = createNet()while True:ret, frame = camera.read()if ret:# 将帧的尺寸调整为1080pframe = cv2.resize(frame, (1920, 1080))(h, w) = frame.shape[:2]blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)), 0.007843, (300, 300), 127.5)net.setInput(blob)detections = net.forward()# 遍历结果for i in np.arange(0, detections.shape[2]):# 获得置信度confidence = detections[0, 0, i, 2]# 根据置信度阈值过滤执行度if confidence > 0.2:# 根据最大置信度获取类别下标idx = int(detections[0, 0, i, 1])# 获取位置信息box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])(startX, startY, endX, endY) = box.astype("int")# 显示类别信息和位置边框label = "{}: {:.2f}%".format(CLASSES[idx], confidence * 100)print("[INFO] {}".format(label))cv2.rectangle(frame, (startX, startY), (endX, endY), COLORS[idx], 2)y = startY - 15 if startY - 15 > 15 else startY + 15cv2.putText(frame, label, (startX, y),cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2)if CLASSES[idx] == "person":print("raise the alarm")# 显示结果cv2.imshow("result", frame)# 按下空格退出 or escif cv2.waitKey(1) == ord(' ') or cv2.waitKey(1) == 27:breakelse:breakcamera.release()cv2.destroyAllWindows()

2)代码分析:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring WebFlux 高级实战(3-2)

1、SpringBoot 使用 1.1、Spring Core 中的响应式 Spring 生态系统的核心模块是Spring Core 模块。Spring 5.x 引入对响应式流和响应式库的原生支持,其中,响应式库包含RxJava 1/2 和Project Reactor 3。 1.1.1、响应式类型转换支持 为了支持响应式流规…

河道水位流量一体化自动监测系统:航运安全的护航使者

在广袤的水域世界中,航运安全始终是至关重要的课题。而河道水位流量一体化自动监测系统的出现,如同一位强大的护航使者,为航运事业的稳定发展提供了坚实的保障。 水位传感器:负责实时监测河道的水位变化。这些传感器通常采用先进的…

RHCE的学习(21)

第三章 Shell条件测试 用途 为了能够正确处理Shell程序运行过程中遇到的各种情况,Linux Shell提供了一组测试运算符。 通过这些运算符,Shell程序能够判断某种或者几个条件是否成立。 条件测试在各种流程控制语句,例如判断语句和循环语句中…

经验笔记:从生成 SSH 密钥到成功连接测试(以Gitee为例)

从生成 SSH 密钥到成功连接测试的经验笔记(以Gitee为例) 1. 生成 SSH 密钥对 选择合适的加密算法 ED25519: 密钥长度:私钥 256 位(32 字节),公钥 256 位(32 字节)&#…

uni-app Vue3语法实现微信小程序样式穿透uview-plus框架

1 问题描述 我在用 uni-app vue3 语法开发微信小程序时,在项目中使用了 uview-plus 这一开源 UI 框架。在使用 up-text 组件时,想要给它添加一些样式,之前了解到微信小程序存在样式隔离的问题,也在uview-plus官网-注意事项中找到…

数据结构(双向链表——c语言实现)

双向链表相比于单向链表的优势: 1. 双向遍历的灵活性 双向链表:由于每个节点都包含指向前一个节点和下一个节点的指针,因此可以从头节点遍历到尾节点,也可以从尾节点遍历到头节点。这种双向遍历的灵活性使得在某些算法和操作中&a…

C# AutoMapper 10个常用方法总结

前言 AutoMapper 是一个强大的对象映射库,用于简化和自动化复杂对象之间的转换。 官网地址:AutoMapper 文档地址:AutoMapper — AutoMapper documentation AutoMapper是以.NET(C#)语言开发的一个轻量的处理一个实体对象到另一个实体对象之间…

论文分享 | FuzzLLM:一种用于发现大语言模型中越狱漏洞的通用模糊测试框架

大语言模型是当前人工智能领域的前沿研究方向,在安全性方面大语言模型存在一些挑战和问题。分享一篇发表于2024年ICASSP会议的论文FuzzLLM,它设计了一种模糊测试框架,利用模型的能力去测试模型对越狱攻击的防护水平。 论文摘要 大语言模型中…

ES分词环境实战

文章目录 安装下载1.1 下载镜像1.2 单节点启动 防火墙设置异常处理【1】iptable链路中断 参考文档 参加完2024年11月软考,对ES的分词进行考查,前期有【 Docker 环境下安装部署 Elasticsearch 和 kibana】和【 Docker 环境下为 Elasticsearch 安装IK 分…

在 CentOS 系统上直接安装 MongoDB 4.0.25

文章目录 步骤 1:配置 MongoDB 官方源步骤 2:安装 MongoDB步骤 3:启动 MongoDB 服务步骤 4:验证安装步骤 5:可选配置注意事项 以下是在 CentOS 系统上直接安装 MongoDB 4.0.25 的详细步骤: 步骤 1&#x…

Swift从0开始学习 并发性 day4

1. 异步函数和 async/await async 表示函数是异步的,可以执行一些耗时操作而不阻塞线程。await 用来等待异步操作的完成。它让代码看起来像是同步的,但实际上在异步执行。 func fetchData() async -> String {// 模拟网络请求return "Data fro…

说说数字化的误区

1.数字化是一把手工程 这是很多人的误区,觉得数字化要一把手参与,这样可以获得资源,权力,但是现实中这是不可能的 首先我们要明确,ceo是一把手,是负责战略的,而数字化是实实在在的战术层面的内…

MQ消息队列选型

选择合适的消息队列(Message Queue, MQ)对于构建高效、可靠、可扩展的分布式系统至关重要。以下是针对四种主流消息队列——Kafka、ActiveMQ、RabbitMQ和RocketMQ——的技术选型指南,帮助您根据项目需求做出最佳选择。 1. Kafka 适用场景&a…

基于Vue+SpringBoot的求职招聘平台

平台概述 本平台是一个高效、便捷的人才与职位匹配系统,旨在为求职者与招聘者提供一站式服务。平台内设三大核心角色:求职者、招聘者以及超级管理员,每个角色拥有独特的功能模块,确保用户能够轻松完成从信息获取到最终录用的整个…

什么是 C++ 中的初始化列表?它的作用是什么?

初始化列表是在构造函数的参数列表后面,用冒号开头,接着列出成员变量的初始化表达式。作用是在对象创建时,对成员变量进行初始化,特别是对const成员变量、引用成员变量和没有默认构造函数的成员对象,必须使用初始化列表…

谈谈Spring的常见基础概念

文章是对Spring一些基础的底层概念进行分析,后续再遇到这些问题的时候,可以采用这些步骤进行详细解释。 一.谈谈SpringIOC的理解,原理与实现? 总: 1.控制反转: (1)原来的对象是由使用者来进行控制,有了S…

openjudge_简单英文题_07:Shortest Path

题目 07:Shortest Path 总时间限制: 1000ms 内存限制: 65536kB 描述 There is a graph with N nodes. Given the length of each edge between the nodes. Find the shortest path from S to E. 输入 First line: three positive integer number N (N < 100), S (S < N…

NAT网络地址转换——Easy IP

NAT网络地址转换 Tip&#xff1a; EasylP没有地址池的概念,使用接口地址作为NAT转换的公有地址。EasylP适用于不具备固定公网IP地址的场景:如通过DHCP, PPPOE拨号获取地址的私有网络出口,可以直接使用获取到的动态地址进行转换。 本次实验模拟nat协议配置 AR1配置如下&…

oracle19c开机自启动

配置 cat > /etc/init.d/oracle19c <<EOF #!/bin/bash # Oracle startup and shutdown scriptexport ORACLE_HOME/opt/oracle/product/19c/dbhome_1 export ORACLE_SIDORCLCDB export LISTENER_NAMELISTENER # General exports and vars export PATH$ORACLE_HOME/bin…

基于xr-frame实现微信小程序的手部、手势识别3D模型叠加和石头剪刀布游戏功能

前言 xr-frame是一套小程序官方提供的XR/3D应用解决方案&#xff0c;基于混合方案实现&#xff0c;性能逼近原生、效果好、易用、强扩展、渐进式、遵循小程序开发标准。xr-frame在基础库v2.32.0开始基本稳定&#xff0c;发布为正式版&#xff0c;但仍有一些功能还在开发&#…