设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间23 现在时间23 缓存数据 别怀疑自己,别改变自己。别在意别人怎么想,大胆去追求自己想要的。

别怀疑自己,别改变自己。别在意别人怎么想,大胆去追求自己想要的。

查看: 918|回复: 0

Python基于ImageAI实现图像识别详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:197
  • 打卡月天数:0
  • 打卡总奖励:3636
  • 最近打卡:2023-08-27 07:16:33
等级头衔

等級:晓枫资讯-上等兵

在线时间
33 小时

积分成就
威望
0
贡献
297
主题
390
精华
0
金钱
4830
积分
707
注册时间
2022-12-26
最后登录
2023-8-27

发表于 2023-2-2 13:21:39 | 显示全部楼层 |阅读模式
背景简介

ImageAI是一个面向计算机视觉编程的Python库,支持最先进的机器学习算法。主要图像预测,物体检测,视频对象检测与跟踪等多个应用领域。利用ImageAI,开发人员可用很少的代码构建出具有包含深度学习和计算机视觉功能的应用系统。

ImageAI目前支持在ImageNet数据集上对多种不同机器算法进行图像预测和训练,ImageNet数据集项目始于2006年,它是一项持续的研究工作,旨在为世界各地的研究人员提供易于访问的图像数据库。


图像预测
算法引入

图像预测(Image Prediction)是指利用由各种不同算法构建而成的预测器对输入图像或视频帧进行分析解构,并返回其中所包含的物体对象名及其相应的百分比概率(Percentage Probabilities)的过程。

ImageAI提供了4种不同算法模型进行图像预测,并在ImageNet数据集上进行了训练。4种算法模型分别如下:

(1)由F.N.Iandola团队提出了SqueezeNet(预测速度最快,正确率中等)。

(2)由Microsoft公司提供的ResNet50(预测速度快,正确率较高)。

(3)由Google公司提供的InceptionV3(预测速度较慢,正确率高)。

(4)由Facebook公司提供的DenseNet121(预测速度最慢,正确率最高)。

ImageAI可对一幅图像或者多幅图像进行预测。下面我们将分别用两个简单的示例来进行解释和演示。

单图像预测

单图像预测主要是用到ImageAI中imagePrediction类中的predictImage()方法,其主要过程如下:

(1)定义一个imagePrediction()的实例。

(2)通过setMoTypeAsResNet()设置模型类型以及通过setModePath()设置模型路径。

(3) 调用loadModel()函数模型载入模型。

(4) 利用predictImage()函数进行预测。该函数有两个参数,一个参数用于指定要进行预测的文件,另一个参数result_count则用于设置我们想要预测结果的数量(该参数的值1~100可选)。函数将返回预测的对象名及其相应的百分比概率。

在以下示例中,我们将预测对象模型类型设置为ResNet,当然,我们也可以用其他的上几篇的算法进行图像预测。基于ImageAI的单图像预测的示例代码:

  1. from imageai.Prediction import ImagePrediction
  2. import os
  3. import time
  4. #开始计时
  5. start_time=time.time()
  6. execution_path=os.getcwd()
  7. #对ImagePrediction类进行实例化
  8. prediction=ImagePrediction()
  9. #设置算法模型类型
  10. prediction.setModelTypeAsResNet()
  11. prediction.setModelPath(os.path.join(execution_path,'resent50_weights_tf_dim_ordering_tf_kernels.h5'))
  12. prediction.loadModel()
  13. predictions,probabilities=prediction.predictioImage(os.path.join(execution_path,'sample.jpg'),result_count=5)
  14. end_time=time.time()
  15. for eachPrediction,eachProbability in zip(predictions,probabilities):
  16.     print(eachPrediction+":"+str(eachProbability))
  17. print('Total time cost:',end_time-start_time)
复制代码

多图像检测

对于多图像检测,我们可以通过多次调用predictImage()函数的方式来进行。而更简单的方法时一次性调用predicMultipleImages()。其主要工作流程为:

(1)定义一个ImagePrediction()的实例。

(2)通过setModelTypeAsResNet()设置模型类型以及通过setModelPath()设置模型路径。

(3)调用loadModel()函数载入模型。

(4)创建一个数组并将所有要预测的图像的路径添加到数组。

(5)通过调用predictMultiple Images()函数解析包含图像路径的数组并执行图像预测,通过分析result_count_per_image(默认值为2)的值来设定每个图像需要预测多少种可能。

  1. #多图像预测
  2. from image.Prediction import ImagePrediction
  3. import os
  4. execution_path=os.getcwd()
  5. #初始化预测器
  6. multiple_prediction=ImagePrediction()
  7. multiple_prediction.setModelTypeAsResNet()
  8. #设置模型文件路径
  9. multiple_prediction.setModelPath(os.path.join(execution_path,'resent50_weights_tf_ordering_tf_kernels.h5'))
  10. #加载模型
  11. multiple_prediction.loadModel()
  12. all_images_array=[]
  13. all_files=os.listdir(execution_path)
  14. for each_file in all_files:
  15.     if(each_file.endswith('.jpg') or each_file.endswith('.png')):
  16.         all_images_array.append(each_file)
  17. results_array=multiple_prediction.predictMultipleImages(all_images_array,result_count_per_image=3)
  18. for each_result in results_array:
  19.     predictions,percentage_probanlities=each_result['predictions'],each_result['percentage_probabilities']
  20.     for index in range(len(predictions)):
  21.         print(predictions[index]+':'+str(percentage_probanlities[index]))
  22. print('-----------')
复制代码
目标检测

ImageAI提供了非常方便和强大的方法来对图像执行对象检测并从中提取每个识别出的对象。


图像目标检测

基于ImageAI的图像目标检测主要是用到了ObjectDetection类中的detectObjectFromImage()方法。

示例代码:

  1. #目标检测
  2. from imageai.Detection import ObjectDetection
  3. import os
  4. import time
  5. start_time=time.time()
  6. #execution_path=os.getcwd()#获取当前目录
  7. detector=ObjectDetection() #实例化一个ObjectDetection类
  8. detector.setModelTypeAsRetinaNet() #设置算法模型类型为RetinaNet
  9. #etector.setModelPath()
  10. detector.loadModel() #加载模型
  11. #图像目标检测,百分比概率阈值设置为30可检测出更多的物体(默认值为30)
  12. detections=detector.detectObjectsFromImage(input_image="D:\Image\\four.jpg",output_image_path='D:\Image\\fourr.jpg',minimum_percentage_probability=30)
  13. end_time=time.time()
  14. for eachObject in detections:
  15.     print(eachObject['name'],":",eachObject['percentage_probability'],":",eachObject['box_points'])
  16. print('Total Time cost:',end_time-start_time)
复制代码
视频目标检测

视频目标检测应用范围非常广泛,包括动态目标跟踪,自动无人体步态识别等各种场景,由于视频中包含大量的时间和空间冗余信息,对视频中的目标检测是非常消耗硬件资源的,所以博主建议使用安装了GPU硬件和CPU版的tensorflow深度学习框架的硬件设备来执行相关任务,而在CPU设备上进行视频目标检测会很慢。

视频目标检测需要用到ImageAI中VideoObjectDetection类的detectObjectsFromVideo()方法。

示例代码如下:

  1. #视频目标检测
  2. from imageai.Detection import VideoObjectDetection
  3. import os
  4. import time
  5. start_time=time.time()
  6. detector=VideoObjectDetection() #初始化视频检测类
  7. detector.setModelTypeAsRetinaNet()
  8. #detector.setModelPath('D:\Image:\haha.mp4')
  9. detector.loadModel() #加载模型
  10. video_path=detector.detectObjectsFromVideo(input_file_path='D:\Image\haha.mp4',output_file_path='D:Image:\hahaha.mp4',frames_per_second=20,log_progress=True)
  11. print(video_path)
  12. end_time=time.time()
  13. print('Total time cost:',end_time-start_time)
复制代码

以上就是Python基于ImageAI实现图像识别详解的详细内容,


晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表