在我最近的一个有趣的项目中,我一直在测试CAPM和SAP Cloud Machine Learning(ML)SDK,以创建一个人脸识别应用程序:https://blogs.sap.com/2019/05/28/face-recognition-app/
此ML SDK非常好地集成到SAP云平台Cloud Foundry(CF)中。它不需要目的地,云服务器是,并且可以访问所有的mlapi端点。它也不需要额外的身份验证请求。真值得一用!
这里有一句话,ML SDK只适用于Java。这意味着您需要将CAPM与Java一起用于服务层。不是什么大问题,但是NodeJS现在很流行?
在这个博客里,我想分享一下我在人脸识别应用程序中使用这个ML SDK和CAPM的经验。为此,我将展示如何使用CAPM创建一个使用这个mlsdk的新服务。我将使用mlsdk在图像上找到一张脸,并将其转换为向量。向量可以用来比较人脸识别应用程序中的人脸!
我使用SAP Web IDE是因为它使CAPM和ML SDK一起测试更容易。
首先,从下面的模板"SAP云平台业务应用程序"生成一个项目。(在Cloud Foundry环境中过滤将更容易找到正确的模板。)
填写项目名称:
填写mta的应用id和版本,但也要选择"使用HTML5应用程序存储库"。最后一个检查将把approver和appdeployer包含到您的项目中。
向导的这一步包含服务的配置。在这种情况下,应该使用java来使用mlsdk。(目前在NodeJS中还不可用)。填写名称空间并选择HANA数据库的最新版本。(同样,在我发布这篇文章的时候,淘客小程序,只有HANA可用作CF应用程序的数据库)
同时启用"启用用户身份验证",当我们要部署到CF时,我们将需要它。这将已经在应用程序中包含一些配置甲基丙烯酸甲酯对我们来说
项目结构如下所示,别忘了启用隐藏文件:
用示例代码运行这个项目可能会出现这样的错误:
如果在您的版本中也发生这种情况,那么您需要甲基丙烯酸甲酯并将"uaa"参数"服务计划"由"默认"改为"应用:
打开"db"模块,打开数据-型号.cds. 这是定义数据库的数据模型的地方。实体的名称将用作表的名称,所有属性将表示一列。
在本例中,实体将被命名为"Faces",因为它将用于在图像上存储人脸的矢量。与矢量一起,它将存储名称和ID。image属性将不用于此博客,但可用于存储人脸图像的路径。
代码片段:
保存数据-型号.cds将制作CD并更新csn.json文件服务模块中的文件。如果没有自动运行"cds构建",可以手动触发:
数据库层已经完成?
让我们转到服务层,将我们的数据库实体作为API公开。打开"cat-服务.cds"并用数据库层中使用的名称更改示例代码。更改名称空间和实体名称。
不要忘记删除"@readonly",因为此服务还应用于创建面,而不仅仅用于读取。
代码段:
好的,服务已准备好进行测试。首先构建java服务:
在运行之前,请检查您的CF帐户是否仍然有效并已配置:
右键单击您的项目,然后单击项目设置或在SAP Web IDE workspace的设置中
在构建之后,您可以将其作为java应用程序运行
我不知道为什么,但是第一次它失败了。我第二次试着运行这个服务时,它起了作用。当它运行时,您将在控制台中得到一个url来测试您的服务:
这将为您提供一个端点:
时间来实现机器学习逻辑,将图像上的人脸转换为向量。
这个逻辑需要在将其保存到数据库之前实现。该服务将接收一个图像的base64字符串,该字符串需要在保存到数据库之前进行转换。为此,CAP可以在每次OData请求之前使用钩子函数。
首先为这些钩子函数生成一个文件,用云服务器,并提供一些示例代码:
在下一步中,Web IDE需要知道将要增强的实体。
下一步并完成,这将为每个可能的请求生成一个带有示例代码的Java类
该代码使用对s4hana sdk的依赖关系来使用机器学习,另一个用于定义图像的mimetype。这些依赖项需要在中定义pom.xml文件
构建srv模块将下载依赖项。
在与文件相同的包中添加了一个新的Java类,带有钩子函数,用于获取基于mimetype的扩展名。(在线找到此代码)
调用此类"MimeTypesExtensions"
此Java类的完整代码可在以下位置找到:https://github.com/lemaiwo/MyCAPMAppWithML/blob/master/srv/src/main/java/be/wl/handlers/catalogservice/MimeTypesExtensions.java
另一个Java类"MachineLearningService",物联网展,个人云服务器,它将用于与机器学习:
这个类有几个与机器学习服务通信所需的功能。完整代码可在此处找到:https://github.com/lemaiwo/MyCAPMAppWithML/blob/master/srv/src/main/java/be/wl/handlers/catalogservice/MachineLearningService.java
首先,"base64ToBytes"将图像的base64字符串转换为字节数组。
"getFilePost"将使用上一个函数与图片发送到ML SDK:
此函数"getFaceVector"将请求发送到ML服务并返回人脸的矢量。
返回生成的类"FacesHookHandler"中,操作传入数据的代码,然后将其保存到数据库中。
CAP将调用"beforeCreateFaces"钩子函数来创建一个实体的新对象"Faces"。此函数将包含调用机器学习服务类并在将结果保存到HANA之前更新结果的实现。
此行正在运行魔术,以便在保存请求之前操作来自请求的数据。
不要忘记文件顶部的java导入。
如果如果没有bug,那么构建会成功吗?
服务准备好用机器学习逻辑进行测试。首先需要重新启动服务。否则将不考虑更改。
SAP Web IDE在控制台中有一个停止和启动按钮,可用于重新启动应用程序:
现在可以测试服务。因为这个应用还没有ui,所以它需要用另一个工具如postman进行测试。
使用你在控制台中看到的url并在postman中运行:
服务上的get请求工作!但一个职位还不起作用。配置缺少对机器学习服务资源的引用。这需要在mta.yaml公司文件:
在srv模块的requires部分添加"ml service"
在底部定义ml service
现在上传一张图片,就可以测试服务了。仍然没有ui,因此需要手动将图像转换为base64字符串。这可以通过以下网站完成:
https://www.base64-image.de/
上传詹姆斯·邦德的图片为例:
将结果复制到剪贴板
将postman中的请求类型改为"POST",并添加如下正文:
如果一切顺利,postman将向您展示以下示例:
我们刚刚将CAP与机器学习SDK结合起来,将base64图像字符串转换为向量并保存到HANA数据库中。
下一步?添加UI模块
GitHub提供完整项目:https://github.com/lemaiwo/MyCAPMAppWithML