Alfred Cazares
← Back to the shelf
Shelved Last touched June 12, 2018

TechU Capstone

An AWS TechU cohort capstone: a Raspberry Pi feeding photos into a Rekognition face-matching and label-detection pipeline, with a MediaConvert transcoding stage behind it.

Pythonboto3AWS RekognitionAWS LambdaMediaConvertS3SNSSQS

The source for this one is not public. The write-up below covers what I built and why the repository is closed. Happy to walk through it in detail on a call.

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.py enumerates source images out of an S3 prefix, paginating properly through list_objects_v2 with continuation tokens, then runs Rekognition compare_faces against a target image at a similarity threshold, and start_label_detection for 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 bundled job.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.