来源丨大数据文摘

编译丨邢畅、宁静

计算机视觉是人工智能的一个重要领域,是关于计算机和软件系统的科学,可以对图像和场景进行识别、理解。计算机视觉还包括图像识别、目标检测、图像生成、图像超分辨率重建等多个领域。由于存在大量的实际需求,目标检测可能是计算机视觉中最有意义的领域。

目标检测是指计算机和软件系统对图像或场景中的目标进行定位和识别的任务。目标检测已广泛应用于人脸检测、车辆检测、人流量统计、网络图像、安防系统和无人驾驶等多个领域。

在应用或系统中使用目标检测方法,以及基于这些方法构建新的应用都不是简单的任务。早期目标检测的实现基于经典算法,比如流行的计算机视觉库OpenCV中支持的算法。然而,这些经典算法在不同的条件下无法获得稳定的性能。

2012年深度学习的突破性进展和迅速普及,使得R-CNN、Fast-RCNN、Faster-RCNN、RetinaNet以及快速、高度准确的SSD、YOLO等目标检测算法应运而生。这些基于深度学习、机器学习的算法,需要一定的数学以及深度学习框架基础。有数百万的专业计算机程序员和软件开发人员想要集成和创建基于目标检测算法的新产品。同时由于理解和实际使用较为复杂,一直无法实现。如何开发出高效的目标检测代码呢?ImageAI就应运而生了。

ImageAI让代码变得简洁

ImageAI是一个python库,只需要几行代码,就可以让程序员和软件开发人员轻松地将最先进的计算机视觉技术集成到他们现有的或新的应用中,ImageAI已经在Github上开源。

Github地址:

https://github.com/OlafenwaMoses/ImageAI

ImageAI目前支持使用在ImageNet-1000数据集上训练的4种不同机器学习算法进行图像预测和训练。ImageAI还支持使用在COCO数据集上训练的RetinaNet,YOLOv3和TinyYOLOv3进行对象检测,视频检测和对象跟踪。最后,ImageAI允许训练自定义模型,以执行新目标的检测和识别。

ImageAI库有依赖其他Python库,所以在使用ImageAI开发之前还需要导入其他的包。

准备工作

使用ImageAI实现目标检测,只需进行以下4步:

  1. 在你的电脑上安装Python

  2. 安装ImageAI,配置依赖环境

  3. 下载目标检测模块文件

  4. 运行样例代码(只需10行)

下面一步步详细展开:

1)从Python官网下载并安装Python3

链接地址:

https://python.org

2)用pip命令安装以下依赖包:

i. Tensorflow

pip install tensorflow

ii. Numpy

pip install numpy

iii. SciPy

pip install scipy

iv. OpenCV

pip install opencv-python

v. Pillow

pip install pillow

vi. Matplotlib

pip install matplotlib

vii. H5py

pip install h5py

viii. Keras

pip install keras

ix. ImageAI

pip3 install imageai --upgrade

注意:第一次安装ImageAI库,需要下载对应版本的.whl文件,文摘菌的电脑是Python3的环境,所以下载了imageai-2.0.2-py3-none-any.whl 文件,然后转移到相应的文件夹下,执行如下命令即可安装:

pip install imageai-2.0.2-py3-none-any.whl

.whl文件链接地址:

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

3)下载用于目标检测的RetinaNet模型文件

链接地址:

https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

开启10行代码的目标检测

到这里你已经安装好了所有的依赖项,可以开始编写你的第一个目标检测的代码了。

创建一个Python文件并命名(如FirstDetection.py),然后将下面的代码写入该文件。将RetinaNet模型文件和要检测的图像复制到包含Python文件的文件夹中。

FirstDetection.py:

from imageai.Detection import ObjectDetection
import osexecution_path = os.getcwd()detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))for eachObject in detections:print(eachObject["name"] , " : " , eachObject["percentage_probability"] )

然后运行代码,等待结果输出。结果显示后,就可以在FirstDetection.py所在的文件夹下找到保存下来的新图像。下面有两个新图像的示例。

目标检测前:

图片来源:alzheimers.co.uk

图片来源:Wikicommons

目标检测后:

在Spyder编译器中运行结果如下所示:

输出的目标检测精度结果:

person  :  57.20391869544983

person  :  52.57977843284607

person  :  70.81094980239868

person  :  76.99859142303467

person  :  79.40077781677246

bicycle  :  81.0384213924408

person  :  83.66722464561462

person  :  89.41188454627991

truck  :  60.61040759086609

person  :  69.65749859809875

bus  :  97.92424440383911

truck  :  83.94358158111572

car  :  72.50492572784424

在Spyder编译器中运行结果如下所示:

输出的目标检测精度结果:

person  :  62.45866417884827

person  :  58.67737531661987

person  :  69.44932341575623

person  :  71.84218168258667

person  :  59.53381657600403

person  :  54.65759038925171

motorcycle  :  65.84504842758179

bus  :  99.40318465232849

car  :  72.41445779800415

person  :  58.32530856132507

person  :  54.449981451034546

person  :  80.11815547943115

person  :  74.30745959281921

person  :  77.78302431106567

person  :  71.15439772605896

bicycle  :  69.92427110671997

person  :  66.17957353591919

bicycle  :  90.50283432006836

motorcycle  :  94.09030675888062

短短10行代码就出了目标检测的结果,这也太快了吧!本着对真理探索的热情,在弄懂里面的原理后,文摘菌将在下文对每行代码进行解读。

知其然知其所以然:代码解读

下面来解释一下这10行代码的工作原理:

from imageai.Detection import ObjectDetection
import os
execution_path = os.getcwd()

在以上3行代码中,在第一行导入了ImageAI的目标检测类;在第二行导入了Python的os类;在第三行中定义了一个变量,保存Python文件、RetinaNet模型文件以及图像所在文件夹的路径。

detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))

在以上5行代码中,我们在第一行中定义了一个目标检测类的实例;在第二行中将实例的模型类型设定为RetinaNet;在第三行中将模型路径设置为RetinaNet模型的路径;在第四行中将模型加载到目标检测类的实例中;在第五行中调用检测函数,并将文件输入输出路径作为参数传入。

for eachObject in detections:print(eachObject["name"] , " : " , eachObject["percentage_probability"] )

在以上两行代码中,第一行用来对detector.detectObjectsFromImage 函数返回的所有结果进行迭代,第二行用来输出图片中检测到的每个目标的名字及其概率。

自定义目标检测

除此外,ImageAI也支持强大的自定义目标检测。其中之一是能够提取图像中检测到的每个物体。只需要将参数

extract_detected_objects=True

传入

detectObjectsFromImage

函数中,如下所示,目标检测类将为图像对象创建一个文件夹,提取每个图像,将每个子图像保存到创建的新文件夹中,并返回一个包含每个图像路径的数组。

detections, extracted_images = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"), extract_detected_objects=True)

将其应用到第一张图片上,得到如下结果:

所有行人都被很好地提取了出来,为了节约空间这里只显示了一部分。

ImageAI的其他功能

ImageAI提供了许多功能,可用于目标检测任务的自定义和部署。其支持的功能包括:

  • 调整最小概率:默认情况下,概率小于50%的物体不会显示。对于需要高精度的情况,可以增加此值;对于需要检测所有可能对象的情况,可以减少此值。

  • 自定义目标检测:通过提供的CustomObject类,可以使检测类检测一个或几个特定目标。

  • 检测速度:通过将检测速度设置为“fast”、“faster”或“fastest”,可以减少检测图像所需的时间。

  • 输入类型:可指定并解析图像的文件路径,以Numpy数组或图像文件流作为输入

  • 输出类型:可指定detectObjectsFromImage函数以文件或Numpy数组的形式返回图像

你可以在上文给出的官方GitHub链接中找到如何使用上述功能以及ImageAI中包含的其他计算机视觉功能的详细信息和文档。

相关报道:

https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606

万水千山总是情,点个 

太逆天了,10行Python代码实现目标检测!!相关推荐

  1. 教你用10行Python代码实现目标检测(附代码)

    来源:大数据文摘 本文约2729字,建议阅读6分钟. 本文介绍了一个名为ImageAI 的Python库,集成了现今流行的深度学习框架和计算机视觉库,手把手教你构建自己的目标检测应用. 后台回复&qu ...

  2. python目标识别_10行Python代码实现目标检测

    要知道图像中的目标是什么? 或者你想数一幅图里有多少个苹果? 在本文中,我将向你展示如何使用Python在不到10行代码中创建自己的目标检测程序. 如果尚未安装python库,你需要安装以下pytho ...

  3. 10 行 Python 代码能实现哪些有趣功能?

    大家好,我是菜鸟哥 Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的操作.下 ...

  4. 10行python代码的词云

    关于词云wordcloud 什么是词云呢?词云又叫文字云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本 ...

  5. 10行 python 代码做出哪些酷炫的事情?

    来源 | Python小二 Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的 ...

  6. 获取clientheight为0_用10行python代码获取全国城市交通生活圈

    今天在网上冲浪看到一个很花哨的数据,全国各城市主要商圈从早上6点到晚上10点的20min,30min,45min,60min,90min生活圈轮廓. 1 获取思路 按下F12 按下F12,点击淮海路可 ...

  7. 10行python代码可以做哪些酷炫的事情

    前言 今天玩啥?10行代码够玩吗? Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环, Python可以凭借更加简短的代码实现 ...

  8. 10行python代码做出哪些酷炫的事情?

    大家好,我是辰哥~ Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的操作.下 ...

  9. 10行python代码做出哪些酷炫的事情? 小白教程

    Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的操作.下面我们来看看,我们用 ...

最新文章

  1. Apache Traffic Server管理工具
  2. inconsistent use of tabs and spaces in indentation
  3. 5-spark学习笔记-spark集群应用与监控
  4. 【原】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...
  5. promise中调用ajax
  6. BZOJ1051|HAOI2006受欢迎的牛|强连通分量
  7. 蓝桥杯 PREV-54 历届试题 合根植物
  8. 电磁场中场点和源点及▽(R)▽(1/R)▽.▽(1/R)
  9. 20款免费公司企业wordpress主题
  10. SQL Server数据库查询sql去掉小数后点后末尾的0
  11. 2021-06-19列表的介绍
  12. 闪迪内存卡软件测试,存储卡不稳定?我们用微波炉测试 结果震惊了!
  13. VMware要不要装在固态SSD上,虚拟机系统文件要不要放固态SSD上,虚拟机伤不伤固态SSD...
  14. 51单片机学习笔记——串口通信
  15. 如何使用快应用内置地图查看、导航位置
  16. 纯css实现翻书效果
  17. 浅层砂过滤器的原理是什么,滤料是什么,需要不需要定期?
  18. 图片择优算法(模糊图片筛选出最清楚的图片) 没有使用第三方库
  19. 计算机一级考试瓜果产量,全国计算机等级考试一级B考试(最新样题).doc
  20. 软件测试——基础理论知识你都不一定看得懂

热门文章

  1. 硬件不足?场景复杂?lumion渲染慢怎么办?
  2. 【MMU篇】初见MMU和TLB
  3. DNS服务器之二:权威服务器的搭建(正向、反向、双向解析、远程更新、辅助DNS)与动态域名解析
  4. 面试官与JAVA应聘者的对话
  5. 空间数据模型之从CAD到BIM
  6. 众易贷:2015年了解互联网金融之P2P从这里开始
  7. elementui中el-alert实现换行的方法
  8. 关于安装谷歌浏览器的插件的说明
  9. 什么是金山文档轻维表?如何根据日期自动提醒发送表格中的内容?
  10. 如何快速、批量导出谷歌浏览器里的历史记录