Tidak dapat menggunakan OpenCV-Python di AWS Lambda
Saya telah mencoba memasukkan OpenCV ke dalam ember S3 dan kemudian menetapkannya ke lapisan lambda.
Hanya ada sedikit tentang ini secara online dan apa yang saya lihat tidak berhasil.
Saya telah berhasil menggunakan buruh pelabuhan dengan lingkungan linux amazon, dan mengikuti tutorial ini. https://aws.amazon.com/premiumsupport/knowledge-center/lambda-layer-simulated-docker/
Saya telah menambahkan setuptools, wheel dan opencv-python == 4.4.0.42 ke file Requirement.txt.
setuptools dan roda karena kesalahan sebelumnya di mana rekomendasinya adalah memasukkan ini karena mereka perlu memperbarui, meskipun saya telah memperbaruinya. Tapi itu berhasil dengan mereka, jadi siapa tahu.
Membuat gambar buruh pelabuhan yang telah saya zip dan dimasukkan ke dalam ember S3.
Saya terus mendapatkan {"errorMessage": "Tidak dapat mengimpor modul 'lambda_function': libGL.so.1: tidak dapat membuka file objek bersama: Tidak ada file atau direktori seperti itu", "errorType": "Runtime.ImportModuleError"} saat saya menjalankannya meskipun.
Saya tidak bisa menemukan apa yang salah.
Ada ide?
Jawaban
Anda perlu menambahkan banyak dependensi ke lapisan Anda. Berikut adalah langkah-langkah yang saya gunakan untuk opencv_python di lambda.
1. Di stasiun kerja lokal (jendela terminal 1)
mkdir /tmp/mylayer && cd /tmp/mylayer
echo opencv-python==4.4.0.42 > ./requirements.txt
2. Di stasiun kerja lokal (terminal jendela 2)
docker run -it -v /tmp/mylayer:/mylayer lambci/lambda:build-python3.8 bash
Perintah di atas akan menempatkan Anda ke dalam kontainer buruh pelabuhan.
Di dalam wadah:
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. Di stasiun kerja lokal lagi (jendela terminal 1)
Kemas pythonfolder tersebut ke dalam mylayer.zip.
zip -r -9 mylayer.zip python
Di konsol AWS
Buat lapisan lambda berdasarkan
mylayer.zipdi Konsol AWS. Jangan lupa untuk menentukanCompatible runtimeskepython3.8.Tambahkan AWS menyediakan lapisan SciPy
AWSLambda-Python38-SciPy1xdan lapisan Anda sendiri dengan cv2 ke dalam fungsi Anda.
Jadi Anda akan memiliki dua lapisan dalam fungsi Anda.
- Lakukan pengujian dasar lapisan di lambda menggunakan fungsi lambda berikut:
import cv2
def lambda_handler(event, context):
print(dir(csv))
Fungsi ini dijalankan dengan benar (cetakan parsial ditunjukkan).
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