程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

ImageAI (一) 使用Python快速簡單實現圖像內容預測 Image Prediction

編輯:Python

簡介
ImageAI是一個python的庫,它能使開發人員用簡單幾行代碼構建具有深度學習和計算機視覺功能的應用程序和系統。它是由Moses Olafenwa和John Olafenwa兩位開發並維護。
具體git地址:https://github.com/OlafenwaMoses/ImageAI
今天首先介紹一下使用imageai的准備工作,安裝以及簡單的實現image prediction
(以下內容git中都有詳細介紹)


准備工作

首先當然是python,imageai暫時只支持3.5.1或之後的版本,一般都是用3.6吧
還有以下這些:
Tensorflow>=1.4.0
Numpy >=1.13.1
SciPy >=0.19.1
OpenCV
Pillow
Matplotlib
h5py
Keras 2.x

pip3 install xxx


安裝
做好准備工作後就是安裝了,可以直接使用pip3安裝 如下

pip3 install https://github.com/OlafenwaMoses/ImageAI/releases/download/2.1.0/imageai-2.1.0-py3-none-any.whl

當然也可以將[imageai-2.1.0-py3-none-any.whl](https://github.com/OlafenwaMoses/ImageAI/releases/download/2.1.0/imageai-2.1.0-py3-none-any.whl)下載之後安裝 ``` pip3 install C:\User\MyUser\Downloads\imageai-2.1.0-py3-none-any.whl ```

Image Prediction
安裝完之後進入正題,圖像內容的預測。
ImageAI提供4種不同的算法和模型來進行圖像預測,並在ImageNet-1000數據集上進行了訓練。4種算法包括SqueezeNet,ResNet,InceptionV3和DenseNet。
這裡也提供了四種模型訓練好後的文件。

  • SqueezeNet(預測速度最快 正確率中等)
  • ResNet50 (預測速度快 正確率較高)
  • InceptionV3(預測速度慢 正確率高)
  • DenseNet121(預測速度更慢 正確率最高)

好了,選一個模型,將訓練好後的內容下載下來就可以開始簡單的圖像預測啦!

prediction.py

from imageai.Prediction import ImagePrediction
import os
import time
#計時
start = time.time()
#當前路徑 包含需要預測的圖片,模型文件
execution_path = os.getcwd()
#創建預測類
prediction = ImagePrediction()
#設置預測模型 有以下四種
#SqueezeNet
#prediction.setModelTypeAsSqueezeNet()
#prediction.setModelPath(os.path.join(execution_path, "squeezenet_weights_tf_dim_ordering_tf_kernels.h5"))
#ResNet50
#prediction.setModelTypeAsInceptionV3()
#prediction.setModelPath(os.path.join(execution_path, "inception_v3_weights_tf_dim_ordering_tf_kernels.h5"))
#InceptionV3
#prediction.setModelTypeAsResNet()
#prediction.setModelPath(os.path.join(execution_path, "resnet50_weights_tf_dim_ordering_tf_kernels.h5"))
#DenseNet121
prediction.setModelTypeAsDenseNet()
prediction.setModelPath(os.path.join(execution_path, "DenseNet-BC-121-32.h5"))
prediction.loadModel()
#預測圖片,以及結果預測輸出數目
predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "1.jpg"), result_count=5 )
#結束計時
end = time.time()
#輸出結果
for eachPrediction, eachProbability in zip(predictions, probabilities):
print(eachPrediction," : ", eachProbability)
print ("\ncost time:",end-start)

看著代碼去掉注釋 只用了大概十行作用就可以完成圖像的預測了

先使用了git上提供的圖片

我用四種模型都跑了一下 結果如下

---squeezenet_weights_tf_dim_ordering_tf_kernels.h5---
sports_car : 45.9977924823761
convertible : 38.13416361808777
grille : 7.812434434890747
minivan : 2.406269498169422
pickup : 2.211885526776314
cost time: 6.432089567184448
---inception_v3_weights_tf_dim_ordering_tf_kernels.h5---
convertible : 96.45639061927795
sports_car : 3.52620966732502
beach_wagon : 0.010831362305907533
car_wheel : 0.003940704118576832
pickup : 0.0006548482815560419
cost time: 15.786875247955322
---resnet50_weights_tf_dim_ordering_tf_kernels.h5---
convertible : 52.459555864334106
sports_car : 37.61284649372101
pickup : 3.1751200556755066
car_wheel : 1.817505806684494
minivan : 1.7487050965428352
cost time: 24.41988778114319
---DenseNet-BC-121-32.h5---
sports_car : 64.85629677772522
convertible : 13.065926730632782
beach_wagon : 8.915219455957413
car_wheel : 6.854388862848282
grille : 2.4432314559817314
cost time: 24.5520977973938

大概率都預測出了是跑車或是敞篷車。

我也隨便挑了張照片 試了一試

結果

Siberian_husky : 87.60582208633423 西伯利亞雪橇犬(二哈)
Eskimo_dog : 12.393762916326523 愛斯基摩犬
malamute : 0.00020242005120962858 阿拉斯加雪橇犬
dogsled : 0.00015880526689215912
Norwegian_elkhound : 6.489584336577536e-06
cost time: 20.758772611618042

結果還是不錯的 ヽ( ̄▽ ̄)ノ

除此之外,git上還介紹了多張圖的預測,預測速度的改變,多線程操作等。這裡就不解釋了,改動並不是很大。
今天暫時就到這兒吧,imageai還有圖片物體檢測/分隔,視頻中物體檢測和跟蹤等等以後再繼續介紹啦

代碼以及模型文件我都放在了網盤上,有需要可以自行下載
鏈接: https://pan.baidu.com/s/13hUoa_0d3tla5d2pTfD1OA 提取碼: qne5

後續:
ImageAI (二) 使用Python快速簡單實現物體檢測 Object Detection
ImageAI (三) 使用Python快速簡單實現視頻中物體檢測 Video Object Detection and Tracking


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved