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服务器拒绝服务攻击代码
Jan 16 Python
Python常用列表数据结构小结
Aug 06 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
python模块导入的细节详解
Dec 10 Python
Python删除n行后的其他行方法
Jan 28 Python
python3使用QQ邮箱发送邮件
May 20 Python
django配置连接数据库及原生sql语句的使用方法
Mar 03 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
python读取ini配置的类封装代码实例
Jan 08 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
python numpy中multiply与*及matul 的区别说明
May 26 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中的日期处理方法集锦
2007/01/02 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
2020/03/03 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
Python中join函数简单代码示例
2018/01/09 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
Python any()函数的使用方法
2019/10/28 Python
python实现人机猜拳小游戏
2020/02/03 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
中医药大学市场营销专业自荐信
2013/09/29 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
师德师风培训感言
2015/08/03 职场文书
Redis高可用集群redis-cluster详解
2022/03/20 Redis