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

目录
  • 背景简介
  • 图像预测
    • 算法引入
  • 目标检测
    • 图像目标检测
    • 视频目标检测

背景简介

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)

以上就是Python基于ImageAI实现图像识别详解的详细内容,更多关于Python ImageAI图像识别的资料请关注我们其它相关文章!

(0)

相关推荐

  • 利用ImageAI库只需几行python代码实现目标检测

    什么是目标检测 目标检测关注图像中特定的物体目标,需要同时解决解决定位(localization) + 识别(Recognition).相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因此检测模型的输出是一个列表,列表的每一项使用一个数组给出检出目标的类别和位置(常用矩形检测框的坐标表示). 通俗的说,Object Detection的目的是在目标图中将目标用一个框框出来,并且识别出这个框中的是啥,而且最好的话是能够将图片的所

  • Python OpenCV机器学习之图像识别详解

    目录 背景 一.人脸识别 二.车牌识别 三.DNN图像分类 背景 OpenCV中也提供了一些机器学习的方法,例如DNN:本篇将简单介绍一下机器学习的一些应用,对比传统和前沿的算法,能从其中看出优劣: 一.人脸识别 主要有以下两种实现方法: 1.哈尔(Haar)级联法:专门解决人脸识别而推出的传统算法: 实现步骤: 创建Haar级联器: 导入图片并将其灰度化: 调用函数接口进行人脸识别: 函数原型: detectMultiScale(img,scaleFactor,minNeighbors) sc

  • Python图像处理之图片文字识别功能(OCR)

    OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR 库,或者是在上面进行定制. Tesseract 是一个OCR 库,目前由Google 赞助(Google 也是一家以OCR 和机器学习技术闻名于世的公司).Tesseract 是目前公认最优秀.最精确的开源OCR 系统. 除 了极高的精确度,Tesseract 也具有很高的灵活性.它可

  • python实现图像识别的示例代码

    一.安装库 首先我们需要安装PIL和pytesseract库. PIL:(Python Imaging Library)是Python平台上的图像处理标准库,功能非常强大. pytesseract:图像识别库. 我这里使用的是python3.6,PIL不支持python3所以使用如下命令 pip install pytesseract pip install pillow 如果是python2,则在命令行执行如下命令: pip install pytesseract pip install PI

  • Python Opencv实现图像轮廓识别功能

    本文实例为大家分享了python opencv识别图像轮廓的具体代码,供大家参考,具体内容如下 要求:用矩形或者圆形框住图片中的云朵(不要求全部框出) 轮廓检测 Opencv-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓. import cv2 img = cv2.imread('cloud.jpg') # 灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化 ret, binary = cv2.th

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

    目录 背景简介 图像预测 算法引入 目标检测 图像目标检测 视频目标检测 背景简介 ImageAI是一个面向计算机视觉编程的Python库,支持最先进的机器学习算法.主要图像预测,物体检测,视频对象检测与跟踪等多个应用领域.利用ImageAI,开发人员可用很少的代码构建出具有包含深度学习和计算机视觉功能的应用系统. ImageAI目前支持在ImageNet数据集上对多种不同机器算法进行图像预测和训练,ImageNet数据集项目始于2006年,它是一项持续的研究工作,旨在为世界各地的研究人员提供易

  • python基于递归解决背包问题详解

    递归是个好东西,任何具有递归性质的问题通过函数递归调用会变得很简单.一个很复杂的问题,几行代码就能搞定. 最简单的递归问题:现有重量为weight的包,有若干重量分别为W1,W2.....Wn的物品,试问能否从物品中选出若干件而且重量刚好为weight? weight具体是怎么构成的,有下面两种情况(假设挑选到Wn时,刚好够weight): 1. 从Wn-1开始就已经够weight,那weight=W1+W2+......+Wn=W1+W2+......+Wn-1. 2.加上Wn后刚好够weig

  • 基于Python代码编辑器的选用(详解)

    Python开发环境配置好了,但发现自带的代码编辑器貌似用着有点不大习惯啊,所以咱们就找一个"好用的"代码编辑器吧,网上搜了一下资料,Python常用的编辑器有如下一些: 1. Sublime Text 2. Vim 3. PyScripter 4. PyCharm 5. Eclipse with PyDev 6. Emacs 7. Komodo Edit 8. Wing 9. The Eric Python IDE 10. Interactive Editor for Python

  • 基于python实现雪花算法过程详解

    这篇文章主要介绍了基于python实现雪花算法过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Snowflake是Twitter提出来的一个算法,其目的是生成一个64bit的整数: 1bit:一般是符号位,不做处理 41bit:用来记录时间戳,这里可以记录69年,如果设置好起始时间比如今年是2018年,那么可以用到2089年,到时候怎么办?要是这个系统能用69年,我相信这个系统早都重构了好多次了. 10bit:10bit用来记录机器ID

  • 基于Python实现简单的定时器详解

    所谓定时器,是指间隔特定时间执行特定任务的机制.几乎所有的编程语言,都有定时器的实现.比如,Java有util.Timer和util.TimerTask,JavaScript有setInterval和setTimeout,可以实现非常复杂的定时任务处理.然而,牛叉到无所不能的Python,却没有一个像样的定时器,实在令人难以理解. 刚入门的同学一定会说:不是有个time.sleep吗?定好闹钟睡大觉,闹钟一响,起来干活,这不就是一个定时器吗?没错,time.sleep具备定时器的基本要素,但若作

  • 基于Python绘制世界疫情地图详解

    世界疫情数据下载请点击>>:疫情数据下载 注:此数据是2022年3月12号的结果,其中透明的地方代表确诊人数小于10万人,白色的地方代表无该国家的数据. 最终效果: 下载需要的python包: pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-countries-china-cities-pypkg import seaborn as sns imp

  • 基于Python实现打哈欠检测详解

    目录 效果图 基本思路 部分源码 效果图 基本思路 在 OpenCV 中使用VideoCapture方法初始化视频渲染对象 创建灰度图像 导入预训练模型,识别脸部和人脸标志 计算上唇和下唇距离(其它类似) 创建唇边距离的If条件,满足则是打哈欠,不满足则只是简单的张嘴 显示帧/图像 部分源码 suc, frame = cam.read() # 读取不到退出 if not suc: break # ---------FPS------------# ctime = time.time() fps

  • 基于hashlib模块--加密(详解)

    用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import hashlib m = hashlib.md5() m.update(b"hello") print(m.hexdigest()) m.update(b"It's me") print(m.hexdigest()) m.update(b"It's been a long time sin

  • Python实现的rsa加密算法详解

    本文实例讲述了Python实现的rsa加密算法.分享给大家供大家参考,具体如下: 算法过程 1. 随意选择两个大的质数p和q,p不等于q,计算N=pq. 2. 根据欧拉函数,不大于N且与N互质的整数個数為(p-1)(q-1). 3. 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1). 4. 用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1)). 5. 将p和q的记录销毁. (N,e)是公钥,(N,d)是私钥. python代码 # -*- coding

随机推荐