利用AWS内的S3及Lambda上传图片及辨识文字

目录

系统架构功能说明操作图&流程说明参考资料

系统架构

http://img2.58codes.com/2024/201668640AnmyG1hcd.png


功能说明

上传图片至S3辨识图片内的文字,并框出辨识到的文字

操作图&流程说明

创建S3储存桶

在搜寻栏输入S3,前往该页面
http://img2.58codes.com/2024/20166864OUVmUAD2TE.png

点击建立储存贮体
http://img2.58codes.com/2024/20166864dm4XEtsGM7.png

命名储存贮体
http://img2.58codes.com/2024/201668640imC5rJglI.png

启用ACL
http://img2.58codes.com/2024/20166864Lu6X7O5LxZ.png

解除存取权限的封锁
http://img2.58codes.com/2024/20166864MvYHWhnzFa.png
http://img2.58codes.com/2024/20166864RWeqEqOlNT.png

接着点击"建立储存贮体",便可看到刚刚创建的储存贮体
http://img2.58codes.com/2024/20166864Sc97K2LLLK.png
http://img2.58codes.com/2024/20166864VhVBImA8Bp.png

上传图片至刚创建的储存贮体内

进入储存贮体内
http://img2.58codes.com/2024/20166864baEYCODfW9.png

点击上传,选择图片并修改许可权后上传,成功后即可看到储存贮体内存在刚上传的图片
http://img2.58codes.com/2024/20166864VAevU369M3.png
http://img2.58codes.com/2024/201668641cPLZoXnz4.png
http://img2.58codes.com/2024/2016686451Pe3ReNSv.png
http://img2.58codes.com/2024/20166864FGZWKEbsFX.png
http://img2.58codes.com/2024/20166864u2YHhenSj6.jpg

用同样的步骤上传opencv函式库(为了之后Lambda能使用opencv)
http://img2.58codes.com/2024/20166864bb2kLniylF.png
http://img2.58codes.com/2024/20166864zy7HTyI7K6.png

建立Lambda

在搜寻栏里输入Lambda,前往该页面
http://img2.58codes.com/2024/20166864rqCBVLKvoB.png

点击建立函式
http://img2.58codes.com/2024/20166864gRq6ptQFrM.png

命名此函式,并修改要使用的程式语言(对应到opencv的版本)
http://img2.58codes.com/2024/20166864SgQ1W6oasx.png

修改执行角色为LabRole
http://img2.58codes.com/2024/20166864CFzxvoDBsZ.png

完成上述步骤后点击建立函式,成功后便可看到刚建立的函式
http://img2.58codes.com/2024/201668645jI7yJaAo1.png
http://img2.58codes.com/2024/20166864FMJfmLKC7K.png

在Lambda上实现辨识文字并框选的功能将程式码贴到红色框框标式的区域内,并按"Deploy"
import jsonimport base64import boto3from datetime import datetimeimport numpy as npimport cv2import osimport timedef lambda_handler(event, context):    s3 = boto3.client('s3')        #bucket_name要改为自己储存贮体的名称    #file_name则是要从储存贮体拿来辨识的图片名称    bucket_name = 'detectword'    file_name = "origin.png"           img_data = s3.get_object(Bucket=bucket_name, Key=file_name)    image_data = img_data['Body'].read()            nparr = np.frombuffer(image_data, np.uint8)    image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)                print('Bucket name: {}'.format(bucket_name))    print('Upload file name: {}'.format(file_name))    #get current unix time    created = int(datetime.now().timestamp())    #OCR    client=boto3.client('rekognition')    response=client.detect_text(Image={'S3Object':{'Bucket':bucket_name,'Name':file_name}})    print(json.dumps(response))                    # 获取文本区域的信息    text_detections = response["TextDetections"]    # 绘制矩形    for detection in text_detections:        # 检查是否检测到了文本        if "Geometry" in detection and "BoundingBox" in detection["Geometry"]:            box = detection["Geometry"]["BoundingBox"]            x = int(box["Left"] * image.shape[1])            y = int(box["Top"] * image.shape[0])            w = int(box["Width"] * image.shape[1])            h = int(box["Height"] * image.shape[0])            cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)        cv2.imwrite('/tmp/image.jpg', image)        s3.upload_file('/tmp/image.jpg', bucket_name, f"result.png")        return {        'statusCode': 200,        'body': json.dumps('Hello from Lambda!')    }

http://img2.58codes.com/2024/20166864YmdK1y02BT.png
http://img2.58codes.com/2024/20166864pouEr5Yreb.png

接着,先回到S3创建的储存贮体内複製opencv的物件URL,在下一步会用到
http://img2.58codes.com/2024/2016686461kMoy9kvH.png
http://img2.58codes.com/2024/201668642JoiNiV4kA.png

完成后回到Lambda,点击左上角的这个图标
http://img2.58codes.com/2024/201668642lMwQWbqt3.png

点击"层",并开始建立Layer
http://img2.58codes.com/2024/20166864nQdG6Im2RO.png
http://img2.58codes.com/2024/20166864M3UELZzOKn.png
http://img2.58codes.com/2024/201668640ihob3JIaa.png

建立成功后回到Lambda的程式设计页面
http://img2.58codes.com/2024/20166864M0ErLXuYJk.png

将页面滑到最下面,开始将刚刚创立的Layer新增到此函式
http://img2.58codes.com/2024/20166864IN0iK9DUOl.png

点击"自订Layer",并选择刚刚建立的Layer和版本,接着点击"新增"
http://img2.58codes.com/2024/201668645h9kv9ZijN.png

完成后会回到程式设计页面,接着点击"TEST"建立测试用事件
http://img2.58codes.com/2024/20166864Cnv01vIfUA.png
http://img2.58codes.com/2024/20166864PfpDsop5KP.png

接着,为了预防程式运作时长过久而报错,要先修改程式运作时间
http://img2.58codes.com/2024/20166864OGW0YeegFc.png
http://img2.58codes.com/2024/20166864P5trUYkWJD.png
http://img2.58codes.com/2024/20166864G24j6JctoH.png

完成后回到"程式码",点击"TEST",若成功运作则会回传'Hello from Lambda!',否则会出现error
http://img2.58codes.com/2024/20166864xqSHVMYY7E.png
http://img2.58codes.com/2024/201668646SzJSxgjAG.png

下载辨识后的结果图

若成功运作的话,回到S3的储存贮体内会看到处理后的图(result.png)
http://img2.58codes.com/2024/20166864FyaismbFR9.png

点进去后要先到"许可"编辑物件的读取权,修改好后储存变更(若没修改则无法下载结果图)
http://img2.58codes.com/2024/20166864SQ3c3b7vQj.png
http://img2.58codes.com/2024/20166864mW7LPCuWu5.png

接着点击"物件URL",便能下载结果图
http://img2.58codes.com/2024/20166864XijQmOyv7h.png
http://img2.58codes.com/2024/20166864Vtf6iprk9A.jpg


参考资料

文字辨识: https://aws.amazon.com/tw/rekognition/
Lambda: https://docs.aws.amazon.com/zh_tw/lambda/latest/dg/lambda-python.html
框出文字: https://blog.csdn.net/weixin_38145317/article/details/89497616


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章