The capstone project for AWS TechU, cohort 2 — an internal training programme I went through shortly after joining AWS as a Solution Architect in 2018. It was a requested internal project rather than something I picked, and it was the first time I built an end-to-end AWS pipeline rather than advising on one.
What it does
A Raspberry Pi posts photos to S3. From there:
face_detection.pyenumerates source images out of an S3 prefix, paginating properly throughlist_objects_v2with continuation tokens, then runs Rekognitioncompare_facesagainst a target image at a similarity threshold, andstart_label_detectionfor video.- Rekognition publishes to an SNS topic when a detection job completes, with SQS consuming from there — asynchronous by design, because label detection on video is not a request-response operation.
- A Lambda (
lambda/convert.py) fires on S3 upload and submits an Elemental MediaConvert job using settings loaded from a bundledjob.json, tagging each job with a generated asset ID so the completion event can be correlated back.
What I would say about it now
Two things hold up. The S3 pagination is done correctly rather than assuming one page of results, and the pipeline is event-driven throughout — SNS to SQS, S3 events to Lambda, job metadata carried through so asynchronous completions can be matched to their originating request. That decomposition is still how I would approach it.
Two things do not. The account ID, SNS topic ARN and IAM role ARN are hardcoded in the source, and a chunk of the face-comparison logic is commented out rather than removed. It was a training capstone on a deadline, and it reads like one.
Why the code is not linked
This is internal Amazon training work. The repository hardcodes an AWS account ID, and the source images are photographs of named colleagues used as face-matching inputs. Neither belongs on a public portfolio, so this one stays closed permanently — not just until I get around to cleaning it up.