ساختن یک سازمان دهنده تصویر بدون سرور با AWS Rekognition ، S3 ، Lambda & CloudWatch با Terraform

مقدمه
آیا تا به حال خود را در هزاران عکس غرق کرده اید ، که به طرز ناامیدی به دنبال عکس هایی از افراد خاص هستید؟ در این مقاله ، من شما را از طریق ساختمان قدم می زنم مرتب سازی سریع صورت، یک راه حل خودکار که از قابلیت تشخیص چهره AWS برای سازماندهی تصاویر شما استفاده می کند.
مشکل: اضافه بار عکس دیجیتال
بیشتر ما هزاران تصویر را از طریق برنامه های پیام رسانی مانند WhatsApp جمع می کنیم. در حالی که بسیاری از اینها الگوهای رفتاری یا تصاویر هستند که نیازی به نگهداری آنها نداریم ، برخی از آنها حاوی لحظات گرانبها با خانواده و دوستان هستند. مرتب سازی دستی از طریق این شمع دیجیتال وقت گیر و خسته کننده است.
راه حل: مرتب سازی سریع صورت
مرتب سازی سریع صورت یک برنامه بدون سرور است که:
- عکسهای مرجع افرادی را که می خواهید پیدا کنید می گیرد
- از طریق مجموعه تصویر خود اسکن می کنید
- به طور خودکار عکس های حاوی آن افراد را گروه بندی می کنند
کل فرآیند رویداد محور و بدون سرور است ، به این معنی که به طور خودکار مقیاس می شود و شما فقط هزینه آنچه را که استفاده می کنید پرداخت می کنید.
نمای کلی معماری
راه حل از این خدمات AWS استفاده می کند:
- S3: دو سطل ، یکی برای چهره های مرجع و دیگری برای طبقه بندی تصاویر
- لامبدا: عملکرد بدون سرور که تصاویر را با استفاده از تشخیص چهره پردازش می کند
- شناسایی: سرویس هوش مصنوعی AWS برای تجزیه و تحلیل تصویر
- ساعت: برای نظارت و ورود به سیستم
چگونه کار می کند
- شما عکسهای مرجع را در سطل مرجع S3 بارگذاری می کنید
- شما عکسهای نامشخص خود را در سطل Database S3 بارگذاری می کنید
- اعلان های رویداد S3 عملکرد لامبدا را تحریک می کنند
- تابع Lambda از AWS Rekognition برای مقایسه چهره ها استفاده می کند
- تصاویر با چهره های تطبیق (> شباهت 95 ٪) در پوشه ها سازماندهی می شوند
- نتایج برای نظارت به CloudWatch وارد می شوند
ساختن راه حل با terraform
بیایید به کد شیرجه بزنیم. ما از Terraform برای تعریف زیرساخت های خود به عنوان کد استفاده خواهیم کرد:
1. سطل S3 برای ذخیره تصویر
resource "aws_s3_bucket" "reference_bucket" {
bucket = "quicksort-reference-bucket-20250404"
}
resource "aws_s3_bucket" "database_bucket" {
bucket = "quicksort-database-bucket-20250404"
}
# Set security controls
resource "aws_s3_bucket_public_access_block" "reference_access_block" {
bucket = aws_s3_bucket.reference_bucket.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
2. عملکرد لامبدا با پایتون
عملکرد Lambda از Python و Boto3 SDK استفاده می کند:
- تصاویر را در هر دو سطل لیست کنید
- با استفاده از Rekognition چهره ها را مقایسه کنید
- مسابقات را در پوشه ها سازماندهی کنید
def compare_faces(source_image, target_image, similarity_threshold=90):
try:
response = rekognition.compare_faces(
SourceImage={
'S3Object': {
'Bucket': reference_bucket,
'Name': source_image
}
},
TargetImage={
'S3Object': {
'Bucket': database_bucket,
'Name': target_image
}
},
SimilarityThreshold=similarity_threshold
)
return response
except Exception as e:
logger.error(f"Error comparing faces: {str(e)}")
return None
3. IAM نقش ها و مجوزها
resource "aws_iam_role" "lambda_role" {
name = "quicksort_lambda_role"
assume_role_policy = jsonencode({
Version = "2012-10-17",
Statement = [{
Action = "sts:AssumeRole",
Principal = {
Service = "lambda.amazonaws.com"
},
Effect = "Allow"
}]
})
}
# Custom policy for S3 and Rekognition access
resource "aws_iam_policy" "lambda_policy" {
name = "quicksort_lambda_policy"
policy = jsonencode({
Version = "2012-10-17",
Statement = [
{
Action = [
"s3:GetObject",
"s3:PutObject",
"s3:CopyObject",
"s3:ListBucket",
],
Resource = [
aws_s3_bucket.reference_bucket.arn,
"${aws_s3_bucket.reference_bucket.arn}/*",
aws_s3_bucket.database_bucket.arn,
"${aws_s3_bucket.database_bucket.arn}/*"
],
Effect = "Allow"
},
{
Action = ["rekognition:CompareFaces"],
Resource = "*",
Effect = "Allow"
}
]
})
}
4. اعلان های رویداد S3
resource "aws_s3_bucket_notification" "bucket_notification" {
bucket = aws_s3_bucket.database_bucket.id
lambda_function {
lambda_function_arn = aws_lambda_function.quicksort_function.arn
events = ["s3:ObjectCreated:*"]
}
}
استقرار و استفاده
استفاده از راه حل ساده است:
1. کلون مخزن:
git clone https://github.com/sin4ch/quick-face-sort.git
cd quick-face-sort
2. استقرار با Terraform:
cd terraform
terraform init
terraform plan
terraform apply
ملاحظات هزینه
این راه حل از چندین سرویس AWS استفاده می کند که هزینه های آن را متحمل می شوند:
- ذخیره سازی S3 برای تصاویر شما
- دعوت های عملکرد لامبدا
- API Rekognition تماس می گیرد
- سیاهههای CloudWatch
خبر خوب این است که مدل قیمت گذاری AWS به این معنی است که شما فقط آنچه را که استفاده می کنید پرداخت می کنید. برای کتابخانه های عکس شخصی ، هزینه ها باید حداقل باشد.
یادداشت های امنیتی
برنامه از بهترین روشها برای امنیت استفاده می کند:
- سطل های خصوصی S3 بدون دسترسی عمومی
- مجوزهای حداقل قدرتمند
- بدون ذخیره طولانی مدت داده های تشخیص چهره
پایان
مرتب سازی سریع چهره قدرت ترکیب محاسبات بدون سرور و خدمات هوش مصنوعی را برای حل مشکلات دنیای واقعی نشان می دهد. با حداقل کد و تعمیر و نگهداری ، می توانید راه حلی بسازید که به طور خودکار هزاران عکس را سازماندهی کند و ساعت کار دستی را صرفه جویی کند.
کد کامل در GitHub موجود است – در صورت تمایل به استفاده از آن ، مشارکت و یا تطبیق آن برای نیازهای خود.
آیا چیزی مشابه ساخته اید؟ چگونه مجموعه عکس های خود را سازماندهی می کنید؟ من دوست دارم افکار و سوالات شما را در نظرات بشنوم! 😊🧡