AWS 무서버로 초인종을 만드는 방법

간단한 소개


최근 내 작업장의 모든 해커 경기에서 나와 한 동료는 AWS 서버 없는 서비스 + 트리베리 pi로 스마트 초인종을 만들었다.
누군가가'초인종'버튼을 눌렀을 때마다 이미지를 포착하고 아마존 Rekognition faces 집합을 통해 이미지의 얼굴이 색인되었는지 확인한다.이것은 그림의 인원수와 이름을 표시하는 타임 스탬프를 포함하는 메시지를 Slack에 보낼 것입니다. (만약 그들이 faces 집합 중이라면.)
이 글은 우리가 어떻게 이 프로젝트를 세우고 공부를 하는지를 묘사했다.

건축하다




건물


사진:상태기

작업 원리


두 가지 주요 구성 부분이 있는데 그것이 바로 얼굴 색인과 얼굴 식별이다.

면 색인

  • 우리는 VueJS로 S3 bucket에 위탁 관리하는 간단한 전단을 만들었다.여기서 우리는 얼굴과 이름이 적힌 사진을 한 장 올려 달라고 요구한다.
  • 업로드 후, 우리는 API 인터페이스를 통해 lambda 함수를 프록시하여 미리 서명한 URL을 만들고, 생성된 미리 서명한 URL을 사용하여 그림을 s3 bucket에 업로드합니다. 그 중 사람의 이름은 메타데이터 값입니다.
  • 이미지가 s3 bucket에 업로드되면 이미지의 얼굴을 감지하고 미리 정의된 AWS Rekognition 집합 (faces collection) 에 항목을 만들고 외부 id를 이름으로 합니다.
  • 얼굴 인식

  • 우리는 나무베리 원주율(Raspberry pi)과 그 카메라 모듈, 용접되지 않은 빵판과 단추를 사용하여 단추를 눌렀을 때 이미지 포착 부분인'초인종'을 만들었다.
  • 캡처된 이미지가 AWS S3에 업로드되고 Lambda 함수가 트리거되어 단계 함수를 초기화합니다.
  • Step 함수에는 두 개의 평행 흐름이 있습니다.
  • 의 한 절차는 이미지를 검출하는 사람의 얼굴을 검사하고 얼굴 집합에서 그것들을 검색하는 것이다.이 함수는 검출된 면의 총 수를 출력합니다.만약 식별된 얼굴이 있다면, 그것도 이 얼굴의 이름을 출력할 것이다.
  • 다른 흐름은 이미지 크기를 조정하고 타임 스탬프를 사용하여 워터마크를 만듭니다.모든 이 기능들은 lambda 함수를 사용합니다.
  • 이 두 흐름을 완성한 후에 또 다른 lambda 함수 트리거가 메시지를 작성하여 슬랙 채널로 보냅니다.
  • 출력


    느슨한 채널에서 출력은 다음과 같습니다.


    그림:예제 출력
    여기, (내 아들들) 와누자와 Thenuja는 이미 faces 집합에서 내가 아닌 색인을 받았다.

    비밀 번호


    전체 소스 코드는 다음 웹 사이트에서 찾을 수 있습니다. https://github.com/pubudusj/serverless-bell

    설정 방법


    AWS SAM 프레임워크를 사용하여 스택을 쉽게 배포할 수 있습니다.
    선결 조건:
  • AWS SAM cli+AWS 프로필 설정
  • npm(건립 전단)
  • Slack Webhook URL
  • Create a Slack App at https://api.slack.com/apps/. Enable 'Incoming web hook' and add the created webhook to the workspace choosing a channel. This will generate a webhook url in the format of https://hooks.slack.com/services/XXXX/XXXX/XXXXXX


    배치하다


  • 먼저 스택을 배치할 영역에 AWS Rekognion 컬렉션을 만듭니다.
    aws rekognition create-collection \
    --collection-id serverless-bell-faces-collection
    

  • 클론github repo.다음과 같이 여러 가지 용도가 다른 디렉토리가 있습니다.
  • 백엔드 - SAM
  • 을 사용하여 소스 코드 배포 필요
  • face index 프런트엔드-face index 프런트엔드의 소스 코드
  • 테스트 - Raspberry pi를 사용하지 않는 로컬 테스트에서는 이 코드를 사용하여 얼굴 인식 기능을 테스트할 수 있습니다.이것은 Pi가 이미지를 s3에 업로드하는 것처럼 제공된 이미지를 업로드합니다.
  • scripts in pi - pi에서 사용하는 간단한python 스크립트로 카메라 모듈에서 이미지를 포착하여 s3에 업로드합니다.
  • cli에서 /backend 디렉터리
  • 로 이동
  • 실행 명령: sam build --use-container이것은 필요한 의존성을 가진python 함수를 구축할 것이다.

  • 그런 다음 리소스를 배포하려면 sam deploy -g를 실행하십시오.
    AWS에서 만들 스택의 이름, 영역, Rekognition face 집합, slack URL 등 자세한 정보를 입력해야 합니다.

    Please make sure you create the stack in the same region as Rekognition faces collection.


  • 배치가 완료되면 다음 절차의 요구에 따라 이 출력 값을 복제한다: FaceIndexHostingS3Bucket, FaceIndexWebsiteURL, GeneratePresignedUrl, GeneratePresignedUrlForTesting, FaceDetectUploadBucketName
  • 이제 face_index_frontend 디렉터리,face index 전단 소스 코드가 있는 디렉터리로 이동합니다.
  • .env 파일 복사.env.example를 만듭니다.VUE_APP_GENERATE_URL_API 변수에 대해 GeneratePresignedUrl 출력 값을 사용합니다.
  • 필요한 모듈을 설치하고 npm install 구축 프로젝트를 실행합니다.이것은 npm run build 디렉터리를 만들 것입니다.

  • 그리고 dist 디렉터리의 내용을 s3에 업로드하여 s3의 위탁 관리 사이트로 사용하도록 하겠습니다.출력값dist을 s3 저장통으로 사용합니다.
    aws s3 cp dist s3://[BucketName] --recursive
    
  • 현재 출력치FaceIndexHostingS3Bucket로face index 사이트를 방문할 수 있습니다.
  • 이름이 있는 얼굴 이미지를 올리면faces 집합에서 이 얼굴의 색인을 볼 수 있습니다.FaceIndexWebsiteURL
  • 복분자 껍질

  • 카메라 모듈과 AWS 프로필을 사용하여 Raspberry PI를 설정합니다.
  • aws rekognition list-faces --collection-id "serverless-bell-faces-collection" 디렉토리의 예제 스크립트를 사용하여 이미지를 캡처하여 S3에 업로드합니다.

    Replace bucket-name with the output value FaceDetectUploadBucketName
    Use relevant gpiozero Button number as per your set up.


  • 일단 포획되면 느슨한 통로에서 소식을 볼 수 있습니다.
  • 복분자피가 없는 국부 테스트

  • 디렉토리로 이동합니다.
  • scripts_in_pi 파일 복사testing를 만듭니다..env 변수에 대해 .env.example 출력 값을 사용합니다.
  • 실행 VUE_APP_GENERATE_URL_APIGeneratePresignedUrlForTesting
  • 제공된 URL을 통해 전방에 업로드된 이미지를 방문하여 얼굴을 검사할 수 있습니다.
  • 업로드하면 슬랙 채널에서 메시지를 볼 수 있습니다.
  • 약간의 경험과 교훈

  • Rekognition faces 컬렉션에서 npm install 영숫자만 허용됩니다.따라서 여러 개의 빈칸으로 이름을 저장하려면, 우리는 반드시 밑줄로 빈칸을 바꾸어야 하며, 반대로도 마찬가지다.
  • S3 파일에서 lambda 함수를 업로드할 때, lambda는 업로드된 파일의 메타데이터를 받지 않습니다.따라서 파일의 메타데이터를 검색하려면 파일을 다시 읽어야 한다.
  • SAM에서는 함수reference의 정책 대상에서 자동으로 생성된 S3 메모리 통 이름을 사용할 수 없습니다.
    따라서 SAM에서 생성한 S3 Bucket name이 아닌 S3 Bucket을 구축해야 하며 임의의 이름은 here에 설명되어 있습니다.
  • 가능한 개선 사항

  • 얼굴 인덱스 전단, API와 Lambda 함수의 신분 검증을 실현한다.
  • 처리 단계 함수 실행 중의 실패 장면.
  • 업로드된 이미지의 데이터를 처리하여 정확한 방향을 얻습니다.
  • 당신의 생각을 알게 해 주세요.

    좋은 웹페이지 즐겨찾기