0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

教你用10行代码搞定图像中目标检测

新机器视觉 来源:Python专栏 作者:Moses Olafenwa 2021-03-12 11:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目标检测是指计算机和软件系统对图像或场景中的目标进行定位和识别的任务。目标检测已广泛应用于人脸检测、车辆检测、人流量统计、网络图像、安防系统和无人驾驶等多个领域。

早期目标检测的实现基于经典算法,比如流行的计算机视觉库OpenCV中支持的算法。然而,这些经典算法在不同的条件下无法获得稳定的性能。

2012年深度学习的突破性进展和迅速普及,使得R-CNN、Fast-RCNN、Faster-RCNN、RetinaNet以及快速、高度准确的SSD、YOLO等目标检测算法应运而生。这些基于深度学习、机器学习的算法,需要一定的数学以及深度学习框架基础。有数百万的专业计算机程序员和软件开发人员想要集成和创建基于目标检测算法的新产品。同时由于理解和实际使用较为复杂,一直无法实现。如何开发出高效的目标检测代码呢?

ImageAI就应运而生了。

01 ImageAI让代码变得简洁 ImageAI是一个python库,只需要几行代码,就可以让程序员和软件开发人员轻松地将最先进的计算机视觉技术集成到他们现有的或新的应用中,ImageAI已经在Github上开源。 Github地址:

https://github.com/OlafenwaMoses/ImageAI

ImageAI目前支持使用在ImageNet-1000数据集上训练的4种不同机器学习算法进行图像预测和训练。 ImageAI还支持使用在COCO数据集上训练的RetinaNet,YOLOv3和TinyYOLOv3进行对象检测,视频检测和对象跟踪。最后,ImageAI允许训练自定义模型,以执行新目标的检测和识别。 ImageAI库有依赖其他Python库,所以在使用ImageAI开发之前还需要导入其他的包。

02 准备工作 使用ImageAI实现目标检测,只需进行以下4步:

在你的电脑上安装Python

安装ImageAI,配置依赖环境

下载目标检测模块文件

运行样例代码(只需10行)

下面一步步详细展开:

(1)从Python官网下载并安装Python3 链接地址: https://python.org

(2)用pip命令安装以下依赖包:

pipinstalltensorflowpipinstallnumpypipinstallscipypipinstallopencv-pythonpipinstallpillowpipinstallmatplotlibpipinstallh5pypipinstallkeraspip3 install imageai --upgrade 注意:第一次安装ImageAI库,需要下载对应版本的.whl文件,Python3的环境需要下载imageai-2.0.2-py3-none-any.whl 文件,然后转移到相应的文件夹下,执行如下命令即可安装:

pip install imageai-2.0.2-py3-none-any.whl .whl文件链接地址:https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.2/imageai-2.0.2-py3-none-any.whl

(3)下载用于目标检测的RetinaNet模型文件 链接地址:https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

03 开启10行代码的目标检测 到这里你已经安装好了所有的依赖项,可以开始编写你的第一个目标检测的代码了。 创建一个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")) foreachObject in detections: print(eachObject["name"] ," : ", eachObject["percentage_probability"] )

然后运行代码,等待结果输出。结果显示后,就可以在FirstDetection.py所在的文件夹下找到保存下来的新图像。

在Spyder编译器中运行结果如下所示:


输出的目标检测精度结果: person : 57.20391869544983 person : 52.57977843284607 person : 70.81094980239868 person : 76.99859142303467 person : 79.40077781677246 bicycle : 81.0384213924408 person : 83.66722464561462 person : 89.41188454627991 truck : 60.61040759086609 person : 69.65749859809875 bus : 97.92424440383911 truck : 83.94358158111572 car : 72.50492572784424 在Spyder编译器中运行结果如下所示:

输出的目标检测精度结果: person : 62.45866417884827 person : 58.67737531661987 person : 69.44932341575623 person : 71.84218168258667 person : 59.53381657600403 person : 54.65759038925171 motorcycle : 65.84504842758179 bus : 99.40318465232849 car : 72.41445779800415 person : 58.32530856132507 person : 54.449981451034546 person : 80.11815547943115 person : 74.30745959281921 person : 77.78302431106567 person : 71.15439772605896 bicycle : 69.92427110671997 person : 66.17957353591919 bicycle : 90.50283432006836 motorcycle : 94.09030675888062

04 代码解读

下面来解释一下这10行代码的工作原理

fromimageai.Detection importObjectDetectionimport osexecution_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模型的路径;在第四行中将模型加载到目标检测类的实例中;在第五行中调用检测函数,并将文件输入输出路径作为参数传入。 foreachObject in detections: print(eachObject["name"] ," : ", eachObject["percentage_probability"] )

在以上两行代码中,第一行用来对detector.detectObjectsFromImage函数返回的所有结果进行迭代,第二行用来输出图片中检测到的每个目标的名字及其概率。 05 自定义目标检测

除此外,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) 将其应用到第一张图片上,得到如下结果: 所有行人都被很好地提取了出来,为了节约空间这里只显示了一部分。 06 ImageAI的其他功能

ImageAI提供了许多功能,可用于目标检测任务的自定义和部署。其支持的功能包括:

调整最小概率:默认情况下,概率小于50%的物体不会显示。对于需要高精度的情况,可以增加此值;对于需要检测所有可能对象的情况,可以减少此值。

自定义目标检测:通过提供的CustomObject类,可以使检测类检测一个或几个特定目标。

检测速度:通过将检测速度设置为“fast”、“faster”或“fastest”,可以减少检测图像所需的时间。

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

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

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    89

    文章

    38156

    浏览量

    296828
  • Image
    +关注

    关注

    0

    文章

    33

    浏览量

    12329

原文标题:用这个Python库,10行代码搞定图像中目标检测

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电压放大器在全导波场图像目标识别的损伤检测实验的应用

    图像目标识别的智能损伤检测方法,通过结合超声导波检测技术与深度学习算法,系统探究了损伤引起的波场畸变特性及其识别机制。 测试设备:扫描激光多普勒测振仪、函数发生器、功率放大器ATA-2
    的头像 发表于 12-02 11:37 79次阅读
    电压放大器在全导波场<b class='flag-5'>图像</b><b class='flag-5'>目标</b>识别的损伤<b class='flag-5'>检测</b>实验的应用

    扔掉手机APP吧!教你用乐鑫科技ESP32-S3 2.8寸彩屏爆改专业遥控器!启明云端乐鑫代理

    !不专业的工具就应该淘汰!本期我们教你用启明云端ESP32-S32.8寸串口屏爆改遥控器。仅需69.9元就可以亲手打造一个专属硬核彩屏遥控器,成就感拉满!ESP3
    的头像 发表于 11-24 18:05 150次阅读
    扔掉手机APP吧!<b class='flag-5'>教你用</b>乐鑫科技ESP32-S3 2.8寸彩屏爆改专业遥控器!启明云端乐鑫代理

    低成本开源!手把手教你用乐鑫科技ESP32-P4开发板制作电脑监测屏!

    你是否也遇到过这些困扰:电脑突然变得异常卡顿,程序无响应?想知道电脑状态,却懒得每次都打开任务管理器?想要实时监控系统性能,又没有合适的工具?别担心!今天我们教你一个简单又低成本的方法——
    的头像 发表于 11-04 18:05 276次阅读
    低成本开源!手把手<b class='flag-5'>教你用</b>乐鑫科技ESP32-P4开发板制作电脑监测屏!

    目标追踪的简易实现:模板匹配

    (TemplateMatching)是在图像寻找目标的方法之一。原理很简单,就是把待追踪的目标图像存于一个模板,然后在视频的每一帧
    发表于 10-28 07:21

    基于FPGA的肤色检测方案简介

    肤色检测原理 在RGB图像,肤色对光照强度的敏感度很高,因此RGB下的肤色没有明显的特异性。而在YCbCr图像,去除光照强度Y的影响,
    发表于 10-28 07:07

    Python 给 Amazon 做“全身 CT”——可量产、可扩展的商品详情爬虫实战

      目标字段 & CSS 选择器   四、MVP:120 代码即可跑通 单文件脚本,支持异步并发 10 个 ASIN,自动重
    的头像 发表于 10-21 16:59 387次阅读
    <b class='flag-5'>用</b> Python 给 Amazon 做“全身 CT”——可量产、可扩展的商品详情爬虫实战

    汽车软件团队必看:基于静态代码分析工具Perforce QAC的ISO 26262合规实践

    ISO 26262合规指南,从ASIL分级到工具落地,手把手教你用静态代码分析(Perforce QAC)实现高效合规。
    的头像 发表于 08-07 17:33 872次阅读
    汽车软件团队必看:基于静态<b class='flag-5'>代码</b>分析工具Perforce QAC的ISO 26262合规实践

    Ansible Playbook自动化部署Nginx集群指南

    面对日益猖獗的DDoS攻击,手动部署防护已经out了!今天教你用Ansible一键部署具备DDoS防御能力的Nginx集群,让攻击者哭着回家!
    的头像 发表于 08-06 17:54 646次阅读

    YOLOv8水果检测示例代码换成640输入图像出现目标框绘制错误的原因 ?

    \",的best.kmodel替换为640输入图像,model_input_size=[640,640],就会出现目标检测目标框位置混乱
    发表于 06-18 06:37

    基于LockAI视觉识别模块:C++目标检测

    检测是计算机视觉领域中的一个关键任务,它不仅需要识别图像存在哪些对象,还需要定位这些对象的位置。具体来说,目标检测算法会输出每个
    发表于 06-06 14:43

    手把手教你用RadiMation进行MIMO功率测量,轻松搞定射频测试!

    MIMO设备功率测量太复杂?TS-RadiMation帮你一键搞定!本文详细解析MIMO功率测量全流程,从配置到数据分析,助你快速掌握关键测试技巧,提升测试效率!
    的头像 发表于 05-26 17:42 547次阅读
    手把手<b class='flag-5'>教你用</b>RadiMation进行MIMO功率测量,轻松<b class='flag-5'>搞定</b>射频测试!

    请求赠阅《零基础开发AI Agent——手把手教你用扣子做智能体》

    博主好!致敬叶涛 管锴 张心雨三位AI具身智能-智能体方面的专家、导师! 《零基础开发AI Agent——手把手教你用扣子做智能体》一不懂编程的多数大众也可以开发Agent,这意义深远,功德无量
    发表于 04-10 12:16

    《零基础开发AI Agent——手把手教你用扣子做智能体》

    《零基础开发AI Agent——手把手教你用扣子做智能体》是一本为普通人量身打造的AI开发指南。它不仅深入浅出地讲解了Agent的概念和发展,还通过详细的工具介绍和实战案例,帮助读者快速掌握
    发表于 03-18 12:03

    AI模型部署边缘设备的奇妙之旅:目标检测模型

    分类任务是识别图像主体内容的是什么?的问题,那么目标检测则是进一步解答在哪里? 目标检测不仅需
    发表于 12-19 14:33

    卡尔曼滤波在图像处理的应用实例 如何调优卡尔曼滤波参数

    卡尔曼滤波在图像处理的应用实例 卡尔曼滤波在图像处理主要应用于目标跟踪、噪声消除和图像恢复等
    的头像 发表于 12-16 09:11 2551次阅读