Python基于ImageAI实现图像识别详解
作者:心随而动 发布时间:2023-06-11 14:04:49
背景简介
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的单图像预测的示例代码:
from imageai.Prediction import ImagePrediction
import os
import time
#开始计时
start_time=time.time()
execution_path=os.getcwd()
#对ImagePrediction类进行实例化
prediction=ImagePrediction()
#设置算法模型类型
prediction.setModelTypeAsResNet()
prediction.setModelPath(os.path.join(execution_path,'resent50_weights_tf_dim_ordering_tf_kernels.h5'))
prediction.loadModel()
predictions,probabilities=prediction.predictioImage(os.path.join(execution_path,'sample.jpg'),result_count=5)
end_time=time.time()
for eachPrediction,eachProbability in zip(predictions,probabilities):
print(eachPrediction+":"+str(eachProbability))
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)的值来设定每个图像需要预测多少种可能。
#多图像预测
from image.Prediction import ImagePrediction
import os
execution_path=os.getcwd()
#初始化预测器
multiple_prediction=ImagePrediction()
multiple_prediction.setModelTypeAsResNet()
#设置模型文件路径
multiple_prediction.setModelPath(os.path.join(execution_path,'resent50_weights_tf_ordering_tf_kernels.h5'))
#加载模型
multiple_prediction.loadModel()
all_images_array=[]
all_files=os.listdir(execution_path)
for each_file in all_files:
if(each_file.endswith('.jpg') or each_file.endswith('.png')):
all_images_array.append(each_file)
results_array=multiple_prediction.predictMultipleImages(all_images_array,result_count_per_image=3)
for each_result in results_array:
predictions,percentage_probanlities=each_result['predictions'],each_result['percentage_probabilities']
for index in range(len(predictions)):
print(predictions[index]+':'+str(percentage_probanlities[index]))
print('-----------')
目标检测
ImageAI提供了非常方便和强大的方法来对图像执行对象检测并从中提取每个识别出的对象。
图像目标检测
基于ImageAI的图像目标检测主要是用到了ObjectDetection类中的detectObjectFromImage()方法。
示例代码:
#目标检测
from imageai.Detection import ObjectDetection
import os
import time
start_time=time.time()
#execution_path=os.getcwd()#获取当前目录
detector=ObjectDetection() #实例化一个ObjectDetection类
detector.setModelTypeAsRetinaNet() #设置算法模型类型为RetinaNet
#etector.setModelPath()
detector.loadModel() #加载模型
#图像目标检测,百分比概率阈值设置为30可检测出更多的物体(默认值为30)
detections=detector.detectObjectsFromImage(input_image="D:\Image\\four.jpg",output_image_path='D:\Image\\fourr.jpg',minimum_percentage_probability=30)
end_time=time.time()
for eachObject in detections:
print(eachObject['name'],":",eachObject['percentage_probability'],":",eachObject['box_points'])
print('Total Time cost:',end_time-start_time)
视频目标检测
视频目标检测应用范围非常广泛,包括动态目标跟踪,自动无人体步态识别等各种场景,由于视频中包含大量的时间和空间冗余信息,对视频中的目标检测是非常消耗硬件资源的,所以博主建议使用安装了GPU硬件和CPU版的tensorflow深度学习框架的硬件设备来执行相关任务,而在CPU设备上进行视频目标检测会很慢。
视频目标检测需要用到ImageAI中VideoObjectDetection类的detectObjectsFromVideo()方法。
示例代码如下:
#视频目标检测
from imageai.Detection import VideoObjectDetection
import os
import time
start_time=time.time()
detector=VideoObjectDetection() #初始化视频检测类
detector.setModelTypeAsRetinaNet()
#detector.setModelPath('D:\Image:\haha.mp4')
detector.loadModel() #加载模型
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)
print(video_path)
end_time=time.time()
print('Total time cost:',end_time-start_time)
来源:https://blog.csdn.net/qq_59931372/article/details/128759728
猜你喜欢
- 本文实例讲述了Python双链表原理与实现方法。分享给大家供大家参考,具体如下:Python实现双链表文章目录Python实现双链表定义链表
- 1.官网下载Pycharm community版如pycharm-community-2017.3.1.tar.gz。2. #解压tar.g
- 下面的例子简单的演示了DOM对XML的操作,详细解释请看代码中的注释 <? /****************************
- win7 pycharm设置界面全黑色方法:1.设置默认PyCharm解析器: 操作如下:Python–>Preferences–&g
- 网站设计时,有一个最常用的指导性原则:页面长度原则上不超过3屏,宽度不超过1屏。这个原则明显是从用户的体验出发,特别是宽度不超过一屏,其最基
- 在 Class 块中,成员通过相应的声明语句被声明为 Private(私有成员,只能在类内部调用)
- 本文实例讲述了Python常见字符串操作函数。分享给大家供大家参考,具体如下:str.split(' ')1.按某一个字符分
- 简介观察者模式是行为型模式的一种,定义了对象间一对多的关系。当对象的状态发生变化时候,依赖于它的对象会得到通知。适用场景类似触发钩子事件,可
- 在执行python 代码的时候,有时候需要传递外面的参数进行处理这个该怎么实现呢?需要一个模块from sys import argv当然也
- 目录Python1 Python垃圾回收机制是什么2 元组和列表的区别3 元组可以作为字典的key?4 进程 线程 协程4.1 进程4.2
- 先看一个需求from collections import defaultdict"""需求: 统计user_
- 基于ASP技术开发Internet/Intranet上的MIS系统是非常方便的,首先是它借用了ADO技术和概念,同时
- 进程什么是进程进程指的是一个程序的运行过程,或者说一个正在执行的程序所以说进程一种虚拟的概念,该虚拟概念起源操作系统一个CPU 同一时刻只能
- 语法:CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name F
- 最近在写的一个django小项目需要实现用户上传图片的功能,使用到了七牛云存储,特此记录下来。这里我使用的七牛python SDK 版本是7
- 在cssrain整理的一个 试题集 中有这么一道题:<SCRIPT LANGUAGE="JavaScript"&g
- 词云图什么是词云图,相信大家肯定不会感到陌生,一本书统计里面出现的词频,然后可视化展示,让读者快速的了解这个主题纲要,这就是词云的直接效果。
- 昨天美国雅虎正式宣布网站首页的新版,这也算互联网一件大事,尤其是对设计的朋友们。而且现在的美国雅虎的情况也不是很好的情况下有大刀阔斧的进行改
- 功能描述:1)使用tkinter设计程序界面;2)调用Windows API函数实现录音机和音乐播放器。参考代码:运行界面:总结以上所述是小
- 这两个均是 python 的内建函数,通过读取控制台的输入与用户实现交互。但他们的功能不尽相同。举两个小例子。>>> ra