圖像分類是人工智慧領域的一個熱門話題,通俗來講,就是根據各自在圖像信息中反映的不同特徵,把不同類別的目標區分開。圖像分類利用計算機對圖像進行定量分析,把圖像或圖像中的每個像元或區域劃歸為若干個類別中的某一種,代替人的視覺判讀。
在實際生活中,我們也會遇到圖像分類的應用場景,例如我們常用的通過拍照花朵來識別花朵信息,通過人臉匹對人物信息等。通常,圖像識別或分類工具都是在客戶端進行數據採集,在服務端進行運算獲得結果。因此,一般都會有專門的 API 來實現圖像識別,雲廠商也會有償提供類似的能力:
華為雲圖像標籤
騰訊雲圖像分析
本文將嘗試通過一個有趣的 Python 庫,快速將圖像分類的功能搭建在雲函數上,並且和 API 網關結合,對外提供 API 功能,實現一個 Serverless 架構的 " 圖像分類 API"。
入門 ImageAI
首先,我們需要一個依賴庫:ImageAI。
什麼是 ImageAI 呢?其官方文檔是這樣描述的:
ImageAI 是一個 python 庫,旨在使開發人員能夠使用簡單的幾行代碼構建具有包含深度學習和計算機視覺功能的應用程式和系統。ImageAI 本著簡潔的原則,支持最先進的機器學習算法,用於圖像預測、自定義圖像預測、物體檢測、視頻檢測、視頻對象跟蹤和圖像預測訓練。ImageAI 目前支持使用在 ImageNet-1000 數據集上訓練的 4 種不同機器學習算法進行圖像預測和訓練。ImageAI 還支持使用在 COCO 數據集上訓練的 RetinaNet 進行對象檢測、視頻檢測和對象跟蹤。 最終,ImageAI 將為計算機視覺提供更廣泛和更專業化的支持,包括但不限於特殊環境和特殊領域的圖像識別。
簡單理解,就是 ImageAI 依賴庫可以幫助用戶完成基本的圖像識別和視頻的目標提取。不過,ImageAI 雖然提供一些數據集和模型,但我們也可以根據自身需要對其進行額外的訓練,進行定製化拓展。
其官方代碼給出了這樣一個簡單的 Demo:
from imageai.Prediction import ImagePredictionimport osexecution_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.459537982940674sports_car : 37.61286735534668pickup : 3.175118938088417car_wheel : 1.8175017088651657minivan : 1.7487028613686562讓 ImageAI 上雲(部署到 Serverless 架構上)
通過上面的 Demo,我們可以考慮將這個模塊部署到雲函數:
首先,在本地創建一個 Python 的項目:mkdir imageDemo新建文件:vim index.py根據云函數的一些特殊形式,我們對 Demo 進行部分改造將初始化的代碼放在外層;將預測部分當做觸發所需要執行的部分,放在入口方法中(此處是 main_handler);雲函數與 API 網關結合對二進位文件支持並不是十分的友善,所以此處通過 base64 進行圖片傳輸;入參定為{"picture": 圖片的 base64},出參定為:{"prediction": 圖片分類的結果}實現的代碼如下:
閱讀更多
如果你想閱讀更多相關內容,可以點擊文末了解更多查看