AWS Lambda'da OpenCV-Python kullanılamaz
OpenCV'yi bir S3 kovasına almaya ve ardından onu bir lambda katmanına atamaya çalışıyorum.
İnternette bununla ilgili çok az şey var ve gördüklerim işe yaramadı.
Docker'ı amazon linux ortamında kullanmayı başardım ve bu öğreticiyi takip ettim. https://aws.amazon.com/premiumsupport/knowledge-center/lambda-layer-simulated-docker/
Gereksinimleri.txt dosyasına setuptools, wheel ve opencv-python == 4.4.0.42 ekledim.
Kurulum araçları ve tekerlek, daha önceki bir hata nedeniyle, tavsiyenin bunları güncellememe rağmen, bunların güncellenmesi gerektiğinden dahil edilmesidir. Ama onlarla çalışıyor, kim bilir.
Sıkıştırdığım ve bir S3 kovasına koyduğum docker görüntüsünü oluşturdum.
Çalıştırdığımda {"errorMessage": "'lambda_function' modülü içe aktarılamıyor: libGL.so.1: paylaşılan nesne dosyası açılamıyor: Böyle bir dosya veya dizin yok", "errorType": "Runtime.ImportModuleError"} alıyorum rağmen.
Neyin yanlış olduğunu anlayamıyorum.
Herhangi bir fikir?
Yanıtlar
Katmanınıza bir dizi bağımlılık eklemeniz gerekecek. Lambda üzerinde opencv_python için kullandığım adımlar aşağıdadır.
1. Yerel iş istasyonunda (terminal penceresi 1)
mkdir /tmp/mylayer && cd /tmp/mylayer
echo opencv-python==4.4.0.42 > ./requirements.txt
2. Yerel iş istasyonunda (terminal penceresi 2)
docker run -it -v /tmp/mylayer:/mylayer lambci/lambda:build-python3.8 bash
Yukarıdaki komut sizi docker konteynerine koyacaktır.
Kabın içinde:
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. Yerel iş istasyonunda tekrar (terminal penceresi 1)
pythonKlasörü içine paketleyin mylayer.zip.
zip -r -9 mylayer.zip python
AWS konsolunda
mylayer.zipAWS Konsolu'na dayalı olarak lambda katmanı oluşturun . Belirtmek unutmayınCompatible runtimesetmekpython3.8.AWS'yi, SciPy katmanını
AWSLambda-Python38-SciPy1xve kendi katmanınızı cv2 ile işlevinize ekleyin.
Böylece işlevinizde iki katmana sahip olacaksınız .
- Aşağıdaki lambda işlevini kullanarak katmanın lambda'da temel testini gerçekleştirin:
import cv2
def lambda_handler(event, context):
print(dir(csv))
İşlev doğru şekilde yürütülür (kısmi çıktı gösterilmiştir).
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