10 行Python 代码实现 AI 目标检测技术【推荐】


Posted in Python onJune 14, 2019

只需10行Python代码,我们就能实现计算机视觉中目标检测。

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"] )

没错,用这寥寥10行代码,就能实现目前AI产品中应用广泛的目标检测技术。

看完了代码,下面容我们聊聊目标检测背后的技术背景,并解读这10行Python代码的由来和实现原理。

目标检测简介

人工智能的一个重要领域就是计算机视觉,它是指计算机及软件系统识别和理解图像与视频的科学。计算机视觉包含很多细分方向,比如图像识别、目标检测、图像生成和图像超分辨率等。其中目标检测由于用途广泛,在计算机视觉领域的意义最为深远。

目标检测是指计算机和软件系统能够定位出图像/画面中的物体,并识别出它们。目标检测技术已经广泛应用于人脸检测、车辆检测、人流量统计、网络图像、安防系统和无人车等领域。和其它计算机视觉技术一样,目标检测未来会进一步成为人工智能的重要组成部分,有着广阔的发展前景。

不过,在软件应用和系统中使用现代目标检测方法以及根据这些方法创建应用,并非简单直接。早期的目标检测实现主要是应用一些经典算法,比如OpenCV中支持的算法。然而这些算法的表现并不稳定,在不同情况下差异巨大。

2012年深度学习技术的突破性进展,催生了一大批高度精准的目标检测算法,比如R-CNN,Fast-RCNN,Faster-RCNN,RetinaNet和既快又准的SSD及YOLO。使用这些基于深度学习的方法和算法,需要理解大量的数学和深度学习框架。现在全世界有数以百万计的开发者在借助目标检测技术创造新产品新项目,但由于理解和使用较为复杂困难,仍有很多人不得要领。

为了解决这个困扰开发者们的问题,计算机视觉专家Moses Olafenwa带领团队推出了Python库ImageAI,能让开发人员只需寥寥数行代码就能很容易的将最先进的计算机视觉技术应用到自己的项目和产品中。

我们开头所示的10行代码实现,就是要用到ImageAI。

如何借助ImageAI轻松实现目标检测

使用ImageAI执行目标检测,你只需以下4步:

1.在电脑上安装Python

2.安装ImageAI及其环境依赖

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

4.运行示例代码,就是我们展示的那10行

下面我们一步步详细讲解。

1)从Python官网下载和安装Python 3

python.org/

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 install

3)通过该 链接 下载RetinaNet 模型文件用于目标检测。

到了这里我们已经安装好了所有依赖,就可以准备写自己的首个目标检测代码了。 创建一个Python文件,为其命名(比如FirstDetection.py),然后将如下代码写到文件中,再把RetinaNet模型文件以及你想检测的图像拷贝到包含该Python文件的文件夹里。

FirstDetection.py

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所在的文件夹,你就会发现有新的图像保存在了里面。比如下面两张示例图像,以及执行目标检测后保存的两张新图像。

目标检测之前:

10 行Python 代码实现 AI 目标检测技术【推荐】 10 行Python 代码实现 AI 目标检测技术【推荐】

目标检测之后:

10 行Python 代码实现 AI 目标检测技术【推荐】 10 行Python 代码实现 AI 目标检测技术【推荐】

我们可以看到图像上显示了检测出的物体名称及概率。

解读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.detectObjectFromImage函数返回的所有结果,然后打印出第二行中模型对图像上每个物体的检测结果(名称和概率)。

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)

我们用前面的第一张图像作为例子,可以得到图像中检测到的各个物体的单独图像:

10 行Python 代码实现 AI 目标检测技术【推荐】

ImageAI提供了很多功能,能够用于各类目标检测任务的自定义和生产部署。包括:

-调整最小概率:默认概率小于50%的物体不会显示,如有需要,你可以自行调整这个数字。

-自定义目标检测:使用提供的CustomObject类,你可以检测一个或多个特定物体。

-调整检测速度:可以通过将检测速度设为“快”“更快”“最快”三个不同等级,调整检测速度。

-输入输出类型:你可以自定义图像的路径,Numpy数组或图像的文件流为输入输出。

诚然,单看这10行代码每一行,谈不上惊艳,也借助了不少库,但是仅用10行代码就能让我们轻松实现之前很麻烦的目标检测,还是能谈得上“给力”二字。

总结

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

Python 相关文章推荐
Python yield 小结和实例
Apr 25 Python
Python制作刷网页流量工具
Apr 23 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 Python
Python一行代码实现快速排序的方法
Apr 30 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
Django获取model中的字段名和字段的verbose_name方式
May 19 Python
pandas.DataFrame.drop_duplicates 用法介绍
Jul 06 Python
opencv 图像轮廓的实现示例
Jul 08 Python
Python中threading库实现线程锁与释放锁
May 17 Python
Python3 Tkinter选择路径功能的实现方法
Jun 14 #Python
Python Tkinter 简单登录界面的实现
Jun 14 #Python
python tkinter实现界面切换的示例代码
Jun 14 #Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 #Python
对python tkinter窗口弹出置顶的方法详解
Jun 14 #Python
Python 抓取微信公众号账号信息的方法
Jun 14 #Python
python字典一键多值实例代码分享
Jun 14 #Python
You might like
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
2019/04/29 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
python编程开发之类型转换convert实例分析
2015/11/13 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
对python 自定义协议的方法详解
2019/02/13 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
python安装scipy的步骤解析
2019/09/28 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
python实现双色球随机选号
2020/01/01 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
校三好学生主要事迹
2014/01/11 职场文书
搞笑征婚广告词
2014/03/17 职场文书
反对邪教标语
2014/06/30 职场文书
2015年推普周活动总结
2015/03/27 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL