10行代码让你轻松搞定对象检测

简介:  十行代码轻松搞定对象检测?快来看看如何使用ImageAI。

 4462ce695d504ed268311d03461b99e53c973529

计算机视觉是人工智能领域中最重要的一个分支。计算机视觉是一门能够识别和理解图像及其场景的计算机软件系统的科学。计算机视觉包括图像识别、对象检测、图像生成、图像超分辨率等多个方面。这其中有众多实际案例的就是对象检测,因此,对象检测可能是计算机视觉最有影响力的一个分支。本教程将简要介绍现代对象检测的概念、软件开发人员所面临的挑战、我们团队提供的解决方案以及高性能对象检测的代码教程。

对象检测是指计算机和软件系统在图像或场景中对目标对象进行定位和识别的能力。在实际应用中,目标检测已广泛用于人脸识别、车辆检测、行人计数、网络图像、安全系统和无人驾驶。并且,目前有很多种方法可用于对象检测。其他任何计算机技术一样,对象检测的各种创造性和惊人的用途,来自于开发人员的不懈努力。

使用现代对象检测方法、以及基于这些方法构建新的应用程序并不是一个简单的任务。早期的对象检测大多使用经典算法,如计算机视觉库OpenCV中的算法。然而,在不同的环境中,这些经典算法的性能并没有达到我们所期望的性能。

2012年,深度学习有了新的突破,并被开发者广泛使用,出现了R-CNNFast-RCNNFaster-RCNNRetinaNet等现代高精度对象检测算法(方法),以及SSDYOLO等快速高精度对象检测算法(方法)。要想使用这些基于深度学习(同时也基于机器学习)的算法进行对象检测,开发人员则需要掌握大量的数学和深度学习框架的相关知识。有数百万计的开发人员想要使用对象检测来创建新的产品。但是,由于深度学习技术理解和使用起来比较复杂,因此,这项技术很难掌握。

几个月前,我们就意识到了这一问题,我和John Olafenwa共同构建了ImageAI这个Python库,利用ImageAI,仅仅使用几行代码,开发人员就可以轻松地将最新的计算机视觉技术集成到现有的新应用程序中。

使用ImageAI进行对象检测的步骤如下:

1.在系统上安装Python

2.安装ImageAI及其依赖项。

3.下载对象检测模型文件。

4.运行示例代码(10行)。

详细步骤如下:

1.Python官网下载并安装Python 3

2.使用pip命令安装以下依赖项:

(1)Tensorflow

命令:pip install tensorflow

(2)Numpy

命令:pip install numpy

(3)SciPy

命令:pip install scipy

(4)OpenCV

命令:pip install opencv-python

(5)Pillow

命令:pip install pillow

(6)Matplotlib

命令:pip install matplotlib

(7)H5py

命令:pip install h5py

(8)Keras

命令:pip install keras

(9)ImageAI

命令:pip installhttps://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl

3.下载用于对象检测的RetinaNet模型文件。

安装好了依赖项,现在就可以编写第一个对象检测代码了创建一个Python文件并为其命名(如:FirstDetection.py),然后写入代码(如下图所示)。并将RetinaNet模型文件和要检测的图像复制到包含python文件的文件夹中。

FirstDetection.py

 7f2206f68b13e5b25713246834c1724288eb685d

运行代码,并将结果打印到控制台,在FirstDetection.py所在的文件夹内,你就能找到保存的新图像。 看看下面的2个图像样本和检测后保存的新图像。

对象检测前:

 1ee51550c4fbdd182c35c54452758937c6ab9de7

 59248d95ef5d3abe49cfb9866cee60212f895513

对象检测后:

 4462ce695d504ed268311d03461b99e53c973529

控制台输出结果:

 : 55.8402955532074

 : 53.21805477142334

: 69.25139427185059

: 76.41745209693909

自行车: 80.30363917350769

 : 83.58567953109741

: 89.06581997871399

货车 : 63.10953497886658

: 69.82483863830566

: 77.11606621742249

公交车: 98.00949096679688

货车 : 84.02870297431946

小汽车: 71.98476791381836

 0c396c8b573c50730149e2052d70d962dffd929c

控制台输出结果:

: 71.10445499420166

: 59.28672552108765

: 59.61582064628601

: 75.86382627487183

摩托车: 60.1050078868866

公交车: 99.39600229263306

小汽车 : 74.05484318733215

: 67.31776595115662

 : 63.53200078010559

: 78.2265305519104

: 62.880998849868774

: 72.93365597724915

: 60.01397967338562

: 81.05944991111755

摩托车: 50.591760873794556

摩托车: 58.719027042388916

: 71.69321775436401

自行车: 91.86570048332214

摩托车: 85.38855314254761

现在,我们来看一下这10行代码是如何运行的。

 d393eeff66a34c24d11abad82cc4cce62e1b5450

如上图所示,第一行导入了ImageAI对象检测类,第二行导入了python os类,第三行定义了一个变量来保存python文件、RetinaNet模型文件和图像所在的文件夹的路径 。

 17a5a1e797e81d718e1adacd762bc04d035c373d

在上图中的5行代码中,第一行中定义了对象检测类,第二行将模型类型设置为RetinaNet,第三行将模型路径设置为RetinaNet模型的路径,第四行将模型加载到对象检测类,第五行调用检测函数,并在输入和输出图像路径中分别进行解析。

 43c086ffc1163a16e4554dd094c6fda68c1335a3

在上面的两行代码中,第一行将detector.detectObjectsFromImage函数返回的所有结果进行迭代,第二行打印出模型在每个图像上检测出来的对象名称和概率。

ImageAI支持对象检测过程的定制,其中之一就是能够提取图像中检测到的每个对象。如下所示,通过简单地将extra_detected_objects = True设置为detectObjectsFromImage函数的参数,对象检测模型将为检测到的对象创建创建一个文件夹,提取每个图像,并将每个图像都保存到新创建的文件夹中,并返回一个包含每个对象的数组。

 d5313af334217344c0709fa004966a54ec729b19

让我们来看第一张图片的输出结果:

 8ab428a861db18267776d3aa48aa4a2179996243

 2dbed2898412ffe569dd4488f7e61bf37f73bb4d

所有照片中的行人也被提取出来了,这里我并没有列出所有提取的行人。

ImageAI提供了更多有用的功能,可用于对象检测任务的定制和生产功能部署,它所支持的功能如下:

1.调整最小概率阈值:默认情况下,检测的概率百分比小于50%的对象将不会显示或输出。ImageAI可以为高确定性案例中提高该概率阈值;或者在需要检测所有可能对象的情况下降低该阈值。

2.自定义对象检测:使用ImageAI提供的CustomObject类,你可以告诉检测类对一个或几个唯一对象的检测结果进行输出。

3.检测速度:可以将检测速度设置为快速更快最快,可以缩短检测对象所需的时间。

4.输入类型:你可以指定图像的文件路径,指定图像的Numpy数组或文件流作为输入图像

5.输出类型:你可以指定detectObjectsFromImage函数将图像以文件还是以Numpy数组的形式返回。

你可以在GitHub官方存储库中找到有关如何使用上述功能以及ImageAI中包含的其他计算机视觉功能的所有详细信息和文档。

  数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

以上为译文。

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《Object Detection with 10 lines of code》,译者:Mags,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

相关文章
|
存储 缓存 NoSQL
Redis多级缓存指南:从前端到后端全方位优化!
本文探讨了现代互联网应用中,多级缓存的重要性,特别是Redis在缓存中间件的角色。多级缓存能提升数据访问速度、系统稳定性和可扩展性,减少数据库压力,并允许灵活的缓存策略。浏览器本地内存缓存和磁盘缓存分别优化了短期数据和静态资源的存储,而服务端本地内存缓存和网络内存缓存(如Redis)则提供了高速访问和分布式系统的解决方案。服务器本地磁盘缓存因I/O性能瓶颈和复杂管理而不推荐用于缓存,强调了内存和网络缓存的优越性。
1267 47
|
SQL 前端开发 关系型数据库
导出任务耗时怎么优化?
当处理大量数据的导入导出时,需避免长时间阻塞用户界面。推荐采用异步任务处理方式,提交任务后后台线程执行数据处理。对于导出功能,设计前端界面包括“导出”与“导出记录”按钮;导出记录包含批次号、时间、导出URL等字段。后端生成Excel文件并上传至服务器,记录URL以便下载。导入功能类似,记录批次号、总条数、成功条数等信息。为避免大量数据查询导致内存溢出或系统响应缓慢,应使用分批处理策略,例如分页查询来减轻MySQL内存负担。提供了Java工具类实现分页查询和处理逻辑
155 0
|
12月前
|
消息中间件
确认机制(Acknowledgements)
确认机制(Acknowledgements)
|
11月前
|
SQL 数据挖掘 数据库
虚拟化数据恢复—XenServer虚拟化平台数据恢复案例
服务器虚拟化数据恢复环境: 某品牌720服务器中有一组通过同品牌、型号为H710P的RAID卡+4块STAT硬盘组建的RAID10磁盘阵列。上层部署XenServer虚拟化平台。1台Windows Server操作系统虚拟机,该虚拟机有2块虚拟磁盘(系统盘+数据盘),当作网站服务器使用。 服务器虚拟化故障: XenServer虚拟机不可用,虚拟磁盘中数据丢失。
|
存储 缓存 关系型数据库
MySQL的InnoDB引擎:深度解析与应用
【4月更文挑战第20天】本文深入探讨MySQL的InnoDB引擎,它采用MVCC和行级锁定实现高并发、高性能数据操作。InnoDB通过缓冲池减少I/O,支持ACID事务、外键约束和行级锁定,提供数据一致性。此外,还支持全文索引和灵活的索引策略。其高并发性能、数据一致性和可扩展性使其成为首选存储引擎。
741 12
|
数据采集 人工智能 监控
阿里云百炼模型训练实战流程:从入门到实战应用
【7月更文第2天】阿里云百炼是AI大模型开发平台,提供一站式服务,涵盖模型训练到部署。用户从注册登录、创建应用开始,选择模型框架,配置资源。接着,进行数据准备、预处理,上传至阿里云OSS。模型训练涉及设置参数、启动训练及调优。训练后,模型导出并部署为API,集成到应用中。平台提供监控工具确保服务性能。通过百炼,开发者能高效地进行大模型实战,开启AI创新。
4019 2
|
机器学习/深度学习 数据采集 算法
Python实现随机森林回归模型(RandomForestRegressor算法)项目实战
Python实现随机森林回归模型(RandomForestRegressor算法)项目实战
|
监控 NoSQL Java
Spring Boot集成Redis启动失败【Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.G】
Spring Boot集成Redis启动失败【Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.G】
|
负载均衡 监控 安全
解析Java中的服务治理与负载均衡
解析Java中的服务治理与负载均衡
|
SQL Java 数据库连接
【MyBatisPlus】通俗易懂 快速入门 详细教程
【MyBatisPlus】通俗易懂 快速入门 详细教程
1258 0