放荡的闷骚娇妻hnp_三级黄色影院_美女久久久久久_狠狠艹视频

快速構(gòu)建基于AWS Lambda容器鏡像的OCR應(yīng)用,aws lambda-ESG跨境

快速構(gòu)建基于AWS Lambda容器鏡像的OCR應(yīng)用,aws lambda

來源網(wǎng)絡(luò)
來源網(wǎng)絡(luò)
2022-04-26
點(diǎn)贊icon 0
查看icon 751

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

快速構(gòu)建基于AWS Lambda容器鏡像的OCR應(yīng)用,aws lambda




快速構(gòu)建基于AWS Lambda容器鏡像的OCR應(yīng)用

摘要

AWS Lambda函數(shù)現(xiàn)已支持打包和部署容器鏡像,開發(fā)者通過官方提供或自己構(gòu)建鏡像文件,可以非常方便利用現(xiàn)有的開發(fā)工具,工作流輕松構(gòu)建基于AWS Lambda的應(yīng)用程序。基于容器打包的應(yīng)用通過AWS Lambda可以實(shí)現(xiàn)更為簡(jiǎn)便的操作部署,相比EC2有著更為快速的啟動(dòng)時(shí)間,更為強(qiáng)大的并發(fā)擴(kuò)展以及高可用,同時(shí)無縫與140余種AWS服務(wù)集成。

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

前言

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

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

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

流程概覽

本文構(gòu)建的OCR應(yīng)用會(huì)利用到Python,Shell作為開發(fā)語言,PIP/Docker作為開發(fā)工具,構(gòu)建流程分成如下部分:1)軟件依賴庫的構(gòu)建,包括pillow,libtesseract編譯;2)Lambda兼容鏡像的構(gòu)建,包括RIC/RIE的安裝配置,Lambda業(yè)務(wù)代碼的打包;3)Lambda業(yè)務(wù)代碼實(shí)現(xiàn),通過簡(jiǎn)單的代碼調(diào)用生成的pytesseract庫返回圖片識(shí)別結(jié)果;4)本地調(diào)試驗(yàn)證,通過RIE實(shí)現(xiàn)本地功能調(diào)試和迭代。

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

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

#Layer code

WORKDIR/opt

COPYfrom=sharedliblayer/opt/.

方案二,利用已經(jīng)構(gòu)建好的Lambda Layer,通過curl的形式拉取到新的鏡像當(dāng)中,其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

方案三,完全從零開始的用戶可以考慮直接在容器里面構(gòu)建軟件依賴庫,其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的依賴構(gòu)建相對(duì)復(fù)雜,為了構(gòu)建流程的獨(dú)立和依賴庫的共享,我們將采用方案二,即先利用Shell和Docker構(gòu)建Lambda業(yè)務(wù)代碼調(diào)用的所有依賴,再將構(gòu)建完畢后的zip包存放到Lambda Layer中供后續(xù)Lambda鏡像構(gòu)建調(diào)用。

創(chuàng)建步驟

軟件依賴庫的構(gòu)建

首先安裝pillow,創(chuàng)建requirements文件,寫入以下內(nèi)容。

pillow

接著創(chuàng)建shell腳本(build_py37_pkgs.sh),寫入以下內(nèi)容并執(zhí)行,執(zhí)行完畢后會(huì)在相同目錄下生成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構(gòu)建完畢后,開始構(gòu)建tesseract依賴,創(chuàng)建dockerfile(Dockerfiletess4),文件內(nèi)容可以直接參考這里

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

后續(xù)省略

……

創(chuàng)建shell腳本(build_tesseract4.sh),寫入以下內(nèi)容并執(zhí)行,執(zhí)行完畢后會(huì)在相同目錄下生成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,并記錄下對(duì)應(yīng)的ARN,類似arn:awscn:lambda:cnnorthwest1:xxxxxxxx:layer:ocrTesseract:1。

Lambda兼容鏡像的構(gòu)建

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

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

創(chuàng)建entry.sh文件,用作容器在云上部署和本地調(diào)試的自動(dòng)切換,內(nèi)容如下:

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

創(chuàng)建dockerfile(dockerfilecustomtesseract),內(nèi)容摘錄如下,原文件參見這里:

安裝必要工具

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

安裝運(yùn)行時(shí)接口客戶端(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業(yè)務(wù)代碼(代碼邏輯下一小節(jié)會(huì)提到)和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]

開始構(gòu)建鏡像并推國(guó)際快遞ECR,至此OCR業(yè)務(wù)的Lambda鏡像構(gòu)建完畢

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業(yè)務(wù)代碼實(shí)現(xiàn)

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

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

  }

本地調(diào)試驗(yàn)證

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

mkdirp~/.awslambdariecurlLo~/.awslambdarie/awslambdarie

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

chmod+x~/.awslambdarie/awslambdarie

本地運(yùn)行容器并通過curl測(cè)試結(jié)果,其中helloWorld文件為顯示有hello world字樣圖片對(duì)應(yīng)的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

待功能測(cè)試成功后我們可以將該鏡像最終部署上云,無縫對(duì)接其他AWS服務(wù)實(shí)現(xiàn)更加豐富的功能。

對(duì)接其他服務(wù)

Lambda鏡像構(gòu)建完畢后,用戶可以結(jié)合API Gateway實(shí)現(xiàn)HTTP前端調(diào)用來整合我們后端的OCR能力,通過SAM(Serverless Application Model)模版快速構(gòu)建一個(gè)無服務(wù)器架構(gòu)的OCR應(yīng)用,示例模版部分內(nèi)容如下所示:

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實(shí)現(xiàn)AWS API Gateway,Lambda以及對(duì)應(yīng)IAM的編譯,調(diào)試和部署,有關(guān)SAM的具體的操作參見這里。待服務(wù)部署完畢后,用戶可通過調(diào)用類似curl–request POSTH“ContentType:image/png”–databinary“@/path/ocrimage.png”https://xxxx.executeapi.cnnorthwest1.amazonaws.com.cn/prod/upload

命令獲取OCR識(shí)別結(jié)果。

寫在最后

Lambda針對(duì)容器鏡像的支持,將無服務(wù)器化,容器這兩個(gè)熱門的技術(shù)領(lǐng)域進(jìn)行了完美結(jié)合,用戶在原有的容器開發(fā)環(huán)境基礎(chǔ)上利用無服務(wù)器化架構(gòu)的低運(yùn)維,高擴(kuò)展,高可用等特性,可以更加便捷的構(gòu)建和開發(fā)諸如機(jī)器學(xué)習(xí),圖像識(shí)別等數(shù)據(jù)密集型負(fù)載應(yīng)用。


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


特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場(chǎng)。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請(qǐng)于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。

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

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

訂閱
聯(lián)系顧問

平臺(tái)顧問

平臺(tái)顧問 平臺(tái)顧問

微信掃一掃
馬上聯(lián)系在線顧問

icon icon

小程序

微信小程序

ESG跨境小程序
手機(jī)入駐更便捷

icon icon

返回頂部

【免費(fèi)領(lǐng)取】全球跨境電商運(yùn)營(yíng)干貨 關(guān)閉
進(jìn)行中
進(jìn)行中
2025跨境電商營(yíng)銷日歷
包括傳統(tǒng)中、外重要節(jié)日及重點(diǎn)電商營(yíng)銷節(jié)點(diǎn)還對(duì)營(yíng)銷關(guān)鍵市場(chǎng)、選品輔以說明,讓你的365天安排的明明白白!
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
【平臺(tái)干貨】eMAG知識(shí)百科
涵蓋從開店到大賣6個(gè)板塊:開店、運(yùn)營(yíng)、廣告、選品、上架、物流
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
TikTok運(yùn)營(yíng)必備干貨包
包含8個(gè)TikTok最新運(yùn)營(yíng)指南(市場(chǎng)趨勢(shì)、運(yùn)營(yíng)手冊(cè)、節(jié)日攻略等),官方出品,專業(yè)全面!
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
韓國(guó)coupang平臺(tái)自注冊(cè)指南
韓國(guó)Coupang電商平臺(tái)從注冊(cè)準(zhǔn)備、提交申請(qǐng)到完成注冊(cè),開店全流程詳細(xì)指引。
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——全球合集
涵括全球100+個(gè)電商平臺(tái)的核心信息,包括平臺(tái)精煉簡(jiǎn)介、競(jìng)爭(zhēng)優(yōu)勢(shì)、熱銷品類、入駐要求以及入駐須知等關(guān)鍵內(nèi)容。
立即領(lǐng)取
進(jìn)行中
進(jìn)行中
韓國(guó)電商節(jié)日營(yíng)銷指南
10+韓國(guó)電商重要營(yíng)銷節(jié)點(diǎn)詳細(xì)解讀;2024各節(jié)日熱度選品助力引爆訂單增長(zhǎng);8大節(jié)日營(yíng)銷技巧輕松撬動(dòng)大促流量密碼。
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——?dú)W洲篇
涵蓋20+歐洲電商平臺(tái),詳細(xì)解讀優(yōu)勢(shì)、入駐條件、熱銷品等
立即領(lǐng)取