Không thể sử dụng OpenCV-Python trong AWS Lambda
Tôi đã cố gắng đưa OpenCV vào một thùng S3 và sau đó gán nó vào một lớp lambda.
Có rất ít thông tin về điều này trên mạng và những gì tôi thấy đã không hoạt động.
Tôi đã quản lý để sử dụng docker với môi trường linux amazon và đã làm theo hướng dẫn này. https://aws.amazon.com/premiumsupport/knowledge-center/lambda-layer-simulated-docker/
Tôi đã thêm setuptools, wheel và opencv-python == 4.4.0.42 vào tệp tin request.txt.
setuptools và bánh xe do lỗi trước đó trong đó khuyến nghị đưa chúng vào khi chúng cần cập nhật, mặc dù tôi đã cập nhật chúng. Nhưng nó hoạt động với họ, vì vậy ai biết được.
Đã tạo hình ảnh docker mà tôi đã nén và đặt trong thùng S3.
Tôi tiếp tục nhận được {"errorMessage": "Không thể nhập mô-đun 'lambda_ Chức năng': libGL.so.1: không thể mở tệp đối tượng được chia sẻ: Không có tệp hoặc thư mục như vậy", "errorType": "Runtime.ImportModuleError"} khi tôi chạy nó Tuy nhiên.
Tôi dường như không thể tìm ra điều gì là sai.
Có ý kiến gì không?
Trả lời
Bạn sẽ cần thêm một loạt các phụ thuộc vào lớp của mình. Dưới đây là các bước tôi đã sử dụng cho opencv_python trên lambda.
1. Trên máy trạm cục bộ (cửa sổ đầu cuối 1)
mkdir /tmp/mylayer && cd /tmp/mylayer
echo opencv-python==4.4.0.42 > ./requirements.txt
2. Trên máy trạm cục bộ (cửa sổ đầu cuối 2)
docker run -it -v /tmp/mylayer:/mylayer lambci/lambda:build-python3.8 bash
Lệnh trên sẽ đưa bạn vào vùng chứa docker.
Bên trong hộp đựng:
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. Trên máy trạm cục bộ một lần nữa (cửa sổ đầu cuối 1)
Đóng gói pythonthư mục vào mylayer.zip.
zip -r -9 mylayer.zip python
Trong bảng điều khiển AWS
Tạo lớp lambda dựa trên
mylayer.zipBảng điều khiển AWS. Đừng quên chỉ địnhCompatible runtimeschopython3.8.Thêm AWS cung cấp lớp SciPy
AWSLambda-Python38-SciPy1xvà lớp của riêng bạn với cv2 vào chức năng của bạn.
Vì vậy, bạn sẽ có hai lớp trong chức năng của mình.
- Thực hiện kiểm tra cơ bản của lớp trong lambda bằng cách sử dụng hàm lambda sau:
import cv2
def lambda_handler(event, context):
print(dir(csv))
Hàm thực thi chính xác (hiển thị một phần bản in).
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