20行代码:Serverless架构下用Python可以轻松完成图片分类还是图片内容是另外一个API?首先推荐一个图像相关的库:ImageAI通过官方代码,我们可以看到一个简单的demo:fromimageai.PredictionimportImagePredictionimportosexecution_path=os.getcwd()prediction=ImagePrediction()prediction.setModelTypeAsResNet()prediction.setModelPath(os.path.join(execution_path,"resnet50_weights_tf_dim_ordering_tf_kernels.h5"))prediction.loadModel()预测,probabilities=prediction.predictImage(os.path.join(execution_path,"1.jpg"),result_count=5)foreachPrediction,eachProbabilityinzip(predictions,probabilities):print(eachPrediction+":"+eachProbability)通过这个Demo,我们可以考虑将这个模块部署到CloudFunction:首先我们在本地创建一个Python项目:mkdirimageDemo然后新建一个文件:vimindex.pyfromimageai.Prediction导入ImagePredictionimportos,base64,randomexecution_path=os.getcwd()prediction=ImagePrediction()prediction.setModelTypeAsSqueezeNet()prediction.setModelPath(os.path.join(execution_pat小时,“平方米uezenet_weights_tf_dim_ordering_tf_kernels.h5"))prediction.loadModel()defmain_handler(event,context):imgData=base64.b64decode(event["body"])fileName='/tmp/'+"".join(random.sample('zyxwvutsrqponmlkjihgfedcba',5))withopen(fileName,'wb')asf:f.write(imgData)resultData={}预测,概率=prediction.predictImage(fileName,result_count=5)foreachPrediction,eachProbabilityinzip(predictions,probabilities):resultData[eachPrediction]=eachProbabilityreturnresultData已创建,我们需要下载我们依赖的模型:-SqueezeNet(文件大小:4.82MB,预测时间最短,精度适中)-MicrosoftResearch的ResNet50(文件大小:98MB,更快的预测时间,更高的准确度)-GoogleBrain团队的InceptionV3(文件大小:91.6MB,预测时间更慢,准确度更高)-FacebookAIResearch的DenseNet121(文件大小:31.6MB,预测时间更慢,准确度最高)我们先用第一个SqueezeNet来测试一下:复制模型文件添加官方文档中的ress:直接使用wget安装:wgethttps://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/squeezenet_weights_tf_dim_ordering_tf_kernels.h5接下来我们需要安装依赖是的,这里好像安装了很多内容:而且其中一些依赖需要编译,这就需要我们在centos+python2.7/3.6版本下打包,非常复杂,尤其是mac/windows用户,伤不起所以这个时候直接使用我之前的打包地址:直接下载解压,然后放到自己的项目中:最后一步,我们创建serverless.yamlimageDemo:component:"@serverless/tencent-scf"inputs:name:imageDemocodeUri:./handler:index.main_handlerruntime:Python3.6region:ap-guangzhoudescription:图像识别/分类DemomemorySize:256timeout:10events:-apiw:name:imageDemo_apigw_serviceparameters:protocols:-httpserviceName:serverlessdescription:Imagerecognition/classificationDemoAPI环境:releaseendpoints:-path:/imagemethod:ANY完成后,执行我们的sls--debug部署,部署过程中会有扫码登录,等待之后登录,完成后,我们可以复制生成的URL:通过Python语言测试,url就是我们刚刚复制的+/image:importurllib.requestimportbase64withopen("1.jpg",'rb')asf:base64_data=base64.b64encode(f.read())s=base64_data.decode()url='http://service-9p7hbgvg-1256773370.gz.apigw.tencentcs.com/release/image'print(urllib.request.urlopen(urllib.request.request(url=url,data=s.encode("utf-8"))).read().decode("utf-8"))通过网络搜索一张图片,比如我找到了这个:gettherunningresult:{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}将代码修改一下,进行一下简单的耗时测试:importurllib.requestimportbase64,timeforiinrange(0,10):start_time=time.time()withopen("1.jpg",'rb')asf:base64_data=base64.b64encode(f.read())s=base64_数据。decode()url='http://service-hh53d8yz-1256773370.bj.apigw.tencentcs.com/release/test'print(urllib.request.urlopen(urllib.request.Request(url=url,data=s.encode("utf-8")).read().decode("utf-8"))print("cost:",time.time()-start_time)output:{"猎豹":83.12643766403198,"Irish_terrier“:2.315458096563816,“狮子”:1.8476998433470726,“teddy”:1.66655176877975464,baboon,“baboon”:1.55562783926726726725388}rrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}cost:1.1259253025054932{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}cost:1.3322770595550537{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}cost:1.3562259674072266{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}cost:1.0180821418762207{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.665517687775464,“狒狒”:1.5562783926725388}费用:1.429067134857777{“Cheetah”:83.1264376403198,“176877975464,"baboon":1.5562783926725388}cost:1.5917718410491943{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}cost:1.1727900505065918{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}cost:2.962592840194702{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}cost:1.2248001098632812这个数据,整体性能基本在我可以接受的范围内至此,我们就完成了通过Serverless架构搭建的Python版图像识别/分类工具。
