尤物精品_gay小说高h_成人免费va视频_涩涩18网站

快速構建基于AWS Lambda容器鏡像的OCR應用,aws lambda-ESG跨境

快速構建基于AWS Lambda容器鏡像的OCR應用,aws lambda

來源網絡
來源網絡
2022-04-26
點贊icon 0
查看icon 743

快速構建基于AWS Lambda容器鏡像的OCR應用,aws lambda快速構建基于AWS Lambda容器鏡像的OCR應用摘要AWS Lambda函數現已支持打包和部署容器鏡像,開發者通過官方提供或自己構建鏡像文件,可以非常方便利用現有的開發工具,工作流輕松構建基于AWS Lambda的應用程序。基于容器打包的應用......

快速構建基于AWS Lambda容器鏡像的OCR應用,aws lambda




快速構建基于AWS Lambda容器鏡像的OCR應用

摘要

AWS Lambda函數現已支持打包和部署容器鏡像,開發者通過官方提供或自己構建鏡像文件,可以非常方便利用現有的開發工具,工作流輕松構建基于AWS Lambda的應用程序。基于容器打包的應用通過AWS Lambda可以實現更為簡便的操作部署,相比EC2有著更為快速的啟動時間,更為強大的并發擴展以及高可用,同時無縫與140余種AWS服務集成。

本文將展示如何基于自建鏡像(public.ecr.aws/bitnami/python:3.7),利用AWS官方提供的運行時接口客戶端(RIC)和運行時接口仿真器(RIE),構建運行在AWS Lambda上的OCR應用。

前言

對于機器學習,圖像處理等依賴庫構建復雜且文件較大的應用,AWS Lambda支持最大10GB的容器鏡像,開發者可以直接使用熟悉的容器開發工具(docker)在本地構建測試,并將容器鏡像推國際快遞Amazon ECR(全托管的容器注冊表),之后通過指定Amazon ECR鏡像來部署Lambda函數,免去了以往Lambda Layer構建流程,也無需受限于Lambda Layer的大小限制(250MB)。

伴隨AWS Lambda對容器鏡像支持的特性發布,AWS官方提供了一組Lambda基礎鏡像,可在Amazon ECR(gallery.ecr.aws/lambda)和Docker Hub(amazon/awslambdapython)上獲取,該基礎鏡像預裝了包括Node.js,Python,Java等語言的Lambda運行時,必要組件以及構建基礎鏡像的dockerfile。同時AWS官方還開源了運行時接口客戶端(RIC)和運行時接口仿真器(RIE),方便用戶構建同Lambda兼容的容器鏡像并進行本地測試。

OCR應用我們基于tesseract(最早由HP Lab開發并于2005年開源)實現,其中軟件依賴如pillow,libtesseract我們利用AWS進行本地安裝,或者用戶也可以選取官方鏡像public.ecr.aws/lambda編譯以盡可能保證同Lambda兼容。

流程概覽

本文構建的OCR應用會利用到Python,Shell作為開發語言,PIP/Docker作為開發工具,構建流程分成如下部分:1)軟件依賴庫的構建,包括pillow,libtesseract編譯;2)Lambda兼容鏡像的構建,包括RIC/RIE的安裝配置,Lambda業務代碼的打包;3)Lambda業務代碼實現,通過簡單的代碼調用生成的pytesseract庫返回圖片識別結果;4)本地調試驗證,通過RIE實現本地功能調試和迭代。

其中構建容器鏡像的軟件依賴庫有以下幾個途徑:方案一,直接利用已經包含軟件依賴庫的容器鏡像,其dockerfile示例如下:

FROM public.ecr.aws/myrepo/sharedliblayer:1 AS sharedliblayer

#Layer code

WORKDIR/opt

COPYfrom=sharedliblayer/opt/.

方案二,利用已經構建好的Lambda Layer,通過curl的形式拉取到新的鏡像當中,其dockerfile示例如下:

ARG AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:cnnorthwest1}

ARG AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:}

ARG AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:}

ENV AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}

ENV AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}

ENV AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}

RUN apk add awscli curl unzip

RUN mkdirp/opt

RUN curl$(aws lambda getlayerversionbyarnarn arn:aws:lambda:useast1:1234567890123:layer:sharedliblayer:1queryContent.Locationoutput text)output layer.zip

RUN unzip layer.zipd/opt

RUN rm layer.zip

方案三,完全從零開始的用戶可以考慮直接在容器里面構建軟件依賴庫,其dockerfile示例如下:

FROM python:3.8alpine AS installer

#Layer Code

COPY extensionssrc/opt/

COPY extensionssrc/requirements.txt/opt/

RUN pip installr/opt/requirements.txtt/opt/extensions/lib

FROM scratch AS base

WORKDIR/opt/extensions

COPYfrom=installer/opt/extensions.

接下來的OCR方案考慮到tesseract的依賴構建相對復雜,為了構建流程的獨立和依賴庫的共享,我們將采用方案二,即先利用Shell和Docker構建Lambda業務代碼調用的所有依賴,再將構建完畢后的zip包存放到Lambda Layer中供后續Lambda鏡像構建調用。

創建步驟

軟件依賴庫的構建

首先安裝pillow,創建requirements文件,寫入以下內容。

pillow

接著創建shell腳本(build_py37_pkgs.sh),寫入以下內容并執行,執行完畢后會在相同目錄下生成pythonlibslayer.zip文件。

sete

rmrf pythonlibslayer.zip exit 0

rmrf python/exit 0

docker runv$PWD:/var/tasklambci/lambda:buildpython3.7/bin/shcpip installr requirements.txtt python/lib/python3.7/sitepackages/;exit

chmod 777 python/

zipr pythonlibslayer.zip pythongt;/dev/null

rmrf python/

Pillow構建完畢后,開始構建tesseract依賴,創建dockerfile(Dockerfiletess4),文件內容可以直接參考這里

FROM lambci/lambdabase:build

#Proxy setup if exists

#ENV http_proxyhttp://ip:port

#ENV https_proxyhttps://ip:port

ARG LEPTONICA_VERSION=1.78.0

ARG TESSERACT_VERSION=4.1.0rc4

ARG AUTOCONF_ARCHIVE_VERSION=2017.09.28

ARG TMP_BUILD=/tmp

ARG TESSERACT=/opt/tesseract

ARG LEPTONICA=/opt/leptonica

ARG DIST=/opt/builddist

#change OCR_LANG to enable the layer for different languages

ARG OCR_LANG=chi_sim

#change TESSERACT_DATA_SUFFIX to use different datafiles(options:_best,_fastand)

ARG TESSERACT_DATA_SUFFIX=

ARG TESSERACT_DATA_VERSION=4.0.0

后續省略

……

創建shell腳本(build_tesseract4.sh),寫入以下內容并執行,執行完畢后會在相同目錄下生成tesseractlayer.zip

sete

rmrf tesseractlayer.zip exit 0

rmrf configs exit 0

rmrf tessconfigs exit 0

#Download tessconfigs folder

git clone https://github.com/tesseractocr/tessconfigs.git tesseractconfigs

mv tesseractconfigs/configs.

mv tesseractconfigs/tessconfigs.

rmrf tesseractconfigs

#Build Docker image containing Tesseract

docker buildt tess_layerf Dockerfiletess4.

#Copy Tesseract locally

CONTAINER=$(docker rund tess_layer false)

docker cp$CONTAINER:/opt/builddist layer

docker rm$CONTAINER

##Zip Tesseract

cd layer/

zipr../tesseractlayer.zip.

#Clean

cd..

rmrf layer/

rmrf tessconfigs/

rmrf configs/

將前面步驟生成的zip文件(pythonlibslayer.zip/tesseractlayer.zip)通過AWS Console或者AWS命令行的方式上傳至Lambda Layer,并記錄下對應的ARN,類似arn:awscn:lambda:cnnorthwest1:xxxxxxxx:layer:ocrTesseract:1。

Lambda兼容鏡像的構建

運行時接口客戶端(RIC)作為AWS開源項目,實現了Lambda的運行時API,包括調用事件檢索,調用響應返回,調用錯誤處理和初始化錯誤等功能實現Lambda能正確接收處理調用并返回結果。運行時接口仿真器(RIE)實際是一個輕量級的web服務器,代理Lambda的運行時和擴展API,使開發者可以在本地通過Docker,CURL進行本地測試而不用將Lambda容器鏡像部署上云。

接下來我們基于自建鏡像(public.ecr.aws/bitnami/python:3.7)構建Lambda容器的dockerfile并針對其中部分操作進行解釋。

創建entry.sh文件,用作容器在云上部署和本地調試的自動切換,內容如下:

if [ z ${AWS_LAMBDA_RUNTIME_API} ]; then

  exec /usr/local/bin/awslambdarie /usr/local/bin/python m awslambdaric $1

else

  exec /usr/local/bin/python m awslambdaric $1

fi

創建dockerfile(dockerfilecustomtesseract),內容摘錄如下,原文件參見這里:

安裝必要工具

ARG LAYER_DIR=/opt

FROM public.ecr.aws/bitnami/python:3.7 as buildimage

RUN aptget update  \

aptget install y \

g++ \

make \

cmake \

unzip \

libcurl4openssldev

RUN pip install opencvpythonheadless

RUN aptget install y libpngdev

安裝運行時接口客戶端(RIC)

RUN mkdir p ${LAYER_DIR}

RUN pip install \

    target ${LAYER_DIR} \

    awslambdaric

取前面步驟生成的Lambda Layer

ARG AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:cnnorthwest1}

ARG AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:xxxx}

ARG AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:xxxx}

ENV AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}

ENV AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}

ENV AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}

RUN aptget instally curl unzip

RUN curlhttps://awscli.amazonaws.com/awscliexelinuxx86_64.zipoawscliv2.zip

RUN unzip awscliv2.zip

RUN./aws/install

#ocrTesseract

RUN curl$(aws lambda getlayerversionbyarnarn arn:awscn:lambda:cnnorthwest1:xx:layer:ocrTesseract:3queryContent.Locationoutput text)output pythonlibslayer.zip

#COPY pythonlibslayer.zip.

RUN unzip pythonlibslayer.zipd${LAYER_DIR}

RUN rm pythonlibslayer.zip

#pythonlibslayer

RUN curl$(aws lambda getlayerversionbyarnarn arn:awscn:lambda:cnnorthwest1:xx:layer:pythonlibslayer:1queryContent.Locationoutput text)output tesseractlayer.zip

#COPY tesseractlayer.zip.

RUN unzip tesseractlayer.zipd${LAYER_DIR}

RUN rm tesseractlayer.zip

打包Lambda業務代碼(代碼邏輯下一小節會提到)和entry.sh

#Multistage build:grab a fresh copy of the base image,use custom image instead of official one

FROM public.ecr.aws/bitnami/python:3.7

#Include global arg in this stage of the build

ARG LAYER_DIR

#Copy in the build image dependencies

WORKDIR${LAYER_DIR}

COPYfrom=buildimage${LAYER_DIR}.

COPY app.py.

COPY entry.sh/

RUN chmod 755/entry.sh

ENV LD_LIBRARY_PATH=/opt:/opt/lib:${LD_LIBRARY_PATH}

ENV PATH=/opt:/opt/bin:${PATH}

#Production env

ENTRYPOINT[/entry.sh]

開始構建鏡像并推國際快遞ECR,至此OCR業務的Lambda鏡像構建完畢

docker buildt locallambdapython3.8customocrbuildarg AWS_DEFAULT_REGION=cnnorthwest1buildarg AWS_ACCESS_KEY_ID=xxbuildarg AWS_SECRET_ACCESS_KEY=xxf dockerfilecustomtesseract.

docker tag locallambdapython3.8customocr:latest xx.dkr.ecr.cnnorthwest1.amazonaws.com.cn/locallambdapython3.8customocr

aws ecr getloginpasswordregion cnnorthwest1docker loginusername AWSpasswordstdin xx.dkr.ecr.cnnorthwest1.amazonaws.com.cn

docker push xx.dkr.ecr.cnnorthwest1.amazonaws.com.cn/locallambdapython3.8customocr:latest

Lambda業務代碼實現

代碼的調用邏輯如下,handler接收傳入的圖片文件(u64編碼)并調用pytesseract實現圖片中文字的識別并返回。

import sys

import os

sys.path.append(/opt/python/lib/python3.7/sitepackages)

# sys.path.append(/opt/python/lib/python3.7/sitepackages/pytesseract)

# sys.path.append(/opt/python/lib/python3.7/sitepackages/PIL)

# sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

import base64

import pytesseract

import cv2

def write_to_file(save_path, data):

with open(save_path, wb) as f:

  f.write(base64.b64decode(data))

def handler(event, context=None):

  write_to_file(/tmp/photo.jpg, event[body])

  img = cv2.imread(/tmp/photo.jpg)

  ocr_text = pytesseract.image_to_string(img, config = eng)

  # Return the result data in json format

  return {

   statusCode: 200,

   body: ocr_text

  }

本地調試驗證

本地安裝RIE,盡量減少Lambda鏡像需要安裝的文件

mkdirp~/.awslambdariecurlLo~/.awslambdarie/awslambdarie

https://github.com/aws/awslambdaruntimeinterfaceemulator/releases/latest/download/awslambdarie

chmod+x~/.awslambdarie/awslambdarie

本地運行容器并通過curl測試結果,其中helloWorld文件為顯示有hello world字樣圖片對應的u64編碼文件,成功的話我們可以看到輸出的hello world。

docker rundv~/.awslambdarie:/awslambdap 9000:8080entrypoint/awslambda/awslambdarie locallambdapython3.8customocr:latest/usr/local/bin/pythonm awslambdaric app.handler

curlX POSThttp://localhost:9000/20150331/functions/function/invocationsd@helloWorld

待功能測試成功后我們可以將該鏡像最終部署上云,無縫對接其他AWS服務實現更加豐富的功能。

對接其他服務

Lambda鏡像構建完畢后,用戶可以結合API Gateway實現HTTP前端調用來整合我們后端的OCR能力,通過SAM(Serverless Application Model)模版快速構建一個無服務器架構的OCR應用,示例模版部分內容如下所示:

Resources:

HelloWorldFunction:

  Type: AWS::Serverless::Function

  Properties:

   PackageType: Image

   Events:

    HelloWorld:

     Type: Api

     Properties:

      Path: /hello

      Method: get

   ImageUrl: ‘xxxx.dkr.ecr.cnnorthwest1.amazonaws.com.cn/locallambdapython3.8custom’

ImageConfig:

   Command:

     app.handler

   EntryPoint:

     /entry.sh

   WorkingDirectory: /opt

  Metadata:

   DockerTag: python3.xv1

   DockerContext: ./helloworld

   Dockerfile: Dockerfile

之后通過SAM CLI實現AWS API Gateway,Lambda以及對應IAM的編譯,調試和部署,有關SAM的具體的操作參見這里。待服務部署完畢后,用戶可通過調用類似curl–request POSTH“ContentType:image/png”–databinary“@/path/ocrimage.png”https://xxxx.executeapi.cnnorthwest1.amazonaws.com.cn/prod/upload

命令獲取OCR識別結果。

寫在最后

Lambda針對容器鏡像的支持,將無服務器化,容器這兩個熱門的技術領域進行了完美結合,用戶在原有的容器開發環境基礎上利用無服務器化架構的低運維,高擴展,高可用等特性,可以更加便捷的構建和開發諸如機器學習,圖像識別等數據密集型負載應用。


文章推薦
領英常見問題如何提高曝光量
空中云匯如何為入境中國的人民幣付款提供訂單信息
聚集用戶洞察,用戶洞察體系
跨境電商系列  高效監控腳本行為,跨境電商寫腳本自動采集


特別聲明:以上文章內容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內容、版權或其它問題請于作品發表后的30日內與ESG跨境電商聯系。

搜索 放大鏡
韓國平臺交流群
加入
韓國平臺交流群
掃碼進群
歐洲多平臺交流群
加入
歐洲多平臺交流群
掃碼進群
美國賣家交流群
加入
美國賣家交流群
掃碼進群
ESG跨境專屬福利分享群
加入
ESG跨境專屬福利分享群
掃碼進群
拉美電商交流群
加入
拉美電商交流群
掃碼進群
亞馬遜跨境增長交流群
加入
亞馬遜跨境增長交流群
掃碼進群
亞馬遜跨境增長交流群
加入
亞馬遜跨境增長交流群
掃碼進群
拉美電商交流群
加入
拉美電商交流群
掃碼進群
ESG獨家招商-PHH GROUP賣家交流群
加入
ESG獨家招商-PHH GROUP賣家交流群
掃碼進群
2025跨境電商營銷日歷
《2024年全球消費趨勢白皮書——美國篇》
《2024TikTok出海達人營銷白皮書》
《Coupang自注冊指南》
《eMAG知識百科》
《TikTok官方運營干貨合集》
《韓國節日營銷指南》
《開店大全-全球合集》
《TikTok綜合運營手冊》
《TikTok短視頻運營手冊》
通過ESG入駐平臺,您將解鎖
綠色通道,更高的入駐成功率
專業1v1客戶經理服務
運營實操指導
運營提效資源福利
平臺官方專屬優惠

立即登記,定期獲得更多資訊

訂閱
聯系顧問

平臺顧問

平臺顧問 平臺顧問

微信掃一掃
馬上聯系在線顧問

icon icon

小程序

微信小程序

ESG跨境小程序
手機入駐更便捷

icon icon

返回頂部