Python实现一个简单的目标检测

  • 相关介绍
  • 实验环境
  • 基本思路
  • 代码实现
  • 输出结果

相关介绍

  • 选择性搜索(Select Search)算法属于候选区域算法,用分割不同区域的办法来识别潜在的物体。在分割的时候,我们要合并那些在某些方面(如颜色、纹理)类似的小区域。相比滑窗法在不同位置和大小的穷举,候选区域算法将像素分配到少数的分割区域中。所以最终候选区域算法产生的数量比滑窗法少的多,从而大大减少运行物体识别算法的次数。同时候选区域算法所选定的范围兼顾了不同的大小和长宽比。

实验环境

  • Python 3.6.2
  • Tesorflow 2.3.0
  • Numpy 1.18.5
  • Opencv 3.4.2

基本思路

  1. 输入测试图片
  2. 用选择性搜索(Select Search)方法,对输入图片选出N个候选区域
  3. 用训练好的CNN模型预测每个候选区域,保留一个得分最高的候选区域
  4. 输出预测结果图片

代码实现

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实现一个简单的目标检测相关推荐

  1. 用python做一个简单GUI小软件

    用python做一个简单软件 前言 这是一个课设,用python做一个扫描王软件 我主要做的GUI部分,记录分享一下.也是第一次用python做小软件,python的方便果然是名不虚传 遇到问题 1. ...

  2. python推荐系统-利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  3. 基于python的系统构建_利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  4. python推荐_利用Python构建一个简单的推荐系统

    原标题:利用Python构建一个简单的推荐系统 摘要:快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫.在此之前读者需要对pandas和numpy等数据分析包有所了解. 什么 ...

  5. 用python写一个简单的web服务器

    人生苦短,我用python 简洁高效,这才是理想的语言啊 分享一点python的学习经验-----如何用python写一个简单的web服务器 首先,我们需要简单地了解一下网络通信协议,这里用白话介绍一 ...

  6. ICLR2022系列解读之三:一个新的目标检测网络结构范式GiraffeDet

    本文解读我们ICLR2022上发表的论文<GiraffeDet: A Heavy-Neck Paradigm for Object Detection>.我们提出了一个新的目标检测网络结构 ...

  7. 用PaddleDetection做一个完整的目标检测项目(上)

    文章转载自:微信公众号:飞桨PaddlePaddle的微信文章 原文章中由于排版问题,导致文字遮挡,不便阅读,因此对文章格式稍作更改,增加了一些关键词加粗,便于后续阅读. PaddleDetectio ...

  8. python cs开发框架_用Python编写一个简单的CS架构后门的方法

    用Python编写一个简单的CS架构后门的方法 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  用Python编写一个简单的CS架构后门的方法.txt ] (友情 ...

  9. python实现一个简单的远程监控,看看你老婆微信都在聊啥。

    python实现一个简单的远程监控,看看你老婆微信都在聊啥. 1.pywin32模块检测活动窗口 2.PIL模块截图 3.http.server.socketserver开启一个临时web服务. 4. ...

最新文章

  1. thinkphp联查
  2. OpenCV 拉普拉斯算子Laplace Operator
  3. ios多线程Android,iOS 关于多线程
  4. js取字符串后四位_JS逆向 | 某验滑块加密参数逆向分析
  5. 实现输入提示 layui_ASP.NET Core SignalR :学习消息通讯,实现一个消息通知
  6. tcp压力测试工具_DNS压力测试工具之——DNSperf
  7. SVProgressHUD的使用
  8. wamp怎么安装mysql服务器_使用WAMPServer套件可安装Apache服务器和MySQL服务器
  9. 台式计算机 如何组装,台式电脑买回家怎么装_组装方法图文分析
  10. PCB设计中基板颜色含义
  11. 中断驱动的自行车码表
  12. PHP file_get_contents函数详解
  13. 倒计时,距离活动还有0天0时0分0秒
  14. CodeForces-1062E LCA,DFN,RMQ
  15. 微信开发笔记——微信网页登录授权,获取用户信息
  16. 【opencv-python】视频处理(5) cv2.VideoCapture.grab()函数、cv2.VideoCapture.retrieve()函数
  17. 泛谈传统运营商借鉴电商模式
  18. 一、采样频率到底是选择2倍还是10倍?让我用python来给你展示
  19. SpringCloud疑难杂症
  20. dva 切换 history 为 browserHistory 报错

热门文章

  1. windows下修改中用户名为英文
  2. 不能打开到主机的连接,在端口1521:连接失败的解决方法
  3. WIN32下使用DirectSound接口的简单音频播放器(支持wav和mp3)
  4. 斯坦福cs224n-2021 assignment1-探索词向量—词共现矩阵—SVD(奇异值分解)
  5. FreeFileSync命令用法
  6. EXP9 web安全基础实践
  7. python培训班价格-少儿编程培训机构哪家好,儿童编程价格多少钱?家长知多少...
  8. 3.1 jmeter 响应断言
  9. python web实例
  10. 快速傅立叶变换:FFT算法原理及C++实现