amazon-web-services - 无法在 AWS Lambda 中使用 OpenCV-Python
问题描述
我一直在尝试将 OpenCV 放入 S3 存储桶,然后将其分配给 lambda 层。
网上关于这个的很少,我所看到的没有奏效。
我已经设法在亚马逊 linux 环境中使用 docker,并按照本教程进行操作。https://aws.amazon.com/premiumsupport/knowledge-center/lambda-layer-simulated-docker/
我在 requirements.txt 文件中添加了 setuptools、wheel 和 opencv-python==4.4.0.42。
setuptools 和 wheel 因为较早的错误,建议在需要更新时将它们包括在内,即使我已经更新了它们。但它适用于他们,所以谁知道。
创建了我已压缩并放入 S3 存储桶的 docker 映像。
当我运行它时,我不断收到{“errorMessage”:“无法导入模块'lambda_function':libGL.so.1:无法打开共享对象文件:没有这样的文件或目录”,“errorType”:“Runtime.ImportModuleError”}尽管。
我似乎无法弄清楚出了什么问题。
有任何想法吗?
解决方案
您将需要向您的层添加一堆依赖项。以下是我在 lambda 上用于 opencv_python 的步骤。
1.在本地工作站上(终端窗口1)
mkdir /tmp/mylayer && cd /tmp/mylayer
echo opencv-python==4.4.0.42 > ./requirements.txt
2.在本地工作站(终端窗口2)
docker run -it -v /tmp/mylayer:/mylayer lambci/lambda:build-python3.8 bash
上面的命令会将您放入 docker 容器中。
容器内部:
cd /mylayer
pip install --no-deps -t python/lib/python3.8/site-packages/ -r requirements.txt
yum install -y mesa-libGL
cp -v /usr/lib64/libGL.so.1 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libGL.so.1.7.0 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libgthread-2.0.so.0 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libgthread-2.0.so.0 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libglib-2.0.so.0 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libGLX.so.0 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libX11.so.6 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libXext.so.6 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libGLdispatch.so.0 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libGLESv1_CM.so.1.2.0 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libGLX_mesa.so.0.0.0 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libGLESv2.so.2.1.0 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libxcb.so.1 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libXau.so.6 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /usr/lib64/libXau.so.6 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
cp -v /lib64/libGLdispatch.so.0.0.0 /mylayer/python/lib/python3.8/site-packages/opencv_python.libs/
3.再次在本地工作站上(终端窗口1)
python
将文件夹打包成mylayer.zip
.
zip -r -9 mylayer.zip python
在 AWS 控制台中
mylayer.zip
在 AWS 控制台中创建 lambda 层。不要忘记指定Compatible runtimes
topython3.8
。将 AWS 提供的 SciPy 层
AWSLambda-Python38-SciPy1x
和您自己的带有 cv2 的层添加到您的函数中。
所以你的函数中有两层。
- 使用以下 lambda 函数在 lambda 中执行层的基本测试:
import cv2
def lambda_handler(event, context):
print(dir(csv))
该函数正确执行(显示部分打印输出)。
slation3D', 'exp', 'extractChannel', 'fastAtan2', 'fastNlMeansDenoising', 'fastNlMeansDenoisingColored', 'fastNlMeansDenoisingColoredMulti', 'fastNlMeansDenoisingMulti', 'fillConvexPoly', 'fillPoly', 'filter2D', 'filterHomographyDecompByVisibleRefpoints', 'filterSpeckles', 'find4QuadCornerSubpix', 'findChessboardCorners', 'findChessboardCornersSB', 'findChessboardCornersSBWithMeta', 'findCirclesGrid', 'findContours', 'findEssentialMat', 'findFundamentalMat', 'findHomography', 'findNonZero', 'findTransformECC', 'fisheye', 'fitEllipse', 'fitEllipseAMS', 'fitEllipseDirect', 'fitLine', 'flann', 'flann_Index', 'flip', 'floodFill', 'gemm', 'getAffineTransform', 'getBuildInformation', 'getCPUFeaturesLine', 'getCPUTickCount', 'getDefaultNewCameraMatrix', 'getDerivKernels', 'getFontScaleFromHeight', 'getGaborKernel', 'getGaussianKernel', 'getHardwareFeatureName', 'getNumThreads', 'g
推荐阅读
- javascript - 脚本请求和 xhr 请求有什么区别?
- sql - 如何在 SQL 中使用过去 7 天的“groupby”而不是“真正的一周”
- amazon-web-services - ECR 生命周期任务标签前缀匹配是否区分大小写?
- c# - C# Windows 窗体应用程序 CRUD 未更新记录
- sql - 如何第一次从表中获取随机行,然后返回相同的行?
- json - 在 Neutralino 应用程序中读取外部 json 文件
- jquery - 在 Jquery Bootstrap4 Datatable 中保持搜索框完整的同时仅删除所有表列的排序
- excel - Excel:基于颜色和内容的操作
- r - 如何删除usmap图中的边框
- antd - Ant Design 库中 Transfer 的自定义页眉控件/页脚