利用ImageAI库只需几行python代码实现目标检测


Posted in Python onAugust 09, 2019

什么是目标检测

目标检测关注图像中特定的物体目标,需要同时解决解决定位(localization) + 识别(Recognition)。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因此检测模型的输出是一个列表,列表的每一项使用一个数组给出检出目标的类别和位置(常用矩形检测框的坐标表示)。

通俗的说,Object Detection的目的是在目标图中将目标用一个框框出来,并且识别出这个框中的是啥,而且最好的话是能够将图片的所有物体都框出来。

利用ImageAI库只需几行python代码实现目标检测

目标检测算法

目前目标检测领域的深度学习方法主要分为两类:两阶段(Two Stages)的目标检测算法;一阶段(One Stage)目标检测算法。

Two Stages

首先由算法(algorithm)生成一系列作为样本的候选框,再通过卷积神经网络进行样本(Sample)分类。也称为基于候选区域(Region Proposal)的算法。常见的算法有R-CNN、Fast R-CNN、Faster R-CNN等等。

One Stage

不需要产生候选框,直接将目标框定位的问题转化为回归(Regression)问题处理,也称为基于端到端(End-to-End)的算法。常见的算法有YOLO、SSD等等。

python实现

本文主要讲述如何实现目标检测,至于背后的原理不过多赘述,可以去看相关的论文。

ImageAI是一个简单易用的计算机视觉Python库,使得开发者可以轻松的将最新的最先进的人工智能功能整合进他们的应用。

ImageAI本着简洁的原则,支持最先进的机器学习算法,用于图像预测,自定义图像预测,物体检测,视频检测,视频对象跟踪和图像预测训练。

依赖

•Python 3.5.1(及更高版本)
•pip3
•Tensorflow 1.4.0(及更高版本)
•Numpy 1.13.1(及更高版本)
•SciPy 0.19.1(及更高版本)
•OpenCV
•pillow
•Matplotlib
•h5py
•Keras 2.x

安装

•命令行安装

pip3 install https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl

•下载imageai-2.1.0-py3-none-any.whl 安装文件并在命令行中指定安装文件的路径

pip3 install .\imageai-2.1.0-py3-none-any.whl

使用

Image支持的深度学习的算法有RetinaNet,YOLOv3,TinyYoLOv3。ImageAI已经在COCO数据集上预先训练好了对应的三个模型,根据需要可以选择不同的模型。可以通过下面的链接进行下载使用:

•Download RetinaNet Model - resnet50_coco_best_v2.0.1.h5
•Download YOLOv3 Model - yolo.h5
•Download TinyYOLOv3 Model - yolo-tiny.h5

以上模型可以检测并识别以下80种不同的目标:

person,   bicycle,   car,   motorcycle,   airplane,
bus,   train,   truck,   boat,   traffic light,   fire hydrant, stop_sign,
parking meter,   bench,   bird,   cat,   dog,   horse,   sheep, cow,
elephant,   bear,   zebra,   giraffe,   backpack,   umbrella,
handbag,   tie,   suitcase, frisbee,   skis,   snowboard, 
sports ball,   kite,   baseball bat,   baseball glove,   skateboard,
surfboard,   tennis racket,   bottle,   wine glass,   cup,   fork,   knife,
spoon,   bowl, banana,   apple,   sandwich,   orange,   broccoli,   carrot,
hot dog,   pizza,   donot,   cake,   chair,   couch,   potted plant,   bed,
dining table,   toilet,   tv,   laptop,   mouse,   remote,   keyboard,
cell phone,   microwave,   oven,   toaster,   sink,   refrigerator,
book,   clock,   vase,   scissors,   teddy bear,   hair dryer,
toothbrush

先来看看完整的代码,使用YOLOv3算法对13张照片进行目标识别。

from imageai.Detection import ObjectDetection
import os

detector = ObjectDetection()
detector.setModelTypeAsYOLOv3()
detector.setModelPath("./model/yolo.h5")
detector.loadModel()

path = os.getcwd()
input_image_list = os.listdir(path+"\pic\input")
input_image_list = sorted(input_image_list, key = lambda i:len(i),reverse = False)
size = len(input_image_list)
for i in range(size):
 input_image_path = os.path.join(path+"\pic\input", input_image_list[i])
 output_image_path = os.path.join(path+"\pic\output", input_image_list[i])
 detections, extract_detected_objects = detector.detectObjectsFromImage(input_image=input_image_path,
             output_image_path=output_image_path,
             extract_detected_objects=True)
 print('------------------- %d -------------------' % int(i + 1))
 for eachObject in detections:
  print(eachObject["name"], " : ", eachObject["percentage_probability"], " : ", eachObject["box_points"])
 print('------------------- %d -------------------' % int(i + 1))

首先第一行导入ImageAI Object Detection类,在第二行导入os库。

 然后创建了ObjectDetection类的新实例,接着就可以选择要使用的算法。分别有以下三个函数:

.setModelTypeAsRetinaNet()
.setModelTypeAsYOLOv3()
.setModelTypeAsTinyYOLOv3()

选择好算法之后就要设置模型文件路径,这里给出的路径必须要和选择的算法一样。

.setModelPath()

- 参数path(必须):模型文件的路径

载入模型。

.loadModel()

- 参数detection_speed(可选):最多可以减少80%的时间,单身会导致精确度的下降。可选的值有: “normal”, “fast”, “faster”, “fastest” 和 “flash”。默认值是 “normal”。

通过os库的函数得到输入输出文件的路径等,这不是本文重点,跳过不表。

 开始对图像进行目标检测。

.detectObjectsFromImage()

- 参数input_image(必须):待检测图像的路径
- 参数output_image(必须):输出图像的路径
- 参数parameter minimum_percentage_probability(可选):能接受的最低预测概率。默认值是50%。
- 参数display_percentage_probability(可选):是否展示预测的概率。默认值是True。
- 参数display_object_name(可选):是否展示识别物品的名称。默认值是True。
- 参数extract_detected_objects(可选):是否将识别出的物品图片保存。默认是False。

返回值根据不同的参数也有不同,但都会返回一个an array of dictionaries。字典包括以下几个属性:

* name (string)
* percentage_probability (float)
* box_points (tuple of x1,y1,x2 and y2 coordinates)

前面说过可以识别80种目标,在这里也可以选择只识别自己想要的目标。

custom = detector.CustomObjects(person=True, dog=True)

detections = detector.detectCustomObjectsFromImage( custom_objects=custom, input_image=os.path.join(execution_path , "image3.jpg"), output_image_path=os.path.join(execution_path , "image3new-custom.jpg"), minimum_percentage_probability=30)

首先用定义自己想要的目标,其余的目标会被设置为False。然后配合.detectCustomObjectsFromImage()进行目标检测。

主要的代码基本如上所述,接下来看结果。先看看图片中只有一个目标的效果。

利用ImageAI库只需几行python代码实现目标检测

利用ImageAI库只需几行python代码实现目标检测

------------------- 10 -------------------
dog  :  98.83476495742798  :  (117, 91, 311, 360)
dog  :  99.24255609512329  :  (503, 133, 638, 364)
dog  :  99.274742603302  :  (338, 38, 487, 379)
------------------- 10 -------------------

效果还是不错的。再看看如果图片中有多个目标识别的结果如何。

利用ImageAI库只需几行python代码实现目标检测

利用ImageAI库只需几行python代码实现目标检测

------------------- 4 -------------------
book : 55.76887130737305 : (455, 74, 487, 146)
book : 82.22097754478455 : (466, 11, 482, 69)
tv : 99.34800863265991 : (25, 40, 182, 161)
bed : 88.7190580368042 : (60, 264, 500, 352)
cat : 99.54025745391846 : (214, 125, 433, 332)
------------------- 4 -------------------

识别度还是很高的,背后人眼都看不清的书本都能被识别。

附录

GitHub:https://github.com/Professorchen/Computer-Vision/tree/master/object-detection

总结

以上所述是小编给大家介绍的利用ImageAI库只需几行python代码超简实现目标检测,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
使用python实现扫描端口示例
Mar 29 Python
Python实现二叉搜索树
Feb 03 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
速记Python布尔值
Nov 09 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
python write无法写入文件的解决方法
Jan 23 Python
Python实现图片转字符画的代码实例
Feb 22 Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
Python+Kepler.gl实现时间轮播地图过程解析
Jul 20 Python
五分钟学会怎么用python做一个简单的贪吃蛇
Jan 12 Python
python操作excel让工作自动化
Aug 09 #Python
python笔记_将循环内容在一行输出的方法
Aug 08 #Python
python中的列表与元组的使用
Aug 08 #Python
详解python中的数据类型和控制流
Aug 08 #Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 #Python
Python2和3字符编码的区别知识点整理
Aug 08 #Python
Python编程中类与类的关系详解
Aug 08 #Python
You might like
PHP制作图型计数器的例子
2006/10/09 PHP
用PHP+MySql编写聊天室
2006/10/09 PHP
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
python如何调用字典的key
2020/05/25 Python
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
抄作业检讨书
2014/02/17 职场文书
毕业生自荐信格式
2014/03/07 职场文书
小学生寒假家长评语
2014/04/16 职场文书
演讲稿开场白台词
2014/08/25 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
python神经网络 使用Keras构建RNN训练
2022/05/04 Python