“探店”低程式碼——它真的很厲害?

微軟技術棧發表於2022-03-26

我是⼀名⼤齡開發⼈員,歷經 LOGO,Pascal,C/C++,Java,C#/F#,JavaScript,Python,TypeScript,Rust,Go 等語⾔的磨練,通俗來說就是⼀位髮量少的碼農。我第⼀次聽到低程式碼是在2017年,感受是什麼?內⼼話是我沒有擔⼼我會丟了⼯作的,總覺得是⼀個玩具。經過⼏年的發展,低程式碼真的能完成了所有業務⼯作了嗎?接下來我去幫⼤家“探店”。

從需求開始

我這⼏年專注在移動應⽤和機器學習的技術上,我也是⼀名星球⼤戰迷,那我們就來做⼀個基於計算機視覺的移動應⽤看看。

從傳統的做法上去分析,這需要通過深度學習來完成物體分類的識別,然後通過雲端釋出服務,最後通過跨平臺移動技術完成應⽤的開發。但從低程式碼⻆度⼜是怎麼完成呢?

我們通過微軟的⾃定義視覺服務(CustomVision) 完成了物體分類的⼯作,再通過 Custom Vision 直接⽣成了模型容器程式碼直接做成服務釋出到 Azure Function,最後通過 Power Apps 完成移動應⽤的開發。

擼起袖子幹

▌零程式碼的自定義計算機視覺

計算機視覺是⼈⼯智慧領域最成熟的技術,演算法有很多,但對於不是從事該領域的開發⼈員從開發環境到深度學習框架和演算法都需要重新學習。通過微軟的⾃定義視覺,你⽆需要任何⼈⼯智慧的知識,你只需要上傳好影像分類或者物體識別的圖⽚就可以通過雲端快速⽣成計算機視覺的模型。⽽且這些模型你可以匯出離線部署到雲端/物聯⽹/移動裝置上。

以下是 4 步完成計算機視覺

1.進⼊ Azure Portal 通過新增資源組 (這⾥你需要有⼀個Azure賬號),從 AI+Machine Learning 建立⾃定義視覺服務

2.進⼊⾃定義視覺的⻔戶,建立⼀個影像分類功能的項⽬

⾃定義視覺⽀持影像分類和物體識別,你可以根據⾃⼰的需要選擇,這⾥選擇影像分類(Classification) 選擇識別多型別單標籤(Single tag per image) 建議選擇General(compact),這個選項⽀持多種模型型別 的匯出,如 TensorFlow,ONNX,CoreML 適應部署到不同終端,和雲端應⽤。

3.建立成功後,進⼊後建立 BB8,C3PO,R2D2 三個⽂件夾,並基於你找到的圖⽚對應上傳到對應的⽂件夾中

image.png

4.點選進⾏訓練

訓練成功後,你可以看到相關的訓練結果

找⼀張圖⽚測試⼀下

這太神奇了,你根本不需要任何⼀⾏程式碼,3步就完成了計算機視覺的⼯作,賺⼤了。這可以讓你花更多時間在應⽤場景上。

▌基於 PaaS 的 Azure Function

通過 CustomVision 不僅可以⽣成計算機視覺模型,⽽且可以基於不同的應⽤場景進⾏結合模型⽣成應⽤程式碼。你通過 Export 就可以匯出。現在雲原⽣的技術很多,Serverless 就是⾮常受歡迎的雲端 PaaS。Azure 中的 Azure Functions 就是⼀種⽆伺服器解決⽅案,可以使⽤戶減少程式碼編寫、減少需要維護的基礎結構並節省成本。⽆需擔⼼部署和維護伺服器,雲基礎結構提供保持應⽤程式運⾏所需的所有最新資源。你只需專注於對你最重要的業務程式碼。通過 Custom Vision 匯出 Container 的程式碼,通過 Visual Studio Code 就可以完成 Azure Function 的程式碼編寫,測試,和部署⼯作。以下是相關的步驟。

安裝好 Azure CLI 以及 Azure Function CLI

安裝 Azure CLI

https://docs.microsoft.com/en-us/cli/azure/install-azure-cli

安裝 Azure Function CLI

https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local

1.開啟 Visual Code,安裝好 Azure Tools 外掛,並登入好相關的 Azure 賬號

2.開啟 Azure Tools 外掛下,Azure Functions 下選擇好⽂件夾,建立⼀個新的 Azure Function (我這⾥以 Python 開發環境為例)

3.把從⾃定義視覺匯出的程式碼,放到 Azure Function 的⽂件夾中,並修改 init.py

分別把匯出的 labels.txt,model.pb,predict.py 放到指定⽂件夾中

替換 __init__.py 內的⽂件

import logging
import azure.functions as func

import io
from PIL import Image
from click import format_filename
from flask import Flask, jsonify

from .predict import initialize, predict_image, predict_url

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    results = "{}"
    try:
        image_bytes = req.get_body()    
        image = Image.open(io.BytesIO(image_bytes))

        app = Flask(__name__)
        initialize()

        with app.app_context():        
            results = predict_image(image)
            score = 0.0
            name = ''
            for item in results['predictions']:
                if item['probability']>score:
                    score = item['probability']
                    name = item['tagName']
                    results = jsonify(
                        tagName = name ,
                        tagScore = score
                    )
                    results = results.get_data(as_text=True)


    except Exception as e:
        logging.info(f'exception: {e}')
        pass 

    logging.info('Image processed. Results: ' + name)
    return func.HttpResponse(results, status_code=200)

4.嘗試在本地測試

通過 Postman 進行測試

5.部署到 Azure 上

通過 Postman 進行測試

對比起傳統對模型應用的做法,你可以更簡單地利用自定義視覺的服務,生成應用場景的程式碼,並利用 Azure Function 部署作為介面給任意的應用場景呼叫,消除了很多繁瑣的工作。

▌拖拽即可的移動開發體驗 - Power Apps

現在針對業務的前端的應⽤場景很多,特別互聯⽹時代,iOS / Android 的移動應⽤就⾮常重要。過往團隊要完成跨平臺移動應⽤的開發,需要⽤到 Flutter/Xamarin/ReactNative 等。但 Power Apps 就是針對業務應⽤場景的低程式碼應⽤產品。你可以通過它結合你的業務釋出前端應⽤。Power Apps 是⾮常適合沒有程式碼基礎的⼈,你可以通過拖拽控制元件完成 UI 的開發。在業務上你可以結合你的業務邏輯和資料進⾏調⽤。接下來我們⼀起看看如何結合我們上⾯基於計算機視覺的 Azure Func 做⼀個⾮常簡單的應⽤ ( Power Apps 也⾃帶 了 AI Builder ⼯具,可以⾮常⽅便地結合之前提到的⾃定義服務完成相關⼯作,⽽這個例⼦是為了更好地說明問題 )

1.開啟 Power Apps 門戶,建立一個移動手機應用

選擇建立一個 Phone 應用

2.拖拽相關控制元件生成一個介面

3.回到 Power Apps 門戶, 建立一個自定義的連結器

image.png

這裡有個關鍵點,就是新增 Action 時因為傳輸是一個二進位制格式,所以 Request 的 Body 需要設定為 "" , 而不是一個 Json,並要設定成二進位制

4.回到剛才建立的移動手機應用,新增剛建立好的資料來源

5.點選按鈕控制元件,在公式上輸入如下指令

Set(Info, StarWarAzureFunc.UploadImage(Image1.Image));

6.選擇 Label ,在公式上輸入如下指令

Info.tagName

7.選擇執行

寫了二行程式碼,就完成了過往一堆繁瑣的工作,釋出了一個計算機視覺的應用。這縮短了很多對接的時間,對於業務人員是非常有必要的,你不僅可以完成人工智慧的操作,更可以對接更多業務資料,展現更多的商業元素。

“探店”小結

2022年的低程式碼“探店”,讓我有了更深的體會,把過往只能由開發者能做的東⻄,都可以給到任何⼈。低程式碼已經經歷了從概念,能⽤,到可⽤的階段 。“⼈⼈能程式設計”終於能實現了。低程式碼讓更多的⼈能更⾼效釋出更多的應⽤場景,結合雲端加快了企業的數字化轉型。

相關資源

Azure 資源免費申請

https://azure.com/free

Azure 學⽣資源免信⽤卡申請

https://aka.ms/studentgetazure

瞭解更多關於⾃定義計算機視覺

https://docs.microsoft.com/zh...

瞭解更多關於 Azure Functions 的相關知識

https://docs.microsoft.com/zh...

瞭解更多關於 Power Apps 的相關知識

https://docs.microsoft.com/zh...

相關文章