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局域网ip扫描示例分享
Apr 03 Python
pymssql数据库操作MSSQL2005实例分析
May 25 Python
利用python将xml文件解析成html文件的实现方法
Dec 22 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
python实现将excel文件转化成CSV格式
Mar 22 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
Jun 09 Python
python创建文件备份的脚本
Sep 11 Python
Python中分支语句与循环语句实例详解
Sep 13 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
python实现横向拼接图片
Mar 23 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 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/10/21 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
js 窗口抖动示例
2013/09/04 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
canvas知识总结
2017/01/25 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
js微信分享实现代码
2020/10/11 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
Python读取yaml文件的详细教程
2020/07/21 Python
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
给老师的道歉信
2014/01/11 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
Java 写一个简单的图书管理系统
2022/04/26 Java/Android
Android中的Launch Mode详情
2022/06/05 Java/Android