微信号:YunTouTiao

介绍:云计算领域科技媒体:传播观点,传播价值;Web:www.yuntoutiao.com ,欢迎互动~~~

10行代码搞一个对象检测系统!

2018-06-23 22:01 云头条

作者简介:Moses Olafenwa是AI Commons的深度学习和计算机视觉研究员及开发员。



计算机视觉是AI的重要领域之一。计算机视觉是指计算机和软件系统可以识别并理解图像和场景这门学科。计算机视觉还包括各个方面,比如图像识别、对象检测、图像生成和图像超分辨率等。由于实际使用场景数量众多,对象检测可能是计算机视觉影响最深远的一个方面。我在本文中将简要介绍现代对象检测这一概念、软件开发人员面临的挑战、我的团队提供的解决方案以及执行高性能对象检测的代码教程。


对象检测是指计算机和软件系统能够确定图像/场景中的对象,并识别每个对象。对象检测已广泛用于人脸检测、车辆检测、行人计数、互联网图像、安全系统和自动驾驶汽车。对象检测应用于许多实际领域还有诸多方法。与另外每种计算机技术一样,对象检测的各种创造性、令人惊讶的用途肯定离不开计算机程序员和软件开发人员的努力。


将现代对象检测方法应用于应用程序和系统中,并且构建基于这些方法的新应用程序,这并非易事。对象检测的早期实现需要使用经典算法,比如OpenCV这种大受欢迎的计算机视觉库中支持的算法。然而,这些经典算法无法获得足以适用于不同情形的性能。


2012年深度学习迎来了突破,并迅速得到速采用,带来了准确度很高的现代对象检测算法和方法(比如R-CNN、Fast-RCNN、Faster-RCNN和RetinaNet)以及速度快、准确度又高的算法和方法(比如SSD和YOLO)。使用这些方法和算法(它们基于深度学习,深度学习又基于机器学习),需要扎实的数学基础,并且深入了解深度学习框架。数百万的专家级计算机程序员和软件开发人员想要集成和创建使用对象检测的新产品。但由于了解并实际使用对象检测很复杂,这项技术不在他们的享用范围之内。


我的团队几个月前意识到了这个问题,这就是为什么我和约翰•奥拉芬瓦(John Olafenwa)构建了ImageAI,这个Python库让程序员和软件开发人员可以轻松地将最先进的计算机视觉技术集成到他们的新老应用程序中,只使用几行代码即可。


想使用ImageAI执行对象检测,只需要做这几步:


1.将Python安装到你的计算机系统上。

2.安装ImageAI及其依赖项。

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

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


现在咱们开始上手吧


1) 从Python官网下载并安装Python 3。

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

pip install

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

3)通过该链接:https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

,下载将用于对象检测的RetinaNet模型文件。


好了。你已安装好了依赖项,可以准备编写你的第一段对象检测代码了。创建一个Python文件,并取名(比如FirstDetection.py),然后往文件里面编写下列代码。将RetinaNet模型文件和你想要检测的图像拷贝到含有python文件的文件夹。


FirstDetection.py



然后运行代码,等结果在控制台输出。一旦结果输出到控制台,进入到你的FirstDetection.py所在的文件夹,会看到一个新的图像已保存。看看下面2个图像示例和检测后保存的新图像。


检测前:


图片来源:alzheimers.co.uk


图片来源:维基共享资源


检测后:



上面图像的控制台结果:


人: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



上面图像的控制台结果:


人: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行代码是如何工作的。



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



在上面2行代码中,我们第一行迭代detector.detectObjectsFromImage函数返回的所有结果,然后在第二行针对图像中检测到的每个对象,输出对象的名称和模型的百分比概率在上面5行代码中,我们在第一行中定义了对象检测类,在第二行中将模型类型设置为RetinaNet,在第三行将模型路径设置为RetinaNet模型的路径,在第四行将模型加载到对象检测类,然后在第五行调用检测函数,并解析输入图像路径和输出图像路径。

ImageAI支持对象检测过程的许多强大的定制。其中之一就是能够提取图像中检测到的每个对象的图像。只要将额外的参数extra_detected_objects = True解析到detectObjectsFromImage函数,如下所示,对象检测类就可以为图像对象创建一个文件夹,提取每个图像,将每个图像保存到新创建的文件夹,并返回含有每个图像路径的额外数组。



将它运用于第一个图像可以从结果看到一些图像,如下所示:



所有行人的照片都被提取出来。我没有包括所有照片,它们会占用不必要的空间。


ImageAI为对象检测任务提供了多得多的功能,可用于定制和生产级部署。一些支持的功能如下:


  • 调整最小概率:默认情况下,检测到概率百分比小于50的对象不会显示或报告。你可以为很确定的情况提高该值,或者为需要检测所有可能对象的情况降低该值。

  • 自定义对象检测:使用提供的CustomObject类,你可以让检测类报告针对一个或几个独特对象的检测结果。

  • 检测速度:通过将检测速度设置为“快速”、“更快”和“最快”,你可以缩短检测图像所花的时间。

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

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


可以在官方GitHub代码仓库(https://github.com/OlafenwaMoses/ImageAI)上找到关于如何使用上述功能的详细信息和说明文档以及ImageAI所包含的其他计算机视觉功能。


 
云头条 更多文章 谷歌工程师“叛乱” 拒绝为军事订单开发安全技术 又起争论?今天有人说世界上只有一种云…… 百度技术研发人员跳槽至头条被诉窃取机密 或面临100万赔偿 AI 寒冬:炒作不是在退潮,而是在爆裂(附 5 篇论文佐证) 谷歌云因重复分配 IP 地址......一大堆虚拟机瘫痪了
猜您喜欢 深夜换脸啦,神秘的程序员们头像包第三发 Android | 图解外部存储和内部存储 聊聊设计模式(1):桥接模式 有哪些可以提高程序员技术档次的书? 程序员如何正确的评估自己的薪资