1. 首页 > 快讯

Python 代码快速打造图像分类与预测:轻量级 Serverless 架构

很多朋友对于Python 代码快速打造图像分类与预测:轻量级 Serverless 架构和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

[[374516]]

前言图像分类是人工智能领域的热门话题。通俗的解释是一种根据图像信息反映的不同特征来区分不同类别目标的图像处理方法。

它利用计算机对图像进行定量分析,并将图像或图像中的每个像素或区域分类为几个类别之一,以代替人类的视觉解释。

图像分类在实际生产生活中也经常遇到,针对不同领域或需求具有很强的针对性。例如通过拍摄花朵来识别花朵信息、通过比对人脸来比对人物信息等。

通常,这些图像识别或分类工具在客户端收集数据并在服务器端进行计算以获得结果。换句话说,图像识别通常有专门的API。例如,各大云厂商都会向我们提供类似的收费能力:

阿里云图像识别页面:

华为云图像识别页面:

首先给大家介绍一下需要的依赖库:ImageAI。通过这个依赖的官方文档,我们可以看到这样的描述:

ImageAI 是一个Python 库,旨在帮助开发人员仅使用几行代码即可构建具有深度学习和计算机视觉功能的应用程序和系统。

ImageAI 在构建时考虑到简单性,支持最先进的机器学习算法,用于图像预测、自定义图像预测、对象检测、视频检测、视频对象跟踪和图像预测训练。 ImageAI 目前支持使用在ImageNet-1000 数据集上训练的4 种不同机器学习算法进行图像预测和训练。 ImageAI 还使用在COCO 数据集上训练的RetinaNet 支持对象检测、视频检测和对象跟踪。最终,ImageAI将为计算机视觉提供更广泛、更专业的支持,包括但不限于特殊环境、特殊领域的图像识别。

也就是说,这个依赖库可以帮助我们完成基本的图像识别和视频目标提取。虽然它提供了一些数据集和模型,但我们也可以根据自己的需求进行额外的训练和定制扩展。通过官方代码,我们可以看到一个简单的Demo:

#-*-coding:utf-8-*-fromimageai.PredictionimportImagePrediction#模型加载预测=ImagePrediction()prediction.setModelTypeAsResNet()prediction.setModelPath('resnet50_weights_tf_dim_ordering_tf_kernels.h5')prediction.loadModel()predictions,probabilities=prediction.predictImage(' ./picture.jpg',result_count=5)foreachPrediction,eachProbabilityinzip(predictions,probabilities):print(str(eachPrediction)+':'+str(eachProbability))(左右滑动查看)

当我们指定picture.jpg 时,图片为:

[[374517]]

我们执行后的结果是:

笔记本电脑:71.43893241882324笔记本:16.265612840652466调制解调器:4.899394512176514hard_disc:4.007557779550552鼠标:1.298194285482168 2.如果您觉得该型号是

resnet50_weights_tf_dim_ordering_tf_kernels.h5 太大且耗时太长。您可以根据您的需求选择型号:

SqueezeNet(文件大小:4.82 MB,预测时间最短,精度中等) Microsoft Research 的ResNet50(文件大小:98 MB,预测时间快,精度高) Google Brain 团队的InceptionV3(文件大小:91.6 MB,预测时间较慢,较高)精度)DenseNet121 by Facebook AI Research(文件大小:31.6 MB,预测时间较慢,精度最高)模型下载地址可以在Github地址上找到:https://github.com/OlafenwaMoses/ImageAI/releases/tag/1.0

或者参考ImageAI官方文档:https://imageai-cn.readthedocs.io/zh_CN/latest/ImageAI_Image_Prediction.html

项目 Serverless 化根据函数计算的要求,编写入口方法并初始化工程。同时在当前项目下创建文件夹model,并将模型文件复制到该文件夹中:

项目总体流程:

实现代码:

#-*-coding:utf-8-*-fromimageai.PredictionimportImagePredictionimportjsonimportuuidimportbase64importrandom#ResponseclassResponse:def__init__(self,start_response,response,errorCode=None):self.start=start_responseresponseBody={'Error':{'C ode':errorCode,'Message':response},} iferrorCodeelse{'Response':response}#默认添加uuid,方便后面定位responseBody['ResponseId']=str(uuid.uuid1())print('Response:',json.转储(responseBody))self.response=json.dumps (responseBody)def__iter__(self):status='200'response_headers=[('Content-type','application/json;charset=UTF-8')]self.start(status,response_headers)yieldself.response.encode(' utf-8')#随机字符串randomStr=lambdanum=5:''.join(random.sample('abcdefghijklmnopqrstuvwxyz',num))#模型加载print('Initmodel')prediction=ImagePrediction()prediction.setModelTypeAsResNet()print ('Loadmodel')prediction.setModelPath('/mnt/auto/model/resnet50_weights_tf_dim_ordering_tf_kernels.h5')prediction.loadModel()print('Loadcomplete')defhandler(environ,start_response):try:request_body_size=int(environ.get('CONTENT_LENGTH') ,0)) except(ValueError):request_body_size=0requestBody=json.loads(environ['wsgi.input'].read(request_body_size).decode('utf-8'))#图像获取print('Getpucture')imageName=randomStr(10)imageData=base64.b64decode(requestBody['image'])imagePath='/tmp/'+imageNamewithopen(imagePath,'wb')asf:f.write(imageData)#内容预测print('预测.' )结果={}预测,概率=预测.predictImage(imagePath,result_count=5)print(zip(预测,概率))foreachPrediction,eachProbabilityinzip(预测,概率):result[str(eachPrediction)]=str(eachProbability)returnResponse( start_response,结果)所需的依赖项:

tensorflow==1.13.1numpy==1.19.4scipy==1.5.4opencv-python==4.4.0.46pillow==8.0.1matplotlib==3.3.3h5py==3.1.0keras==2.4.3imageai==2.1.5写入部署所需的配置文件:

ServerlessBookimageaidemo:component:FCPROVIDER:Alibabaacc 360ServerlessBookDescript 3:Serverless 案例日志:Autonas:AutoFUNCTION33330SERVERESS_IMAGEAIPTION: 图片目标检测COD Euri:src3360./srcexincludes3:-src/.fun-src/modelhandler:index.handlerenvalonment:pythonuseValue3333330/mnt/mnt/mnt/mnt/Auto/.fun/PythonMemorsize:3072runtime:python3timeout3336 060triggers3:-Name:ImageAitype:HTTPPAMEERS:Auth Type:ANYMOSMETHODS:-GET-POTDOMAINS:-DOMain3360Auto ,可以看到目录的存在: /mnt/auto/。这部分其实就是nas挂载后的地址。您只需提前将其写入代码中即可。下一步将是创建nas 并安装该点。配置具体操作。

项目部署与测试完成以上步骤后,您可以通过:

sdeploy 执行项目部署。部署完成后可以看到结果:

完成部署后,您可以使用:

sinstalldocker 安装依赖项:

完成后,我们通过:

snassync./src/.fun 会将依赖目录打包上传到nas。成功后打包上传模型目录:

snassync./src/model完成后,可以通过:

snasls --all 查看目录详细信息:

完成后我们就可以编写脚本进行测试了。通过代码使用刚刚应用的相同测试图像:

importjsonimporturllib.requestimportbase64importtimewithopen('picture.jpg','rb')asf:data=base64.b64encode(f.read()).decode()url='http://35685264-1295939377467795.test.functioncompute.com/'timeSta rt=time.time ()print(urllib.request.urlopen(urllib.request.Request(url=url,data=json.dumps({'image':data}).encode('utf-8'))).read().decode ('utf-8'))print('Time:',time.time()-timeStart) 可以看到结果:

{'响应':{'笔记本电脑':'71.43893837928772','笔记本':'16.2656143 30768585','调制解调器':'4.899385944008827','hard_disc':'4.0075656026 60179','鼠标':'1.2981869280338287'},'ResponseId ':'1d74ae7e-298a-11eb-837 4-024215000701'}time:29.16020894050598 可以看到函数计算成功返回了预期结果,但是整体耗时超乎想象,接近30s,此时我们再次执行测试脚本:

{'响应':{'笔记本电脑':'71.43893837928772','笔记本':'16.26 5614330768585','调制解调器':'4.899385944008827','hard_disc':'4.00756 5602 660179','鼠标':'1.2981869280338287'},' ResponseId':'4b8be48 a-298a-11eb-ba97-024215000501'}Time:1.1511380672454834可以看到再次执行的时间只有1.15秒,比上次快了整整28秒。

项目优化在最后一轮测试中,我们可以看到项目第一次启动和第二次启动的时间差。事实上,这个时间差异主要是因为该函数在加载模型时浪费了极长的时间。

即使在本地我们也可以简单地测试:

#-*-coding:utf-8-*-importtimetimeStart=time.time()#模型加载fromimageai.PredictionimportImagePredictionprediction=ImagePrediction()prediction.setModelTypeAsResNet()prediction.setModelPath('resnet50_weights_tf_dim_ordering_tf_kernels.h5')prediction.loadModel()print( 'LoadTime:',time.time( )-timeStart)timeStart=time.time()predictions,probabilities=prediction.predictImage('./picture.jpg',result_count=5)foreachPrediction,eachProbabili tyinzip(预测,概率):print( str(eachPrediction)+':'+str(eachProbability))print('PredictTime:',time.time()-timeStart) 执行结果:

LoadTime:5.549695014953613笔记本电脑:71.43893241882324笔记本:16.265612840652466调制解调器:4.8993945 12176514hard_disc:4.00755777955055 2mouse:1.2981942854821682PredictTime:0.8137111663818359可以看到,加载imageAI模块时以及加载模型文件的过程总共耗时5.5秒,预测部分耗时不到1秒。在函数计算上,机器性能本身没有我本地性能高。这时,为了避免每次加载模型导致的响应时间过长,在部署的代码中,可以看到模型加载过程其实是放在了入口方法之外的。这样做的一个好处是,项目每次执行时不一定要冷启动,这意味着在一定的复用条件下,某些对象是可以复用的,即不需要每次都重新加载模型和导入。依赖性等

因此,在实际项目中,为了避免实例频繁请求以及重复加载和创建某些资源,我们可以在初始化时放置一些资源。这样可以大大提升项目的整体性能,同时结合厂家提供的预留能力,可以基本消除功能冷启动的负面影响。

总结Serverless架构可以运行人工智能相关项目; Serverless可以很好的兼容Tensorflow等机器学习/深度学习工具;虽然函数计算本身有空间限制,但事实上,增加硬盘挂载容量后,函数计算自身的能力将会得到极大的扩展。无服务器开发人员

Serverless Devs是一个开源、开放的Serverless开发者平台,致力于为开发者提供强大的工具链系统。通过该平台,开发者可以一键体验多云Serverless产品,快速部署Serverless项目。

Github地址:https://github.com/serverless-devs

Gitee地址:https://gitee.com/organizations/serverless-devs/projects

Serverless Devs官网:https://www.serverless-devs.com

关于Python 代码快速打造图像分类与预测:轻量级 Serverless 架构和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

用户评论

╯念抹浅笑

这太酷了!想试试用 Python 快速训练一个图片分类器,Serverless 真的让人省心。

    有7位网友表示赞同!

良人凉人

我一直在找简化图片分类的方法,这20行代码看起来非常简洁高效。

    有11位网友表示赞同!

孤岛晴空

厉害了!能用 Python 和 Serverless 架构一起玩图像分类真是太有未来感了。

    有6位网友表示赞同!

人心叵测i

平时都是用一些复杂工具做图像分类,这个用 20 行 Python 代码搞定的方法太吸引人了!

    有15位网友表示赞同!

拉扯

分享出来的人是不是个大神?这代码也太干净了!我很想看看具体怎么做到的。

    有15位网友表示赞同!

岁岁年年

我的机器学习技能还很基础,这种简化的方法应该适合我入门学习吧。

    有17位网友表示赞同!

陌上花

图像分类一直挺难的,没想到可以用 Python 这么轻易搞定,真是让人眼前一亮!

    有16位网友表示赞同!

巷雨优美回忆

看起来这个 "Serverless 架构" 有点意思,要好好了解一下。

    有14位网友表示赞同!

打个酱油卖个萌

我已经有一个想法了可以使用这个方法来处理我的图片数据,太棒了!

    有15位网友表示赞同!

野兽之美

期待看到更多关于 Python 和图像分类的案例分享!

    有12位网友表示赞同!

断秋风

Python 简洁高效,加上 Serverless 架构更进一步优化了效率,真是令人兴奋!

    有14位网友表示赞同!

﹏櫻之舞﹏

我一直在关注 Serverless 的发展,这次结合 Python 处理图像分类很酷!

    有8位网友表示赞同!

裸睡の鱼

这个方法可以应用到哪些领域呢?比如家居智能、医疗诊断等等?

    有5位网友表示赞同!

北朽暖栀

看到这些 20 行代码,让我更加想去学习 Python 和机器学习了!

    有19位网友表示赞同!

余温散尽ぺ

这篇文章应该会给我很多灵感,我也可以尝试探索一下 Serverless 架构。

    有13位网友表示赞同!

无所谓

希望以后能看到更多类似的应用案例,让所有人都能更容易地了解和使用人工智能。

    有17位网友表示赞同!

伪心

这种简单高效的方法真的能够颠覆传统的图像分类方式吗?

    有10位网友表示赞同!

一笑抵千言

这个 "Python 代码图形" 是指代码的可视化展示吗?

    有17位网友表示赞同!

我没有爱人i

我需要学习一些机器学习基础知识才能更好地理解这篇文章吧!

    有5位网友表示赞同!

独角戏°

感谢分享,这篇文章让我了解了 Serverless 架构的强大功能。

    有8位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/7733.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666