ImageAI(1)——10行Python即可实现深度学习的识别和检测任务
这里写目录标题
- 1、什么是ImageAI
- 2、ImageAI安装
- 3、图像识别——Image Prediction
- 4、目标检测——Object Detection
- 5、实时检测——VideoObjectDetection
- 6、总结
1、什么是ImageAI
ImageAI的设计秉承简单性,它支持一系列最新的机器学习算法,用于图像预测,自定义图像预测,目标检测,视频目标检测,视频目标跟踪和图像预测训练。
ImageAI当前使用在ImageNet-1000数据集上训练的4种不同的机器学习算法( SqueezeNet, ResNet, InceptionV3 and DenseNet)来支持图像识别预测和训练。
ImageAI还使用在COCO数据集上训练的RetinaNet,YOLOv3和TinyYOLOv3支持目标检测,视频目标检测和目标跟踪。最后,ImageAI允许训练自定义模型以执行新对象的检测和识别。
最终,ImageAI将为计算机视觉的更广泛,更专业的方面提供支持,包括但不限于在特殊环境和特定领域中的图像识别。
2、ImageAI安装
安装ImageAI首先要有相关的依赖库:
Python 3.5.1 (或之后的版本)
Tensorflow 1.4.0 (或之后的版本)
OpenCV
Keras 2.x
安装完依赖库之后就可以安装ImageAI了。打开终端,执行下面语句即可:
pip3 install imageai --upgrade
目前ImageAI的最新版本为2.1.5
3、图像识别——Image Prediction
Image Prediction可以实现识别任务。用于图像预测的4种算法包括SqueezeNet,ResNet,InceptionV3和DenseNet。这些算法中的每一个都有各自的模型文件,本次演示使用的是SqueezeNet模型文件。
直接上代码:
from imageai.Prediction import ImagePrediction
import os# 当前路径 包含需要预测的图片,模型文件
execution_path = os.getcwd()# 创建预测类
prediction = ImagePrediction()# 设置预测模型 有以下四种:setModelTypeAsInceptionV3()、setModelTypeAsResNet()、setModelTypeAsDenseNet()、setModelTypeAsSqueezeNet()
# SqueezeNet
prediction.setModelTypeAsSqueezeNet()
prediction.setModelPath(os.path.join(execution_path, "squeezenet_weights_tf_dim_ordering_tf_kernels.h5"))prediction.loadModel(prediction_speed="fast")# 预测图片,以及结果预测输出数目
predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "01.jpg"), result_count=5)# 输出结果
for eachPrediction, eachProbability in zip(predictions, probabilities):print(eachPrediction, " : ", eachProbability)
输入图片为
输出结果为置信度最高的前五名
现在,ImageAI支持3种输入类型,它们是图像文件的文件路径(默认),图像的numpy数组和图像文件流。要使用numpy数组或文件流输入执行图像预测,只需在.predictImage()函数(预测单张图片)或.predictMultipleImages()函数(预测多张图片,输入为列表)中声明输入类型
predictions, probabilities = prediction.predictImage(image_array, result_count=5 , input_type="array" ) # For numpy array input type
predictions, probabilities = prediction.predictImage(image_stream, result_count=5 , input_type="stream" ) # For file stream input type
4、目标检测——Object Detection
ImageAI提供了非常方便且功能强大的方法来对图像执行对象检测并从图像中提取每个对象。对象检测类支持RetinaNet,YOLOv3和TinyYOLOv3。
下面是利用RetinaNet来进行目标检测:
from imageai.Detection import ObjectDetection
import os
# 当前路径 包含需要预测的图片,模型文件
execution_path = os.getcwd()
# 创建检测类
detector = ObjectDetection()
# 设置检测模型 有以下三种:setModelTypeAsYOLOv3,setModelTypeAsRetinaNet,setModelTypeAsTinyYOLOv3
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 , "02.jpg"), output_image_path=os.path.join(execution_path , "image2new.jpg"), minimum_percentage_probability=30)for eachObject in detections:print(eachObject["name"] , " : ", eachObject["percentage_probability"], " : ", eachObject["box_points"] )
输入图片:
输出结果为:
TinyYOLOv3来进行目标检测
detector = ObjectDetection()
detector.setModelTypeAsTinyYOLOv3()
detector.setModelPath( os.path.join(execution_path , "yolo-tiny.h5"))
detector.loadModel()
YOLOv3来进行目标检测
detector = ObjectDetection()
detector.setModelTypeAsYOLOv3()
detector.setModelPath( os.path.join(execution_path , "yolo.h5"))
detector.loadModel()
5、实时检测——VideoObjectDetection
ImageAI现在支持摄像机输入,支持实时视频检测。使用OpenCV中的VideoCapture()功能,你可以从设备加载摄像头实时视频流ImageAI的detectObjectsFromVideo()和detectCustomObjectsFromVideo()功能。支持检测视频文件中对象的所有功能也可用于检测摄像机的实时视频源中的对象。
from imageai.Detection import VideoObjectDetection
import os
import cv2execution_path = os.getcwd()camera = cv2.VideoCapture(0)detector = VideoObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath(os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()video_path = detector.detectObjectsFromVideo(camera_input=camera,output_file_path=os.path.join(execution_path, "camera_detected_video"),frames_per_second=20, log_progress=True, minimum_percentage_probability=40)
6、总结
(1)ImageAI可以实现的任务可以分为三大类:图像识别、目标检测、视频检测目标跟踪
RetinaNet,YOLOv3和TinyYOLOv3支持目标检测,视频目标检测和目标跟踪。 SqueezeNet, ResNet, InceptionV3 and DenseNet来支持图像识别预测和训练。
(2)ImagePrediction、ObjectDetection、VideoObjectDetection三个类分别对应可实现的三大任务:图像预测、目标检测、视频检测。
2.1–ImagePrediction类下的两个重要函数:
ImagePrediction.predictImage():预测单张图片
ImagePrediction.predictMultipleImages():预测多张图片
results_array = multiple_prediction.predictMultipleImages(all_images_array, result_count_per_image=5)for each_result in results_array:predictions, percentage_probabilities = each_result["predictions"], each_result["percentage_probabilities"]for index in range(len(predictions)):print(predictions[index] , " : " , percentage_probabilities[index])print("-----------------------")
2.2–ObjectDetection类下的两个重要函数:
ObjectDetection.detectObjectsFromImage():
# extract_detected_objects=True可提取检测到的目标存放到objects_path 中
detections, objects_path = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image3.jpg"), output_image_path=os.path.join(execution_path , "image3new.jpg"), minimum_percentage_probability=30, display_percentage_probability=True, display_object_name=True,extract_detected_objects=True)for eachObject, eachObjectPath in zip(detections, objects_path):print(eachObject["name"] , " : " , eachObject["percentage_probability"], " : ", eachObject["box_points"] )print("Object's image saved in " + eachObjectPath)print("--------------------------------")
ObjectDetection…detectCustomObjectsFromImage():可进行自定义对象检测,屏蔽不想检测的对象
custom_objects = detector.CustomObjects(car=True, motorcycle=True)
detections = detector.detectCustomObjectsFromImage(custom_objects=custom_objects, input_image=os.path.join(execution_path , "image3.jpg"), output_image_path=os.path.join(execution_path , "image3custom.jpg"), minimum_percentage_probability=30)
更多信息可以参考ImageAI 中文文档
ImageAI(1)——10行Python即可实现深度学习的识别和检测任务相关推荐
- 用少于10行代码训练前沿深度学习新药研发模型
©PaperWeekly · 作者|黄柯鑫 学校|哈佛大学硕士生 研究方向|图学习和生物医疗 深度学习正在革新药研发行业.在本文中,我们将展示如何使用 DeepPurpose,一个基于 PyTorch ...
- 100行Python代码理解深度学习关键概念:从头构建恶性肿瘤检测网络
在构建乳腺癌预测神经网络过程中,我们主要分为3大部分: 1.用Python从零开始创建一个神经网络,并使用梯度下降算法训练模型. 2.在该神经网络中使用威斯康星乳腺癌数据集,根据9种不同的特征,预测肿 ...
- python tensorflow pytorch 深度学习 车牌识别
车牌识别相关资料收集整理 1.License Plate Detection with RetinaFace 链接:https://github.com/zeusees/License-Plate-D ...
- 10行 python 代码做出哪些酷炫的事情?
来源 | Python小二 Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的 ...
- 10 行 Python 代码能实现哪些有趣功能?
大家好,我是菜鸟哥 Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的操作.下 ...
- 10行python代码可以做哪些酷炫的事情
前言 今天玩啥?10行代码够玩吗? Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环, Python可以凭借更加简短的代码实现 ...
- 10行python代码做出哪些酷炫的事情?
大家好,我是辰哥~ Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的操作.下 ...
- 10行python代码做出哪些酷炫的事情? 小白教程
Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的操作.下面我们来看看,我们用 ...
- 10行Python,搭建一个游戏AI | 视频教程
昨天为大家推荐了三个Python视频,包含:<利用Python,用4分钟时间搭建一个情感分析系统>.<7行Python代码,搭建一个可以识花的机器学习APP>.<10行P ...
最新文章
- python 两台机器之间传递数据_Python:通过套接字在两台计算机之间发送数据
- HTML5 Canvas 绘制佛教万字
- c#编译时提高兼容性_幻像类型提高了编译时的安全性
- java中多个输入框搜索_如何在一个搜索框中输入多个字段的值进行查询?
- asp.net控件开发基础(2)
- 【卡法电子商务】-常用手机屏幕尺寸 ★★★★★
- java 等分切割图片_java 将list按指定大小等分,最后多余的单独一份
- 2018-2019-2 网络对抗技术 20165328 Exp4 恶意代码分析
- 华为系列设备ACL配置和应用常见问题
- 云痕大数据 家长登录_智学网家长学生查分入口:www.zhixue.com
- php redis 里面的hscan 第四个参数count很不靠谱
- AutoJs学习-音量键控制脚本运行
- 福昕PDF编辑器中文版(FoxitPDFEditor)绿色版
- 联想Y7000P win11笔记本双硬盘安装Ubuntu20双系统和显卡驱动
- 潮流计算程序————支路功率计算与输出程序
- windows10家庭版修改中文用户名完美解决
- ORACLE隐式类型转换
- 人工智能基础(高中版)教材补充和资源分享之番外篇 Cozmo+Python+ROS+AI
- all index range ref eq_ref const system 索引type说明
- 西工大c语言程序设计,西工大18春《C语言程序设计》平时作业
热门文章
- 分段表rowid_表按ROWID切片
- mysql 钩子函数_你想了解的Hive Query生命周期--钩子函数篇!
- 边缘案例:第二篇——Metanet协议
- mongodb集群原理
- c语言.jpg图片转成数组_PDF怎么快速转换成JPG图片呢?这几款工具超实用
- 京东旗下一电商公司注销 刘强东为该公司经理
- Linux的super super super easy教程 | vim文本编辑器 1
- 虚拟机里提示计算机内存不足,windows下打开VMware虚拟机时提示内存不足的处理方法...
- 使用python的PyPDF2 库删除pdf文件中的空白页
- matlab制作徽标