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实现的防DDoS脚本
Feb 08 Python
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
python面向对象_详谈类的继承与方法的重载
Jun 07 Python
python的turtle库使用详解
May 10 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
Jan 25 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
python requests.get带header
May 05 Python
python如何实现DES加密
Sep 21 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
Python中的程序流程控制语句
Feb 24 Python
Pandas-DataFrame知识点汇总
Mar 16 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中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
功能强大的php文件上传类
2016/08/29 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
Python入门篇之列表和元组
2014/10/17 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
python安装及变量名介绍详解
2020/12/12 Python
animation和transition的区别
2020/10/12 HTML / CSS
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
我的中国梦演讲稿500字
2014/08/19 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
python实现Nao机器人的单目测距
2021/09/04 Python