行将开播:4月29日,民生银行郭庆谈商业银行金融科技赋能的探求与实际
图像分类是人工智能范围的一个抢手话题,深刻来讲,就是依据各自在图像信息中反映的不同特征,把不同类别的目的区分开。图像分类应用计算机对图像停止定量剖析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,替代人的视觉判读。
在实践生活中,我们也会遇到图像分类的运用场景,例如我们常用的经过拍照花朵来辨认花朵信息,经过人脸婚配人物信息等。通常,图像辨认或分类工具都是在客户端停止数据采集,在效劳端停止运算取得结果。因此,普通都会有专门的 API 来完成图像辨认,云厂商也会有偿提供相似的才能:
华为云图像标签
腾讯云图像剖析
本文将尝试经过一个幽默的 Python 库,快速将图像分类的功用搭建在云函数上,并且和 API 网关结合,对外提供 API 功用,完成一个 Serverless 架构的"图像分类 API"。
1. 入门 ImageAI首先,我们需求一个依赖库:ImageAI。
什么是 ImageAI 呢?其官方文档是这样描画的:
ImageAI 是一个 python 库,旨在使开发人员可以运用复杂的几行代码构建具有包含深度学习和计算机视觉功用的运用顺序和系统。ImageAI 本着繁复的准绳,支持最先进的机器学习算法,用于图像预测、自定义图像预测、物体检测、视频检测、视频对象跟踪和图像预测训练。ImageAI 目前支持运用在 ImageNet-1000 数据集上训练的 4 种不同机器学习算法停止图像预测和训练。ImageAI 还支持运用在 COCO 数据集上训练的 RetinaNet 停止对象检测、视频检测和对象跟踪。最终,ImageAI 将为计算机视觉提供更普遍和更专业化的支持,包括但不限于特殊环境和特殊范围的图像辨认。
复杂了解,就是 ImageAI 依赖库可以协助用户完成基本的图像辨认和视频的目的提取。不过,ImageAI 虽然提供一些数据集和模型,但我们也可以依据本身需求对其停止额外的训练,停止定制化拓展。
其官方代码给出了这样一个复杂的 Demo:
from imageai.Prediction import ImagePrediction
import os
execution_path = os.getcwd()
prediction = ImagePrediction()
prediction.setModelTypeAsResNet()
prediction.setModelPath(os.path.join(execution_path, "resnet50_weights_tf_dim_ordering_tf_kernels.h5"))
prediction.loadModel()
predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "1.jpg"), result_count=5 )
for eachPrediction, eachProbability in zip(predictions, probabilities):
print(eachPrediction + " : " + eachProbability)
我们可以在本地停止初步运转,指定图片1.jpg为下图时:
可以失掉结果:
convertible : 52.459537982940674
sports_car : 37.61286735534668
pickup : 3.175118938088417
car_wheel : 1.8175017088651657
minivan : 1.7487028613686562
2. 让 ImageAI 上云(部署到 Serverless 架构上)经过下面的 Demo,我们可以思索将这个模块部署到云函数:
首先,在本地创立一个 Python 的项目:mkdir imageDemo,
然后,新建文件:vim index.py
第三,依据云函数的一些特殊方式,我们对 Demo 停止部分改造
将初始化的代码放在外层;
将预测部分当做触发所需求执行的部分,放在入口办法中(此处是 main_handler);
云函数与 API 网关结合对二进制文件支持并不是十分的友善,所以此处经过 base64 停止图片传输;
入参定为{"picture": 图片的 base64},出参定为:{"prediction": 图片分类的结果}
完成的代码如下:
from imageai.Prediction import ImagePrediction
import os, base64, random
execution_path = os.getcwd()
prediction = ImagePrediction()
prediction.setModelTypeAsSqueezeNet()
prediction.setModelPath(os.path.join(execution_path, "squeezenet_weights_tf_dim_ordering_tf_kernels.h5"))
prediction.loadModel()
def main_handler(event, context):
imgData = base64.b64decode(event["body"])
(责任编辑:admin)