发布于: Nov 30, 2022

【概要】整个方案采用无服务器架构,无需客户运维管理,按请求计费,降低了服务成本。最后借助于 Cloudformation 可在全球区域进行部署与迁移,增加了速度和灵活性。

一、创建临时文件桶

  • 登陆控制台,选择日本区域
  • 查找 S3 服务
  • 创建存放临时文件的 S3 桶

二、上传相关临时文件 

  • 下载 python-pillow 包

在后续验证环节需要通过该包对图片数据进行处理,Lambda 默认自带的环境中没有提供该包,需要我们上传构建 Lambda layer

  • 打开刚才创建的桶,默认参数上传包文件

三、通过 Cloudformation 实现一键部署

  • 下载 yaml 文件
  • 搜索 Cloudformation 服务,点击创建堆栈
  • 选择上传模版文件并选择下载的 yaml 文件
  • 输入堆栈名称,以及临时桶的名称、python-pillow 包名称,点击下一步
  • 等待部署完成(1~2 分钟),点击输出选项卡记 apiGatewayInvokeURL

四、功能验证

  • 下载测试照片文件
  • 将压缩包解压
  • 在创建好的 S3 桶(前缀为堆栈名称)中创建文件夹,如 music
  • 上传照片到创建好的文件夹中
  • 将下述内容保存成脚本文件,如 script.py
import requests
import json
import sys
import base64
import os

class DateEncoder(json.JSONEncoder ):  
    def default(self, obj):  
        if isinstance(obj, bytes):  
            return obj.__str__()  
        return json.JSONEncoder.default(self, obj)  

class img:
    def __init__(self,image,collection_id,threshold):
        self.__img = self.__check(image)
        self.__collection_id = collection_id
        self.__threshold = threshold

    def request(self,url):
        data = {"threshold":self.__threshold,"collection_id":self.__collection_id,"img_type":self.__type,"img":self.__img}
        return requests.post(url,json.dumps(data,cls=DateEncoder)).content

    def __check(self,image):
        if image.endswith('.jpg') or image.endswith('.png') or image.endswith('.jpeg'):
            self.__type = image.split('.')[-1]
            if os.path.isfile(image):
                img_file = open(image,'rb')
                img_b64encode = base64.b64encode(img_file.read())
                img_file.close()
                return img_b64encode.decode()
            else:
                print("Request file does not exist")
                sys.exit(1)
        else:
            print("Request has invalid image format")
            sys.exit(1)

if __name__ == "__main__":
    if len(sys.argv) == 3 and '.jpg' in sys.argv[1] and 'amazonaws.com/beta/img' in sys.argv[2]:
        new_img = img(sys.argv[1],'music',70)
        print(json.loads(new_img.request(sys.argv[2])))
    else:
        print("Please input <img path> and <api path>")
        print("For example:\n\tpython script.py /home/test.jpg https://iyw7v9sca6.execute-api.ap-northeast-1.amazonaws.com/beta/img")
        sys.exit(1)
  • 按如下方式运行脚本获取结果

python script.py <img> <api path>

其中:

<img>为测试照片地址

<api path>为 cloudformation 输出中的 apiGatewayInvokeURL

例如:

python script.py /home/test.jpg https://iyw7v9sca6.execute-api.ap-northeast-1.amazonaws.com/beta/img

一、删除基础架构

  • 搜索 cloudformation 服务,选择堆栈后点击删除

二、删除 Amazon Rekognition 中的数据

  • 创建访问密钥

参考:https://docs.amazonaws.cn/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration

二、删除 Amazon Rekognition 中的数据

  • 安装 Amazon CLI 工具并配置

安装参考:https://aws.amazon.com/cn/cli/

  • 删除 Amazon Rekognition 中的数据

替换 <> 标注部分

music 为 S3 中创建的文件夹,如文档中使用的 music

ap-northeast-1 为选择的区域,如文档中使用的日本区域

aws rekognition delete-collection –collection-id<music>   –region

<ap-northeast-1>

 

方案中仅仅用到了 Rekognition 的一小部分功能,客户可根据自己的需求做定制开发新功能,包括视频面孔搜索分析、名人识别、物体和场景检测等等,文档中部分参数和返回值做了处理,客户也可以根据需要做一些深度集成。此外整个方案采用无服务器架构,无需客户运维管理,按请求计费,降低了服务成本。最后借助于 Cloudformation 可在全球区域进行部署与迁移,增加了速度和灵活性。

 

相关文章