1,效果展示

为此,我专门还去查了查,怎么将视频转化为gif图,不知不觉中,我又多学会了一项技能。

OK!cool,效果很不错,今天需要搭配一些文件,都是可以从官网里找到的,那么我为了方便,专门去学习怎么在GitHub上托管项目,还下载了VScode和Git,我太难受了,如果不是要写博客,我绝对懒得去找教程。谢谢自己!

那么在此gif图像中,我检测了水瓶(截图时间不够了),鼠标,剪刀,书,手机,牙刷,键盘,电脑等。


2,项目准备

  • 文件搭建

我会在结尾处,提供相关的资源,我们先在项目下新建一个目录,其中包含的文件,如图所示:

3,代码的讲解与展示

import cv2thres = 0.45 # Threshold to detect objectcap = cv2.VideoCapture(1)
cap.set(3,640)
cap.set(4,480)
cap.set(10,70)classNames= []
classFile = 'coco.names'
with open(classFile,'rt') as f:classNames = f.read().rstrip('\n').split('\n')#restrip返回删除尾随空白的字符串副本。如果给定了字符而不是无,则删除字符中的字符。configPath = 'ssd_mobilenet_v3_large_coco_2020_01_14.pbtxt'
weightsPath = 'frozen_inference_graph.pb'net = cv2.dnn_DetectionModel(weightsPath,configPath)
net.setInputSize(320,320)
net.setInputScale(1.0/ 127.5)
net.setInputMean((127.5, 127.5, 127.5))
net.setInputSwapRB(True)while True:success,img = cap.read()classIds, confs, bbox = net.detect(img,confThreshold=thres)print(classIds,bbox)if len(classIds) != 0:for classId, confidence,box in zip(classIds.flatten(),confs.flatten(),bbox):cv2.rectangle(img,box,color=(0,255,0),thickness=2)cv2.putText(img,classNames[classId-1].upper(),(box[0]+10,box[1]+30),cv2.FONT_HERSHEY_COMPLEX,1,(0,255,0),2)cv2.putText(img,str(round(confidence*100,2)),(box[0]+200,box[1]+30),cv2.FONT_HERSHEY_COMPLEX,1,(0,255,0),2)cv2.imshow("Output", img)if cv2.waitKey(1) & 0xFF == 27:break#对于物体的检测

今天的重点在于讲解代码的思路。

  • 首先,打开我们的外部摄像头,并且设置窗口的宽,长,亮度,注意不要将窗口的大小超出我们外部摄像头的大小,不然你得到的图像可能就是黑屏。
  • 其次,在我们的coco.names文件当中,它是每个名词单独一行,所以通过文件操作,将其内容放入一个空列表当中,我们用到了read(),rstrip(),split()函数,不清楚的地方,可以去W3school上查询。
  • 接着,我们看看在包含了net的代码,它用到了DNN算法,其余的函数都可以在dnn.py文件里面查找到。
(1) setInputSize(weight,height)weight新输入宽度,height新输入宽度。
(2) setInputScale(1.0/ 127.5)设置帧的缩放因子值,帧值的比例乘数。
(3) setInputMean((127.5, 127.5, 127.5))简要设置帧的平均值。
(4) setInputSwapRB(True)将帧的标志设置为True。
  • 然后,又要用到一个detect()函数,它是属于class DetectionModel(Model)下的函数,在这里confThreshold用于根据置信度筛选框的阈值,我们将其阈值放在了较前面的位置,方便更改,它会返回ClassID结果检测中的类索引,一组对应的置信度,一组边界框。
  • 除此之外,我们用len(classIds) != 0来代表检测到了物体,然而我们有三个需要遍历的变量或信息,所以我们用到了zip函数,避免了写三个循环,而flatten()函数可以将其中的信息展开,再然后画框,放置文本,在这里需要提两句,在coco.name文件里面,每个名词是从1开始的,而classNames列表是从0开始的,故要在索引处-1,使用round()函数是因为confidence是小数,会与之前的classNmaes的东西叠加在一起,故此将其看作是百分数,并保留了两位小数。
  • 最后就是,imshow的展示窗口,以及点击Esc键推出。

4,项目优化

我已经将注释写在了代码当中,如有不清楚的地方,可以将其打印出来,进行观察。

其优化效果——有效的优化了之前检测框闪烁和重叠的现象。

import cv2
import numpy as npthres = 0.45 # Threshold to detect object
#使用nms,不会像先前那样检测框有重叠和闪烁
nms_threshold = 0.2  #0.2 已经是较大的抑制效果
#若设置成1,将没有效果
cap = cv2.VideoCapture(1)
cap.set(3,1280)
cap.set(4,720)
cap.set(10,150)classNames= []
classFile = 'coco.names'
with open(classFile,'rt') as f:classNames = f.read().rstrip('\n').split('\n')#print(classNames)
configPath = 'ssd_mobilenet_v3_large_coco_2020_01_14.pbtxt'
weightsPath = 'frozen_inference_graph.pb'net = cv2.dnn_DetectionModel(weightsPath,configPath)
net.setInputSize(320,320)
net.setInputScale(1.0/ 127.5)
net.setInputMean((127.5, 127.5, 127.5))
net.setInputSwapRB(True)while True:success,img = cap.read()classIds, confs, bbox = net.detect(img,confThreshold=thres)bbox = list(bbox)#bbox本身得到的是numpy的数组,将其改为listconfs = list(np.array(confs).reshape(1,-1)[0])#将其内容转化为只有一个列表,使用np.array()是因为元组是不能reshapeconfs = list(map(float,confs))#原本的confs是float32的形式,使用map()函数将float映射在confs上#print(type(confs[0]))#print(confs)indices = cv2.dnn.NMSBoxes(bbox,confs,thres,nms_threshold)#print(indices)for i in indices:i = i[0]#打印(indices)的内容是[[0]]box = bbox[i]x,y,w,h = box[0],box[1],box[2],box[3]cv2.rectangle(img, (x,y),(x+w,h+y), color=(0, 255, 0), thickness=2)cv2.putText(img,classNames[classIds[i][0]-1].upper(),(box[0]+10,box[1]+30),cv2.FONT_HERSHEY_COMPLEX,1,(0,255,0),2)#此处需要一个classIds的特殊索引,它就是i,而且已经有了一个[],所以是[i][0]cv2.imshow("Output",img)cv2.waitKey(1)

5,项目资源

GitHub:Auorui/Opencv-project-training: According to the project made by learning murtaza Hassan's videos every day, thank the up Master of station B: a graduate student who knows a little about everything. It is mainly used to learn opencv by myself. On my CSDN blog, I have a detailed picture and text introduction of each project. I will continue to study hard. Welcome to my CSDN blog, where I store my code and some information. CSDN link: https://blog.csdn.net/m0_62919535?type=blog 。 You can check it in my column - opencv project practice. (github.com)https://github.com/Auorui/Opencv-project-training

免费转化为Gif图网站:踢踢零工具 - tt0.tophttps://tt0.top/

6,项目总结与评价

其中的很多算法我也不是很明白,只是使用的思路学会到了,后面将会有人脸检测的项目,应该会用到YOYO算法。希望有人能在这个项目中玩的开心,感谢您的关注与支持!!!

Opencv项目实战:05 物体检测相关推荐

  1. opencv项目实战信用卡的检测

    第一步先梳理一下我们的项目逻辑: 一. 找素材 (数字模板,银行卡照片等) 二. 识别数字则需要我们对数字模板进行处理.因此下面我们开始处理数字模板. 1.将数字模板处理成灰度图,再进行二值处理.这样 ...

  2. Opencv项目实战-信用卡数字识别

    Opencv项目实战:信用卡数字识别 导入库,定义展示函数 import cv2 import numpy as np from imutils import contours import myut ...

  3. 基于C++的OpenCV项目实战——文档照片转换成扫描文件

    基于C++的OpenCV项目实战--文档照片转换成扫描文件 一.背景 前段时间都是基于Python的OpecCV进行一些学习和实践,但小的知识点并没有应用到实际的项目中:并且基于Python的版本的移 ...

  4. 【Opencv项目实战】背景替换:动态背景移除与替换(cvzone+MediaPipe)

    文章目录 一.项目思路 二.环境布置 2.1.cvzone安装 2.2.MediaPipe安装 2.3.常见问题 2.4.注意事项 三.算法详解 3.1.segmentor.removeBG():去除 ...

  5. Opencv项目实战:14 手势控制音量

    目录 0.项目介绍 1.项目展示 2.项目搭建 3.项目的代码与讲解 4.项目资源 5.项目总结 0.项目介绍 本篇与上一篇有很多联系,大家可以看看这篇Opencv项目实战:13 手部追踪,我们将根据 ...

  6. Opencv项目实战:基于dlib的疲劳检测

    文章目录 一.项目简介 二.算法原理 三.环境配置 3.1.dlib人脸检测器:dlib.get_frontal_face_detector() 3.2.dlib关键点定位工具:shape_predi ...

  7. 【Opencv项目实战】目标追踪:实时追踪人工标注的多个目标

    文章目录 一.项目思路 二.问题清单 三.算法详解 3.1.定义目标追踪算法 3.2.初始化追踪器 3.3.更新目标追踪器 3.4.绘制目标矩形框 3.5.人工标注感兴趣目标 3.5.1.标注ROI区 ...

  8. 【项目实战:核酸检测平台】第二章 大卸八块

    本章目标 完成项目架构设计和数据库结构设计 重点:全是重点 文章目录 本章目标 总体设计(架构设计) 技术选型 部署结构设计 工程文档结构设计 第一步:项目和模块命名 第二步:约定项目工程文件内容 第 ...

  9. OpenCV项目实战日志——检测文字并对比识别

    第一次写长博,记录一个项目.这几天一直在接小活,有一个是客户的要求是将目标图片上的文字(目测是好多器材上边的编号)检测出来,并对比,要求长字符串和长字符串相同,短字符串和短字符串相同,不一样的需要标识 ...

  10. Opencv项目实战:01 文字检测OCR(2)

    1,相关函数的讲解 image_to_data()的输出结果是表格形式,输出变量的类型依旧是字符串. 你会得到一个这样的列表['level', 'page_num', 'block_num', 'pa ...

最新文章

  1. HarmonyOS 输入框TextField的使用
  2. 修改系统tabbar的高度
  3. 全球数字孪生市场大预测:2025 年的 358 亿美元,年复合增长率(CAGR)高达 37.8%...
  4. 认仕医生接入云信,医友交流随时随地
  5. oracle rollup 排序,Oracle教程之rollup用法
  6. 【调试工具】之IOS真机测试
  7. (转)初识suse——linux
  8. 师范生计算机期末考试题目,2015年深圳宝安区计算机教师招聘考试试题[师范生发布]无答案...
  9. 面向对象程序设计课第四次作业
  10. android环境混合app开发,cordova混合App开发:Cordova+Vue实现Android (环境搭建)
  11. 数字信号处理-04- FPGA常用运算模块-除法器
  12. wps如何自己制作流程图_WPS如何绘制流程图? WPS绘图流程图详细教程
  13. putty怎么进入文件夹_putty常用命令
  14. ubuntu下 端口映射
  15. 根据四个特征点求解相机位姿
  16. 熟练运用计算机快捷键,有效利用Excel和电脑快捷键
  17. 初中晨读必看古诗名句
  18. PCI、PCI-X、PCI-E、PCI-E Card、Mini PCI-E、M.2、Add-in Card 它们有啥区别?这些概念你搞清楚了吗?
  19. 滚珠丝杠驱动扭矩及电机功率的计算(修正版)
  20. pb开发的界面出现问号_SnBiX 低温焊锡膏开发及其性能评价

热门文章

  1. 拼音模糊查询+java,jquery拼音模糊查询
  2. 制作一个企业网站——html华为官网购物商城项目的设计与实现
  3. 基于canoe的bootload刷写程序
  4. 需求分析的图形工具——E-R图
  5. 计算机编程和机器人编程哪个有用吗,儿童编程和机器人编程哪个好
  6. 怎样建设智慧公厕综合信息管理系统?如何让智慧公厕实现综合信息管理功能?@中期科技ZONTREE智慧厕所
  7. ie8 升级页面html,IE9及以下浏览器升级提示
  8. VGG19识别CIFAR10数据集(Pytorch实战)
  9. java数据库同步_Java数据同步
  10. Java同步和异步,阻塞和非阻塞