Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用这个Python库,10行代码搞定图像中目标检测

用这个Python库,10行代码搞定图像中目标检测

作者头像
CDA数据分析师
发布于 2021-03-09 09:33:59
发布于 2021-03-09 09:33:59
4.4K00
代码可运行
举报
文章被收录于专栏:CDA数据分析师CDA数据分析师
运行总次数:0
代码可运行

来源:Python专栏

作者:Moses Olafenwa

原文:

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


目标检测是指计算机和软件系统对图像或场景中的目标进行定位和识别的任务。

目标检测已广泛应用于人脸检测、车辆检测、人流量统计、网络图像、安防系统和无人驾驶等多个领域。

早期目标检测的实现基于经典算法,比如流行的计算机视觉库OpenCV中支持的算法。然而,这些经典算法在不同的条件下无法获得稳定的性能。

2012年深度学习的突破性进展和迅速普及,使得R-CNN、Fast-RCNN、Faster-RCNN、RetinaNet以及快速、高度准确的SSD、YOLO等目标检测算法应运而生。

这些基于深度学习、机器学习的算法,需要一定的数学以及深度学习框架基础。有数百万的专业计算机程序员和软件开发人员想要集成和创建基于目标检测算法的新产品。同时由于理解和实际使用较为复杂,一直无法实现。如何开发出高效的目标检测代码呢?

ImageAI就应运而生了。

01 ImageAI让代码变得简洁

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

Github地址:

https://github.com/OlafenwaMoses/ImageAI

ImageAI目前支持使用在ImageNet-1000数据集上训练的4种不同机器学习算法进行图像预测和训练。

ImageAI还支持使用在COCO数据集上训练的RetinaNet,YOLOv3和TinyYOLOv3进行对象检测,视频检测和对象跟踪。最后,ImageAI允许训练自定义模型,以执行新目标的检测和识别。

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

02 准备工作

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

  1. 在你的电脑上安装Python
  2. 安装ImageAI,配置依赖环境
  3. 下载目标检测模块文件
  4. 运行样例代码(只需10行)

下面一步步详细展开:

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

链接地址:

https://python.org

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install tensorflow
pip install numpy
pip install scipy
pip install opencv-python
pip install pillow
pip install matplotlib
pip install h5py
pip install keras
pip3 install imageai --upgrade

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

03 开启10行代码的目标检测

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

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

FirstDetection.py:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from imageai.Detection import ObjectDetection
import os

execution_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所在的文件夹下找到保存下来的新图像。

下面有两个新图像的示例。

目标检测前:

目标检测后:

在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

04

代码解读

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from imageai.Detection 

import ObjectDetectionimport 

osexecution_path = os.getcwd()

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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模型的路径;在第四行中将模型加载到目标检测类的实例中;在第五行中调用检测函数,并将文件输入输出路径作为参数传入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for eachObject in detections:
    print(eachObject["name"] , " : " , eachObject["percentage_probability"] )

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

05

自定义目标检测

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
extract_detected_objects=True

传入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
detectObjectsFromImage

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

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

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

06

ImageAI的其他功能

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

  • 调整最小概率:默认情况下,概率小于50%的物体不会显示。对于需要高精度的情况,可以增加此值;对于需要检测所有可能对象的情况,可以减少此值。
  • 自定义目标检测:通过提供的CustomObject类,可以使检测类检测一个或几个特定目标。
  • 检测速度:通过将检测速度设置为“fast”、“faster”或“fastest”,可以减少检测图像所需的时间。
  • 输入类型:可指定并解析图像的文件路径,以Numpy数组或图像文件流作为输入
  • 输出类型:可指定detectObjectsFromImage函数以文件或Numpy数组的形式返回图像

以上便是ImageAI这个目标检测库的介绍和演示。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CDA数据分析师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
目标检测必须要OpenCV?10行Python代码也能实现,亲测好用!
本文作者和他的团队构建了一个名为ImageAI 的Python库,集成了现今流行的深度学习框架和计算机视觉库。本文将手把手教你构建自己的第一个目标检测应用,而且文摘菌已经帮你踩过坑了,亲测有效!
大数据文摘
2018/07/31
7190
目标检测必须要OpenCV?10行Python代码也能实现,亲测好用!
10行代码实现目标检测,请收下这份教程
作者 | Moses Olafenwa 翻译 | 林椿眄 出品 | 人工智能头条(公众号ID:AI_Thinker) 作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学。该领域主要包括图像识别,目标检测,图像生成,图像超分辨率等多个方向。由于现实中存在众多的实际案例,目标检测应该是计算机视觉中最令人深刻的一个方向。在本教程中,我们将简要介绍包括当前目标检测的概念,软件开发人员所面临的挑战,相应的解决方案以及执行高性能目标检测的编码教程等内容。 目标检测是指计算机和软件
用户1737318
2018/07/20
7510
10 行Python 代码,实现 AI 目标检测技术,真给力!
看完了代码,下面容我们聊聊目标检测背后的技术背景,并解读这10行Python代码的由来和实现原理。
一墨编程学习
2019/06/15
7690
如何用10行代码完成目标检测
人工智能的一个重要领域是计算机视觉。计算机视觉是计算机和软件系统能够识别和理解图像和场景的科学。计算机视觉还包括图像识别、目标检测、图像生成、图像超分辨率等多个方面。由于大量的实际用例,对象检测可能是计算机视觉最深刻的方面。
HuangWeiAI
2020/02/24
7100
ImageAI:专为没有机器学习背景的程序员设计,让你十行代码搞定对象检测
计算机视觉是AI的一个重要领域。计算机视觉是计算机和软件系统的科学,能够识别和理解图像和场景。计算机视觉还包括图像识别,对象检测,图像生成,图像超分辨率等多个方向。由于实际使用案例数量众多,对象检测可能是计算机视觉最深刻的一个方向。在本教程中,我将简要介绍现代对象检测的概念,软件开发人员面临的挑战,我的团队提供的解决方案以及用于执行高性能对象检测的代码教程。
AiTechYun
2018/07/27
9790
ImageAI:专为没有机器学习背景的程序员设计,让你十行代码搞定对象检测
图像目标检测
当前目录是C:\Users\xpp umbrella : 72.03226685523987 : [66, 25, 398, 413] person : 98.65948557853699 : [28, 120, 377, 488] -----------------------
裴来凡
2022/05/29
4880
图像目标检测
使用ImageAI快速构建常见对象检测应用
纯Python的快速对象检测训练与测试平台,基于tensorflow+opencv构建,支持
OpenCV学堂
2019/12/09
1.1K0
使用ImageAI快速构建常见对象检测应用
ImageAI:对象检测
ImageAI 提供了非常方便和强大的方法来对图像执行对象检测并从图像中提取每个对象。目前仅支持当前最先进的 RetinaNet 算法进行对象检测,后续版本会加入对其他算法的支持。在开始对象检测任务前,您必须通过以下链接下载 RetinaNet 模型文件:
Action
2021/03/31
4150
ImageAI:对象检测
可应用的目标检测代码来了,一秒锁定你
计算机视觉是人工智能的一个重要领域。计算机视觉是一门关于计算机和软件系统的科学,可以让计算机对图像及场景进行识别和理解。计算机视觉还包括图像识别、目标检测、图像生成、图像超分辨率重建等分支领域。因为有众多的现实需求,目标检测可能是计算机视觉中最有价值的的领域。在本教程中,我会简要介绍目标检测的概念、开发者面临的挑战和我们提供的解决方案包括高效率的目标检测代码。
AI研习社
2018/07/26
7180
可应用的目标检测代码来了,一秒锁定你
简易版物体识别
阿尔伯特·爱因斯坦曾经说过这么一句话“如果你不能简单地解释它,你就不能很好地理解它”,我深以为然!
AI研习社
2019/07/04
1.1K0
用10行Python代码,实现AI目标检测技术!(Python是最好的语言)
今天为大家带来的内容是,用10行Python代码,实现AI目标检测技术!(Python是最好的语言),本文具有不错的参考意义,希望能够帮助到你!
用户6133654
2019/10/10
7910
用10行Python代码,实现AI目标检测技术!(Python是最好的语言)
教你在Python中构建物体检测系统(附代码、学习资料)
本文介绍物体检测技术以及解决此领域问题的几种不同方法,带你深入研究在Python中如何构建我们自己的对象检测系统。
数据派THU
2018/11/22
1.4K0
SCF: 深度学习之目标检测
很多小伙伴,可能在使用SCF的时候,需要做一些深度学习的操作,但是SCF能跑起来深度学习么?这是个问题!那么,我们就尝试一下,看看如何让SCF跑起来深度学习!
None-xiaomi
2019/06/12
11.6K0
AI与农业:苹果缺陷检测
本文中蓝色字体为外部链接,部分外部链接无法从文章中直接跳转,请点击【阅读原文】以访问。
AiTechYun
2019/09/23
2.2K0
AI与农业:苹果缺陷检测
ImageAI:视频对象检测和跟踪(预览版)
ImageAI 提供方便,灵活和强大的方法来对视频进行对象检测和跟踪。目前仅支持当前最先进的 RetinaNet 算法进行对象检测和跟踪,后续版本会加入对其他算法的支持。虽然这只是预览版本,但提供了很多令人难以置信的选项。在开始视频对象检测和跟踪任务前,您必须通过以下链接下载 RetinaNet 模型文件:
Action
2021/03/31
9580
ImageAI:视频对象检测和跟踪(预览版)
使用Python中的ImageAI进行对象检测
对象检测是一种属于计算机视觉领域的技术。它处理识别和跟踪图像和视频中存在的对象。物体检测具有多种应用,例如面部检测,车辆检测,行人计数,自动驾驶汽车,安全系统等。
拓端
2020/09/25
2.8K0
20 行代码:Serverless 架构下用 Python 轻松搞定图像分类
「图像分类」是人工智能领域的一个热门话题,我们在实际生活中甚至业务的生产环境里,也经常遇到图像分类相似的需求,如何能快速搭建一个图像分类或者内容识别的 API 呢? 我们考虑使用 Serverless Framework 将图像识别模块部署到腾讯云云函数 SCF 上。 这里我们会用到一个图像相关的库:ImageAI,官方给了一个简单的 demo: from imageai.Prediction import ImagePrediction import os execution_path = os.get
腾讯云serverless团队
2020/04/26
6890
ImageAI:图像预测
ImageAI 提供4种不同的算法及模型来执行图像预测,通过以下简单几个步骤即可对任何图片执行图像预测。提供用于图像预测的4种算法包括 SqueezeNet,ResNet,InceptionV3 和 DenseNet。这些算法中的每一个都有单独的模型文件,您必须根据所选算法使用相对应的模型文件,请单击以下链接下载所选算法的模型文件:
Action
2021/03/31
7140
ImageAI:图像预测
Python 数据科学入门教程:TensorFlow 目标检测
你好,欢迎阅读 TensorFlow 目标检测 API 迷你系列。 这个 API 可以用于检测图像和/或视频中的对象,带有使用边界框,使用可用的一些预先训练好的模型,或者你自己可以训练的模型(API 也变得更容易)。
ApacheCN_飞龙
2022/12/01
1.6K0
Python 数据科学入门教程:TensorFlow 目标检测
训练目标检测模型只需要这 6 行代码
原标题 | Train Object Detection AI with 6 lines of code
AI科技评论
2019/08/21
1.5K0
训练目标检测模型只需要这 6 行代码
相关推荐
目标检测必须要OpenCV?10行Python代码也能实现,亲测好用!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档