我是⼀名⼤龄开发⼈员,历经 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 三个⽂件夹,并基于你找到的图⽚对应上传到对应的⽂件夹中
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 门户, 创建一个自定义的链接器
这里有个关键点,就是添加 Action 时因为传输是一个二进制格式,所以 Request 的 Body 需要设置为 "" , 而不是一个 Json,并要设置成二进制
4.回到刚才创建的移动手机应用,添加刚创建好的数据源
5.点击按钮控件,在公式上输入如下指令
Set(Info, StarWarAzureFunc.UploadImage(Image1.Image));
6.选择 Label ,在公式上输入如下指令
Info.tagName
7.选择运行
写了二行代码,就完成了过往一堆繁琐的工作,发布了一个计算机视觉的应用。这缩短了很多对接的时间,对于业务人员是非常有必要的,你不仅可以完成人工智能的操作,更可以对接更多业务数据,展现更多的商业元素。
“探店”小结
2022年的低代码“探店”,让我有了更深的体会,把过往只能由开发者能做的东⻄,都可以给到任何⼈。低代码已经经历了从概念,能⽤,到可⽤的阶段 。“⼈⼈能编程”终于能实现了。低代码让更多的⼈能更⾼效发布更多的应⽤场景,结合云端加快了企业的数字化转型。
相关资源
Azure 资源免费申请
Azure 学⽣资源免信⽤卡申请
https://aka.ms/studentgetazure
了解更多关于⾃定义计算机视觉
https://docs.microsoft.com/zh...
了解更多关于 Azure Functions 的相关知识
https://docs.microsoft.com/zh...
了解更多关于 Power Apps 的相关知识
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。