Python实现一个简单的目标检测
Python实现一个简单的目标检测
- 相关介绍
- 实验环境
- 基本思路
- 代码实现
- 输出结果
相关介绍
- 选择性搜索(Select Search)算法属于候选区域算法,用分割不同区域的办法来识别潜在的物体。在分割的时候,我们要合并那些在某些方面(如颜色、纹理)类似的小区域。相比滑窗法在不同位置和大小的穷举,候选区域算法将像素分配到少数的分割区域中。所以最终候选区域算法产生的数量比滑窗法少的多,从而大大减少运行物体识别算法的次数。同时候选区域算法所选定的范围兼顾了不同的大小和长宽比。
实验环境
- Python 3.6.2
- Tesorflow 2.3.0
- Numpy 1.18.5
- Opencv 3.4.2
基本思路
- 输入测试图片
- 用选择性搜索(Select Search)方法,对输入图片选出N个候选区域
- 用训练好的CNN模型预测每个候选区域,保留一个得分最高的候选区域
- 输出预测结果图片
代码实现
import sys
import cv2
import numpy as np
import tensorflow as tf
from tensorflow.keras import datasets, layers, models# 读取图片
img = cv2.imread( './car3.jpg' )
# 按比例缩放图片
newHeight = 200
newWidth = int( img.shape[1] * 200 / img.shape[0] )
img = cv2.resize( img, (newWidth, newHeight) )
# 创建选择性搜索分割对象
ss = cv2.ximgproc.segmentation.createSelectiveSearchSegmentation()
# 设置输入图像,我们将运行分割
ss.setBaseImage( img )
# 快速但低召回选择性搜索方法
ss.switchToSelectiveSearchFast()
# 高召回但慢选择性搜索方法
# ss.switchToSelectiveSearchQuality()# 运行选择性搜索分割输入图像
rects = ss.process()
# print(rects)
print( 'Total Number of Region Proposals: {}'.format( len( rects ) ) )
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer','dog', 'frog', 'horse', 'ship', 'truck']
# 加载创建完全相同的模型,包括其权重和优化程序
loaded_model = tf.keras.models.load_model('LeNet_classify_model.h5')
while True:# 创建原始图像的副本new_img = img.copy()# print(new_img)region_score = []max_rect = 0max_name = ""max_score = 0# 重复所有的区域建议for i, rect in enumerate( rects ):x, y, w, h = rect # 预测框的左上角坐标(x,y)以及框的宽w,高hpre_img = new_img[y:y+h,x:x+w]pre_img = cv2.resize(pre_img,(32,32))pre_img = (np.expand_dims(pre_img,0))# 输入的图片维度为(1,32,32,3)pred_arr = loaded_model.predict(pre_img)# 预测标签pre_label = np.argmax(pred_arr[0])# 预测得分score = np.max(pred_arr[0])# 预测类名class_name = class_names[pre_label]if score > max_score:max_rect = rectmax_name = class_namemax_score = scoreprint([max_rect,max_name,max_score])x,y,w,h = max_rect# cv2.rectangle(new_img, (x, y), (x + w, y + h), (0, 255, 0), 1, cv2.LINE_AA )cv2.rectangle(new_img, (x, y), (x + w, y + h), (0, 255, 0), 2, cv2.LINE_AA)font = cv2.FONT_HERSHEY_SIMPLEXtext = max_name+" "+str(max_score*100)[0:4]+"%"cv2.putText(new_img, text, (x, y-5), font, 0.5, (0,0,255), 2)# 显示输出cv2.imshow("Output", new_img)# 等待按键输入k = cv2.waitKey( 0 ) & 0xFF# q键if k == 113:break
# 关闭所有窗口
cv2.destroyAllWindows()
输出结果
Python实现一个简单的目标检测相关推荐
- 用python做一个简单GUI小软件
用python做一个简单软件 前言 这是一个课设,用python做一个扫描王软件 我主要做的GUI部分,记录分享一下.也是第一次用python做小软件,python的方便果然是名不虚传 遇到问题 1. ...
- python推荐系统-利用python构建一个简单的推荐系统
摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...
- 基于python的系统构建_利用python构建一个简单的推荐系统
摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...
- python推荐_利用Python构建一个简单的推荐系统
原标题:利用Python构建一个简单的推荐系统 摘要:快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫.在此之前读者需要对pandas和numpy等数据分析包有所了解. 什么 ...
- 用python写一个简单的web服务器
人生苦短,我用python 简洁高效,这才是理想的语言啊 分享一点python的学习经验-----如何用python写一个简单的web服务器 首先,我们需要简单地了解一下网络通信协议,这里用白话介绍一 ...
- ICLR2022系列解读之三:一个新的目标检测网络结构范式GiraffeDet
本文解读我们ICLR2022上发表的论文<GiraffeDet: A Heavy-Neck Paradigm for Object Detection>.我们提出了一个新的目标检测网络结构 ...
- 用PaddleDetection做一个完整的目标检测项目(上)
文章转载自:微信公众号:飞桨PaddlePaddle的微信文章 原文章中由于排版问题,导致文字遮挡,不便阅读,因此对文章格式稍作更改,增加了一些关键词加粗,便于后续阅读. PaddleDetectio ...
- python cs开发框架_用Python编写一个简单的CS架构后门的方法
用Python编写一个简单的CS架构后门的方法 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 用Python编写一个简单的CS架构后门的方法.txt ] (友情 ...
- python实现一个简单的远程监控,看看你老婆微信都在聊啥。
python实现一个简单的远程监控,看看你老婆微信都在聊啥. 1.pywin32模块检测活动窗口 2.PIL模块截图 3.http.server.socketserver开启一个临时web服务. 4. ...
最新文章
- thinkphp联查
- OpenCV 拉普拉斯算子Laplace Operator
- ios多线程Android,iOS 关于多线程
- js取字符串后四位_JS逆向 | 某验滑块加密参数逆向分析
- 实现输入提示 layui_ASP.NET Core SignalR :学习消息通讯,实现一个消息通知
- tcp压力测试工具_DNS压力测试工具之——DNSperf
- SVProgressHUD的使用
- wamp怎么安装mysql服务器_使用WAMPServer套件可安装Apache服务器和MySQL服务器
- 台式计算机 如何组装,台式电脑买回家怎么装_组装方法图文分析
- PCB设计中基板颜色含义
- 中断驱动的自行车码表
- PHP file_get_contents函数详解
- 倒计时,距离活动还有0天0时0分0秒
- CodeForces-1062E LCA,DFN,RMQ
- 微信开发笔记——微信网页登录授权,获取用户信息
- 【opencv-python】视频处理(5) cv2.VideoCapture.grab()函数、cv2.VideoCapture.retrieve()函数
- 泛谈传统运营商借鉴电商模式
- 一、采样频率到底是选择2倍还是10倍?让我用python来给你展示
- SpringCloud疑难杂症
- dva 切换 history 为 browserHistory 报错
热门文章
- windows下修改中用户名为英文
- 不能打开到主机的连接,在端口1521:连接失败的解决方法
- WIN32下使用DirectSound接口的简单音频播放器(支持wav和mp3)
- 斯坦福cs224n-2021 assignment1-探索词向量—词共现矩阵—SVD(奇异值分解)
- FreeFileSync命令用法
- EXP9 web安全基础实践
- python培训班价格-少儿编程培训机构哪家好,儿童编程价格多少钱?家长知多少...
- 3.1 jmeter 响应断言
- python web实例
- 快速傅立叶变换:FFT算法原理及C++实现