20行代碼:Serverless架構(gòu)下用Python輕松搞定圖像分類

圖像分類是人工智能領(lǐng)域的一個熱門話題绳姨,同樣在生產(chǎn)環(huán)境中也會經(jīng)常會遇到類似的需求甥捺,那么怎么快速搭建一個圖像分類兆衅,或者圖像內(nèi)容是別的API呢?

首先风响,給大家推薦一個圖像相關(guān)的庫: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)

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

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

mkdir imageDemo

然后新建文件:vim index.py

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"])
    fileName = '/tmp/' + "".join(random.sample('zyxwvutsrqponmlkjihgfedcba', 5))
    with open(fileName, 'wb') as f:
        f.write(imgData)
    resultData = {}
    predictions, probabilities = prediction.predictImage(fileName, result_count=5)
    for eachPrediction, eachProbability in zip(predictions, probabilities):
        resultData[eachPrediction] =  eachProbability
    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ù)制模型文件地址:

image

使用wget直接安裝:

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

接下來,我們就需要進(jìn)行安裝依賴了日缨,這里面貌似安裝的內(nèi)容蠻多的:

image

而且這些依賴有一些需要編譯的钱反,這就需要我們在centos + python2.7/3.6的版本下打包才可以,這樣就顯得非常復(fù)雜匣距,尤其是mac/windows用戶面哥,傷不起。

所以這時候毅待,直接用我之前的打包網(wǎng)址:

image
image

直接下載解壓尚卫,然后放到自己的項目中:

image

最后,一步了尸红,我們創(chuàng)建serverless.yaml

imageDemo:
  component: "@serverless/tencent-scf"
  inputs:
    name: imageDemo
    codeUri: ./
    handler: index.main_handler
    runtime: Python3.6
    region: ap-guangzhou
    description: 圖像識別/分類Demo
    memorySize: 256
    timeout: 10
    events:
      - apigw:
          name: imageDemo_apigw_service
          parameters:
            protocols:
              - http
            serviceName: serverless
            description: 圖像識別/分類DemoAPI
            environment: release
            endpoints:
              - path: /image
                method: ANY

完成之后吱涉,執(zhí)行我們的sls --debug部署刹泄,部署過程中會有掃碼的登陸,登陸之后等待即可怎爵,完成之后特石,我們可以復(fù)制生成的URL:

image

通過Python語言進(jìn)行測試,url就是我們剛才復(fù)制的+/image

import urllib.request
import base64

with open("1.jpg", 'rb') as f:
    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"))

通過網(wǎng)絡(luò)搜索一張圖片鳖链,例如我找了這個:

image

得到運行結(jié)果:

{"cheetah": 83.12643766403198, "Irish_terrier": 2.315458096563816, "lion": 1.8476998433470726, "teddy": 1.6655176877975464, "baboon": 1.5562783926725388}

將代碼修改一下姆蘸,進(jìn)行一下簡單的耗時測試:

import urllib.request
import base64, time

for i in range(0,10):
    start_time = time.time()
    with open("1.jpg", 'rb') as f:
        base64_data = base64.b64encode(f.read())
        s = base64_data.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)

輸出結(jié)果:

{"cheetah": 83.12643766403198, "Irish_terrier": 2.315458096563816, "lion": 1.8476998433470726, "teddy": 1.6655176877975464, "baboon": 1.5562783926725388}
cost:  2.1161561012268066
{"cheetah": 83.12643766403198, "Irish_terrier": 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.6655176877975464, "baboon": 1.5562783926725388}
cost:  1.4290671348571777
{"cheetah": 83.12643766403198, "Irish_terrier": 2.315458096563816, "lion": 1.8476998433470726, "teddy": 1.6655176877975464, "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

這個數(shù)據(jù),整體性能基本是在我可以接受的范圍內(nèi)撒轮。

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


image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末题山,一起剝皮案震驚了整個濱河市兰粉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌顶瞳,老刑警劉巖玖姑,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異慨菱,居然都是意外死亡施逾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門燕鸽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婿滓,“玉大人,你說我怎么就攤上這事协饲∥吠螅” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵茉稠,是天一觀的道長描馅。 經(jīng)常有香客問我,道長而线,這世上最難降的妖魔是什么铭污? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮膀篮,結(jié)果婚禮上嘹狞,老公的妹妹穿的比我還像新娘。我一直安慰自己誓竿,他們只是感情好磅网,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烤黍,像睡著了一般知市。 火紅的嫁衣襯著肌膚如雪傻盟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天嫂丙,我揣著相機與錄音娘赴,去河邊找鬼。 笑死跟啤,一個胖子當(dāng)著我的面吹牛诽表,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隅肥,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼竿奏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腥放?” 一聲冷哼從身側(cè)響起泛啸,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秃症,沒想到半個月后候址,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡种柑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年岗仑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聚请。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡荠雕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驶赏,到底是詐尸還是另有隱情炸卑,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布母市,位于F島的核電站矾兜,受9級特大地震影響损趋,放射性物質(zhì)發(fā)生泄漏患久。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一浑槽、第九天 我趴在偏房一處隱蔽的房頂上張望蒋失。 院中可真熱鬧,春花似錦桐玻、人聲如沸篙挽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铣卡。三九已至链韭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間煮落,已是汗流浹背敞峭。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝉仇,地道東北人旋讹。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像轿衔,于是被迫代替她去往敵國和親沉迹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • feisky云計算害驹、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,867評論 0 5
  • 尊敬的李老師鞭呕,智慧的馬教授,親愛的家人們: 大家好宛官,我是(劉翠平)劉總的人琅拌,今天是2018年11月16號我的日精進(jìn)...
    金締尊周大生珠寶玉玉閱讀 128評論 0 0
  • 我與東坡,并非一見鐘情,也非日久生情。若要問我為什么愛上他,我只能答:只因在人群中多看了他一眼摘刑。我生于中國...
    蘆葦溯夏閱讀 5,593評論 7 16
  • 詩圣《冬至》詩曰:“年年至日長為客进宝,忽忽窮愁泥殺人”,讀之不覺淚下枷恕。今日冬至党晋,填《浣溪沙》一闋,寄之徐块。 客路那堪節(jié)...
    豫齋閱讀 1,898評論 44 53
  • “小智長成大人了啊” 剛跨過18歲門檻的文成智未玻,這個暑假常常聽到那些許久未見的親戚們對他這樣說。 可有...
    funkymonks閱讀 184評論 0 0