成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Serverless實戰(zhàn):用20行Python代碼輕松搞定圖像分類和預(yù)測

新聞 前端
圖像分類是人工智能領(lǐng)域的一個熱門話題,通俗來講,就是根據(jù)各自在圖像信息中反映的不同特征,把不同類別的目標(biāo)區(qū)分開。圖像分類利用計算機(jī)對圖像進(jìn)行定量分析,把圖像或圖像中的每個像元或區(qū)域劃歸為若干個類別中的某一種,代替人的視覺判讀。

 [[323609]]

圖像分類是人工智能領(lǐng)域的一個熱門話題,通俗來講,就是根據(jù)各自在圖像信息中反映的不同特征,把不同類別的目標(biāo)區(qū)分開。圖像分類利用計算機(jī)對圖像進(jìn)行定量分析,把圖像或圖像中的每個像元或區(qū)域劃歸為若干個類別中的某一種,代替人的視覺判讀。

在實際生活中,我們也會遇到圖像分類的應(yīng)用場景,例如我們常用的通過拍照花朵來識別花朵信息,通過人臉匹配人物信息等。通常,圖像識別或分類工具都是在客戶端進(jìn)行數(shù)據(jù)采集,在服務(wù)端進(jìn)行運(yùn)算獲得結(jié)果。因此,一般都會有專門的 API 來實現(xiàn)圖像識別,云廠商也會有償提供類似的能力:

華為云圖像標(biāo)簽

騰訊云圖像分析

本文將嘗試通過一個有趣的 Python 庫,快速將圖像分類的功能搭建在云函數(shù)上,并且和 API 網(wǎng)關(guān)結(jié)合,對外提供 API 功能,實現(xiàn)一個 Serverless 架構(gòu)的"圖像分類 API"。

1. 入門 ImageAI

首先,我們需要一個依賴庫:ImageAI。

什么是 ImageAI 呢?其官方文檔是這樣描述的:

ImageAI 是一個 python 庫,旨在使開發(fā)人員能夠使用簡單的幾行代碼構(gòu)建具有包含深度學(xué)習(xí)和計算機(jī)視覺功能的應(yīng)用程序和系統(tǒng)。ImageAI 本著簡潔的原則,支持最先進(jìn)的機(jī)器學(xué)習(xí)算法,用于圖像預(yù)測、自定義圖像預(yù)測、物體檢測、視頻檢測、視頻對象跟蹤和圖像預(yù)測訓(xùn)練。ImageAI 目前支持使用在 ImageNet-1000 數(shù)據(jù)集上訓(xùn)練的 4 種不同機(jī)器學(xué)習(xí)算法進(jìn)行圖像預(yù)測和訓(xùn)練。ImageAI 還支持使用在 COCO 數(shù)據(jù)集上訓(xùn)練的 RetinaNet 進(jìn)行對象檢測、視頻檢測和對象跟蹤。最終,ImageAI 將為計算機(jī)視覺提供更廣泛和更專業(yè)化的支持,包括但不限于特殊環(huán)境和特殊領(lǐng)域的圖像識別。

簡單理解,就是 ImageAI 依賴庫可以幫助用戶完成基本的圖像識別和視頻的目標(biāo)提取。不過,ImageAI 雖然提供一些數(shù)據(jù)集和模型,但我們也可以根據(jù)自身需要對其進(jìn)行額外的訓(xùn)練,進(jìn)行定制化拓展。

其官方代碼給出了這樣一個簡單的 Demo:

  1. from imageai.Prediction import ImagePrediction 
  2. import os 
  3. execution_path = os.getcwd() 
  4.  
  5. prediction = ImagePrediction() 
  6. prediction.setModelTypeAsResNet() 
  7. prediction.setModelPath(os.path.join(execution_path, "resnet50_weights_tf_dim_ordering_tf_kernels.h5")) 
  8. prediction.loadModel() 
  9.  
  10. predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "1.jpg"), result_count=5 ) 
  11. for eachPrediction, eachProbability in zip(predictions, probabilities): 
  12.     print(eachPrediction + " : " + eachProbability) 

我們可以在本地進(jìn)行初步運(yùn)行,指定圖片1.jpg為下圖時:

[[323610]]

可以得到結(jié)果:

  1. convertible  :  52.459537982940674 
  2. sports_car  :  37.61286735534668 
  3. pickup  :  3.175118938088417 
  4. car_wheel  :  1.8175017088651657 
  5. minivan  :  1.7487028613686562 

2. 讓 ImageAI 上云(部署到 Serverless 架構(gòu)上)

通過上面的 Demo,我們可以考慮將這個模塊部署到云函數(shù):

首先,在本地創(chuàng)建一個 Python 的項目:mkdir imageDemo,

然后,新建文件:vim index.py

第三,根據(jù)云函數(shù)的一些特殊形式,我們對 Demo 進(jìn)行部分改造

  • 將初始化的代碼放在外層;
  • 將預(yù)測部分當(dāng)做觸發(fā)所需要執(zhí)行的部分,放在入口方法中(此處是 main_handler);
  • 云函數(shù)與 API 網(wǎng)關(guān)結(jié)合對二進(jìn)制文件支持并不是十分的友善,所以此處通過 base64 進(jìn)行圖片傳輸;
  • 入?yún)⒍閧"picture": 圖片的 base64},出參定為:{"prediction": 圖片分類的結(jié)果}

實現(xiàn)的代碼如下:

  1. from imageai.Prediction import ImagePrediction 
  2. import os, base64, random 
  3.  
  4. execution_path = os.getcwd() 
  5.  
  6. prediction = ImagePrediction() 
  7. prediction.setModelTypeAsSqueezeNet() 
  8. prediction.setModelPath(os.path.join(execution_path, "squeezenet_weights_tf_dim_ordering_tf_kernels.h5")) 
  9. prediction.loadModel() 
  10.  
  11.  
  12. def main_handler(event, context): 
  13.     imgData = base64.b64decode(event["body"]) 
  14.     fileName = '/tmp/' + "".join(random.sample('zyxwvutsrqponmlkjihgfedcba'5)) 
  15.     with open(fileName, 'wb') as f: 
  16.         f.write(imgData) 
  17.     resultData = {} 
  18.     predictions, probabilities = prediction.predictImage(fileName, result_count=5
  19.     for eachPrediction, eachProbability in zip(predictions, probabilities): 
  20.         resultData[eachPrediction] =  eachProbability 
  21.     return resultData 

創(chuàng)建完成之后,下載所依賴的模型:

  • SqueezeNet(文件大小:4.82 MB,預(yù)測時間最短,精準(zhǔn)度適中)
  • ResNet50 by Microsoft Research (文件大小:98 MB,預(yù)測時間較快,精準(zhǔn)度高)
  • InceptionV3 by Google Brain team (文件大小:91.6 MB,預(yù)測時間慢,精度更高)
  • DenseNet121 by Facebook AI Research (文件大小:31.6 MB,預(yù)測時間較慢,精度最高)

因為我們僅用于測試,所以選擇一個比較小的模型就可以:SqueezeNet:

在官方文檔復(fù)制模型文件地址:

使用wget直接安裝:

  1. wget https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/squeezenet_weights_tf_dim_ordering_tf_kernels.h5 

接下來,進(jìn)行依賴安裝:

由于騰訊云 Serveless 產(chǎn)品,在 Python Runtime 中還不支持在線安裝依賴,所以需要手動打包依賴,并且上傳。在 Python 的各種依賴庫中,有很多依賴可能有編譯生成二進(jìn)制文件的過程,這就會導(dǎo)致不同環(huán)境下打包的依賴無法通用。

所以,最好的方法就是通過對應(yīng)的操作系統(tǒng) + 語言版本進(jìn)行打包。我們就是在 CentOS+Python3.6 的環(huán)境下進(jìn)行依賴打包。

對于很多 MacOS 用戶和 Windows 用戶來說,這確實不是一個很友好的過程,所以為了方便大家使用,我在 Serverless 架構(gòu)上做了一個在線打包依賴的工具,所以可以直接用該工具進(jìn)行打包:

生成壓縮包之后,直接下載解壓,并且放到自己的項目中即可:

最后一步,創(chuàng)建serverless.yaml

  1. imageDemo: 
  2.   component: "@serverless/tencent-scf" 
  3.   inputs: 
  4.     name: imageDemo 
  5.     codeUri: ./ 
  6.     handler: index.main_handler 
  7.     runtime: Python3.6 
  8.     region: ap-guangzhou 
  9.     description: 圖像識別 / 分類 Demo 
  10.     memorySize: 256 
  11.     timeout: 10 
  12.     events: 
  13.       - apigw: 
  14.           name: imageDemo_apigw_service 
  15.           parameters: 
  16.             protocols: 
  17.               - http 
  18.             serviceName: serverless 
  19.             description: 圖像識別 / 分類 DemoAPI 
  20.             environment: release 
  21.             endpoints: 
  22.               - path: /image 
  23.                 method: ANY 

完成之后,執(zhí)行sls --debug部署,部署過程中會有掃碼登陸,登陸之后等待即可,完成之后,就可以看到部署地址。

3. 基本測試

通過 Python 語言進(jìn)行測試,接口地址就是剛才復(fù)制的 +/image,例如:

  1. import json 
  2. import urllib.request 
  3. import base64 
  4.  
  5. with open("1.jpg"'rb') as f: 
  6.     base64_data = base64.b64encode(f.read()) 
  7.     s = base64_data.decode() 
  8.  
  9. url = 'http://service-9p7hbgvg-1256773370.gz.apigw.tencentcs.com/release/image' 
  10.  
  11. print(urllib.request.urlopen(urllib.request.Request( 
  12.     url = url, 
  13.     data= json.dumps({'picture': s}).encode("utf-8"
  14. )).read().decode("utf-8")) 

通過網(wǎng)絡(luò)搜索一張圖片:

[[323611]]

得到運(yùn)行結(jié)果:

  1.     "prediction": { 
  2.         "cheetah"83.12643766403198
  3.         "Irish_terrier"2.315458096563816
  4.         "lion"1.8476998433470726
  5.         "teddy"1.6655176877975464
  6.         "baboon"1.5562783926725388 
  7.     } 

通過這個結(jié)果,我們可以看到圖片的基礎(chǔ)分類 / 預(yù)測已經(jīng)成功了,為了證明這個接口的時延情況,可以對程序進(jìn)行基本改造:

  1. import urllib.request 
  2. import base64, time 
  3.  
  4. for i in range(0,10): 
  5.     start_time = time.time() 
  6.     with open("1.jpg"'rb') as f: 
  7.         base64_data = base64.b64encode(f.read()) 
  8.         s = base64_data.decode() 
  9.  
  10.     url = 'http://service-9p7hbgvg-1256773370.gz.apigw.tencentcs.com/release/image' 
  11.  
  12.     print(urllib.request.urlopen(urllib.request.Request( 
  13.         url = url, 
  14.         data= json.dumps({'picture': s}).encode("utf-8"
  15.     )).read().decode("utf-8")) 
  16.  
  17.     print("cost: ", time.time() - start_time) 

輸出結(jié)果:

  1. {"prediction":{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}} 
  2. cost:  2.1161561012268066 
  3. {"prediction":{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}} 
  4. cost:  1.1259253025054932 
  5. {"prediction":{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}} 
  6. cost:  1.3322770595550537 
  7. {"prediction":{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}} 
  8. cost:  1.3562259674072266 
  9. {"prediction":{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}} 
  10. cost:  1.0180821418762207 
  11. {"prediction":{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}} 
  12. cost:  1.4290671348571777 
  13. {"prediction":{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}} 
  14. cost:  1.5917718410491943 
  15. {"prediction":{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}} 
  16. cost:  1.1727900505065918 
  17. {"prediction":{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}} 
  18. cost:  2.962592840194702 
  19. {"prediction":{"cheetah":83.12643766403198,"Irish_terrier":2.315458096563816,"lion":1.8476998433470726,"teddy":1.6655176877975464,"baboon":1.5562783926725388}} 
  20. cost:  1.2248001098632812 

通過上面一組數(shù)據(jù),我們可以看到整體的耗時基本控制在 1-1.5 秒之間。

當(dāng)然,如果想要對接口性能進(jìn)行更多的測試,例如通過并發(fā)測試來看并發(fā)情況下接口性能表現(xiàn)等。

至此,我們通過 Serveerless 架構(gòu)搭建的 Python 版本的圖像識別 / 分類小工具做好了。

4. 總結(jié)

Serverless 架構(gòu)下進(jìn)行人工智能相關(guān)的應(yīng)用可以是說是非常多的,本文是通過一個已有的依賴庫,實現(xiàn)一個圖像分類 / 預(yù)測的接口。imageAI這個依賴庫相對來說自由度比較高,可以根據(jù)自身需要用來定制化自己的模型。本文算是拋磚引玉,期待更多人通過 Serverless 架構(gòu)部署自己的"人工智能"API。

 

責(zé)任編輯:張燕妮 來源: 架構(gòu)頭條
相關(guān)推薦

2021-01-08 05:26:31

ServerlessPython 預(yù)測

2019-05-05 09:46:01

Python代碼神經(jīng)網(wǎng)絡(luò)

2022-05-09 13:59:41

Python提取PPTword文檔

2023-11-10 09:41:44

Python代碼

2020-05-11 10:59:02

PythonWord工具

2018-04-24 10:45:00

Python人工智能圖像識別

2025-02-12 09:55:01

Java代碼性能

2024-05-06 08:56:31

PythonHTML正則表達(dá)式

2022-03-26 22:28:06

加密通信Python

2021-04-07 13:43:07

PythonDash數(shù)據(jù)庫

2024-06-19 09:21:08

2021-11-11 23:02:16

電腦垃圾軟件

2024-06-12 15:59:59

前端JavaScrip識別

2022-04-19 07:45:40

代碼Python美圖秀秀

2020-12-07 16:20:53

Python 開發(fā)編程語言

2024-01-03 08:12:10

計算求和Python內(nèi)置函數(shù)

2019-07-24 16:00:37

Python代碼高清圖片

2018-04-09 10:20:32

深度學(xué)習(xí)

2021-10-28 09:42:38

代碼編碼開發(fā)

2022-02-24 10:40:14

Python代碼
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 成人免费大片黄在线播放 | 亚洲欧美国产毛片在线 | 国产精品视频导航 | 一区在线视频 | 91精品国产91久久久久久最新 | 91国产精品 | 欧美成人免费在线 | 毛片视频网站 | 免费的色网站 | 中文一区| www.日本国产 | 日韩成人一区 | 久久久久精 | 久久精品一区二区三区四区 | 日韩一区二区三区在线视频 | 国产精品欧美一区二区三区 | 国产精品久久久久久久久久免费看 | 精品一二三区视频 | 国产高清精品网站 | 国产免费一区 | 能看的av| 国产精品日本一区二区不卡视频 | 蜜桃毛片| 亚洲一区二区免费视频 | 亚洲一二三区在线观看 | 视频1区| 免费看色 | 偷拍自拍网 | 噜噜噜噜狠狠狠7777视频 | 国产精品一区在线观看你懂的 | 国产97久久 | 天天躁日日躁狠狠的躁天龙影院 | 精品一区二区不卡 | 国产大学生情侣呻吟视频 | 国产精品一区视频 | 欧美一区在线视频 | 无码一区二区三区视频 | 国产亚洲精品久久久久动 | 欧美日韩国产精品一区 | 久久亚洲国产精品日日av夜夜 | 国产精品成av人在线视午夜片 |