이벤트 관리가 포함된 Vertex AI Vision 점유율 분석 앱

1. 목표

개요

이 Codelab에서는 이벤트 관리 기능으로 이벤트를 전송하기 위해 엔드 투 엔드로 Vertex AI Vision 애플리케이션을 만드는 데 중점을 둡니다. 사전 학습된 전문 모델 Occupancy analytics의 내장 기능을 사용하여 다음 항목의 캡처를 기반으로 이벤트를 생성합니다.

  • 특정 선에서 도로를 건너는 차량과 사람 수를 집계합니다.
  • 도로의 고정된 영역에 있는 차량/사람 수를 집계합니다.
  • 도로의 모든 부분에서 정체를 감지합니다.

학습할 내용

  • 스트리밍용 동영상을 인제스트하는 방법
  • Vertex AI Vision에서 애플리케이션을 만드는 방법
  • 재실률 분석에서 사용할 수 있는 다양한 기능과 사용 방법
  • 앱 배포 방법
  • 스토리지 Vertex AI Vision의 미디어 창고에서 동영상을 검색하는 방법
  • Occupancy Analytics 모델의 데이터를 처리하는 Cloud 함수를 만드는 방법
  • Pub/Sub 주제 및 구독을 만드는 방법
  • Pub/Sub 주제를 통해 이벤트를 전송하도록 이벤트 관리를 설정하는 방법

2. 시작하기 전에

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 만들거나 선택합니다. 참고: 이 절차에서 생성한 리소스를 유지하지 않으려면 기존 프로젝트를 선택하지 말고 프로젝트를 새로 만드세요. 이러한 단계가 완료되면 프로젝트를 삭제하여 프로젝트와 연결된 모든 리소스를 삭제할 수 있습니다. 프로젝트 선택기로 이동
  2. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
  3. Compute Engine 및 Vision AI API를 사용 설정합니다. API 사용 설정

서비스 계정 만들기:

  1. Google Cloud 콘솔에서 서비스 계정 만들기 페이지로 이동합니다. 서비스 계정 만들기로 이동
  2. 프로젝트를 선택합니다.
  3. 서비스 계정 이름 필드에 이름을 입력합니다. Google Cloud 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다. 서비스 계정 설명 필드에 설명을 입력합니다. 예를 들어 빠른 시작을 위한 서비스 계정입니다.
  4. 만들고 계속하기를 클릭합니다.
  5. 프로젝트에 대한 액세스 권한을 제공하려면 서비스 계정에 Vision AI > Vision AI 편집자, Compute Engine > Compute 인스턴스 관리자(베타), 스토리지 > 스토리지 객체 뷰어 † 역할을 부여합니다 . 역할 선택 목록에서 역할을 선택합니다. 역할을 추가하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다. 참고: 역할 필드는 서비스 계정이 프로젝트에서 액세스할 수 있는 리소스에 영향을 줍니다. 이러한 역할을 취소하거나 나중에 추가 역할을 부여할 수 있습니다. 프로덕션 환경에서는 소유자, 편집자 또는 뷰어 역할을 부여하지 마세요. 대신 요구사항을 충족하는 사전 정의된 역할 또는 커스텀 역할을 부여합니다.
  6. 계속을 클릭합니다.
  7. 완료를 클릭하여 서비스 계정 만들기를 마칩니다. 브라우저 창을 닫지 마세요. 다음 단계에서 사용합니다.

서비스 계정 키 만들기:

  1. Google Cloud 콘솔에서 만든 서비스 계정의 이메일 주소를 클릭합니다.
  2. 를 클릭합니다.
  3. 키 추가를 클릭한 후 새 키 만들기를 클릭합니다.
  4. 만들기를 클릭합니다. JSON 키 파일이 컴퓨터에 다운로드됩니다.
  5. 닫기를 클릭합니다.
  6. Google Cloud CLI를 설치하고 초기화합니다.

† Cloud Storage 버킷에서 샘플 동영상 파일을 복사하는 경우에만 역할이 필요합니다.

3. 스트리밍을 위해 동영상 파일 수집

vaictl을 사용하여 동영상 데이터를 점유율 분석 앱으로 스트리밍할 수 있습니다.

Cloud 콘솔에서 Vision AI API를 활성화합니다.

새 스트림 등록

  1. Vertex AI Vision의 왼쪽 패널에서 스트림 탭을 클릭합니다.
  2. 등록을 클릭합니다.
  3. 스트림 이름에 'traffic-stream'을 입력합니다.
  4. 리전에 'us-central1'을 입력합니다.
  5. 등록을 클릭합니다.

스트림이 등록되는 데 몇 분 정도 걸립니다.

샘플 동영상 준비

  1. 다음 gsutil cp 명령어를 사용하여 샘플 동영상을 복사할 수 있습니다. 다음 변수를 바꿉니다.
  • 소스: 사용할 동영상 파일의 위치입니다. 자체 동영상 파일 소스 (예: gs://BUCKET_NAME/FILENAME.mp4)를 사용하거나 샘플 동영상 (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(사람과 차량이 있는 동영상, 소스)을 사용할 수 있습니다.
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

스트림으로 데이터 수집

  1. 이 로컬 동영상 파일을 앱 입력 스트림으로 전송하려면 다음 명령어를 사용합니다. 다음 변수를 바꿔야 합니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • LOCATION_ID: 위치 ID입니다. 예를 들면 us-central1입니다. 자세한 내용은 클라우드 위치를 참고하세요.
  • LOCAL_FILE: 로컬 동영상 파일의 파일 이름입니다. 예: street_vehicles_people.mp4
  • –loop 플래그: 선택사항입니다. 스트리밍을 시뮬레이션하기 위해 파일 데이터를 루프합니다.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4
  1. 이 명령어는 동영상 파일을 스트림으로 스트리밍합니다. –loop 플래그를 사용하면 명령어를 중지할 때까지 동영상이 스트림에서 연속 재생됩니다. 이 명령어를 백그라운드 작업으로 실행하여 스트리밍이 계속되도록 합니다.
  • ( 백그라운드 작업으로 만들기 위해 시작 부분에 nohup을 추가하고 끝 부분에 '&'을 추가)
nohup vaictl -p $PROJECT_ID \
    -l $LOCATION_ID \
    -c application-cluster-0 \
    --service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &

vaictl 수집 작업을 시작한 후 동영상이 대시보드에 표시되기까지 약 100초가 걸릴 수 있습니다.

스트림 수집이 가능해지면 트래픽 스트림을 선택하여 Vertex AI Vision 대시보드의 스트림 탭에서 동영상 피드를 확인할 수 있습니다.

스트림 탭으로 이동

UI에서 스트리밍되는 라이브 동영상 보기Google Cloud 콘솔에서 스트림으로 인제스트되는 동영상의 라이브 뷰. 동영상 출처: Elizabeth Mavor(Pixabay) (모자이크 추가)

4. Cloud 함수 만들기

모델의 데이터를 처리하고 나중에 이벤트 채널을 통해 전송될 이벤트를 생성하는 Cloud 함수가 필요합니다.

Cloud 함수에 대해 자세히 알아보려면 여기를 참고하세요.

모델을 수신하는 Cloud 함수 만들기

  1. Cloud Functions UI 생성 페이지로 이동합니다.
  2. 나중에 이벤트 관리 설정에서 이 Cloud 함수를 참조하는 데 사용될 함수 이름을 설정합니다.
  3. 리전이 애플리케이션과 일치하는지 확인합니다.
  4. 트리거 설정을 조정한 다음 저장합니다.
  5. 다음 버튼을 클릭하여 '코드' 부분으로 이동합니다. Cloud 함수 생성 예시를 로드할 수 없음
  6. Cloud 함수를 수정합니다. 다음은 Node.js 런타임이 포함된 예시입니다.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
 // Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
 // For more about logging, please see https://cloud.google.com/functions/docs/monitoring

 // The processor output will be stored in req.body.
 const messageString = constructMessage(req.body);

 // Send your message to operator output with res HTTP response context.
 res.status(200).send(messageString);
};

function constructMessage(data) {
 /**
  * Typically, your processor output should contains appPlatformMetadata & it's designed output.
  * For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
  * to construct the return annotation as such. 
  */

 // access appPlatformMetat.
 const appPlatformMetadata = data.appPlatformMetadata;

 // access annotations.
 const annotations = data.annotations.map(annotation => {
  // This is a mock OccupancyCountingPredictionResult annotation.
  return {"annotation" : {"track_info": {"track_id": "12345"}}};
 });

 const events = [];
 for(const annotation of annotations) {
   events.push({
       "event_message": "Detection event",
       "payload" : {
         "description" : "object detected"
       },
       "event_id" : "track_id_12345"
     });
 }

  /**
   * Typically, your cloud function should return a string represent a JSON which has two fields:
   * "annotations" must follow the specification of the target model.
   * "events" should be of type "AppPlatformEventBody".
   */
 const messageJson = {
   "annotations": annotations,
   "events": events,
 };
 return JSON.stringify(messageJson);
}
  1. '배포' 버튼을 클릭하여 함수를 배포합니다.

5. Pub/Sub 주제 및 구독 만들기

애플리케이션이 이벤트를 전송할 수 있는 Pub/Sub 주제를 제공해야 합니다. 이벤트를 수신하려면 Pub/Sub 구독이 구성된 옵틱을 구독해야 합니다.

Pub/Sub 주제에 대한 자세한 내용은 여기를, 구독에 대한 자세한 내용은 여기를 참고하세요.

Pub/Sub 주제 만들기

Pub/Sub 주제를 만들려면 gcloud CLI를 사용하면 됩니다. 설정에서 SUBSCRIPTION_ID를 실제 값으로 바꿔야 합니다.

gcloud pubsub topics create TOPIC_ID

또는 Pub/Sub UI를 사용할 수 있습니다.

Pub/Sub 구독 만들기

Pub/Sub 구독을 만들려면 gcloud CLI를 사용하면 됩니다. (SUBSCRIPTION_ID 및 TOPIC_ID를 설정의 실제 값으로 바꿔야 합니다.)

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

또는 Pub/Sub UI를 사용할 수 있습니다.

6. 애플리케이션 만들기

첫 번째 단계는 데이터를 처리하는 앱을 만드는 것입니다. 앱은 다음을 연결하는 자동화된 파이프라인으로 생각할 수 있습니다.

  • 데이터 수집: 동영상 피드가 스트림으로 수집됩니다.
  • 데이터 분석: 수집 후 AI(컴퓨터 비전) 모델을 추가할 수 있습니다.
  • 데이터 스토리지: 동영상 피드의 두 버전 (원본 스트림과 AI 모델에서 처리한 스트림)을 미디어 웨어하우스에 저장할 수 있습니다.

Google Cloud 콘솔에서 앱은 그래프로 표시됩니다.

빈 앱 만들기

앱 그래프를 채우려면 먼저 빈 앱을 만들어야 합니다.

Google Cloud 콘솔에서 앱을 만듭니다.

  1. Google Cloud 콘솔로 이동합니다.
  2. Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다.

애플리케이션 탭으로 이동

  1. 추가 만들기 버튼을 클릭합니다.
  2. 앱 이름으로 traffic-app을 입력하고 리전을 선택합니다.
  3. 만들기를 클릭합니다.

앱 구성요소 노드 추가

빈 애플리케이션을 만든 후에는 앱 그래프에 세 개의 노드를 추가할 수 있습니다.

  1. 수집 노드: 데이터를 수집하는 스트림 리소스입니다.
  2. 처리 노드: 수집된 데이터를 기반으로 작동하는 재실 분석 모델입니다.
  3. 스토리지 노드: 처리된 동영상을 저장하고 메타데이터 저장소 역할을 하는 미디어 웨어하우스입니다. 메타데이터 저장소에는 수집된 동영상 데이터에 관한 분석 정보와 AI 모델에서 추론한 정보가 포함됩니다.

콘솔에서 앱에 구성요소 노드를 추가합니다.

  1. Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
  2. 트래픽-앱 라인에서 그래프 보기를 선택합니다. 그러면 처리 파이프라인의 그래프 시각화로 이동합니다.

데이터 수집 노드 추가

  1. 입력 스트림 노드를 추가하려면 사이드 메뉴의 커넥터 섹션에서 스트림 옵션을 선택합니다.
  2. 열린 스트림 메뉴의 소스 섹션에서 스트림 추가를 선택합니다.
  3. 스트림 추가 메뉴에서 새 스트림 등록을 선택하고 트래픽 스트림을 스트림 이름으로 추가합니다.
  4. 앱 그래프에 스트림을 추가하려면 스트림 추가를 클릭합니다.

데이터 처리 노드 추가

  1. 점유 수 모델 노드를 추가하려면 사이드 메뉴의 특수 모델 섹션에서 점유 분석 옵션을 선택합니다.
  2. 기본 선택 항목인 사람차량을 그대로 둡니다.
  3. 선 교차에 선을 추가합니다. 다중 점 선 도구를 사용하여 자동차나 사람이 나가거나 들어오는 것을 감지해야 하는 위치에 선을 그립니다.
  4. 활성 영역을 그려 해당 영역의 사람/차량을 집계합니다.
  5. 활동 감지 구역이 그려진 경우 혼잡을 감지하기 위해 대기 시간 설정을 추가합니다.
  • (현재 활성 영역과 선 교차는 동시에 지원되지 않습니다. 한 번에 하나의 기능만 사용하세요.)

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

데이터 스토리지 노드 추가

  1. 출력 대상 (스토리지) 노드를 추가하려면 사이드 메뉴의 커넥터 섹션에서 Vertex AI Vision의 미디어 웨어하우스 옵션을 선택합니다.
  2. Vertex AI Vision의 미디어 웨어하우스 메뉴에서 웨어하우스 연결을 클릭합니다.
  3. 웨어하우스 연결 메뉴에서 새 웨어하우스 만들기를 선택합니다. 웨어하우스 이름을 traffic-warehouse로 지정하고 TTL 기간을 14일로 둡니다.
  4. 만들기 버튼을 클릭하여 웨어하우스를 추가합니다.

7. 이벤트 관리 구성

지속 시간 02:00

모델을 이전에 생성된 Cloud Functions에 연결하여 후처리를 진행합니다. Cloud Functions는 모델의 출력을 자유롭게 처리하고 필요에 맞는 이벤트를 생성할 수 있습니다. 그런 다음 이전에 만든 Pub/Sub 주제를 타겟으로 구성하여 이벤트 채널을 구성합니다. 최소 간격을 설정하여 짧은 기간 내에 동일한 이벤트로 이벤트 채널이 넘치는 것을 방지할 수도 있습니다.

후처리를 위한 Cloud 함수 선택

  1. 애플리케이션 그래프에서 데이터 처리 노드(점유율 분석)를 클릭하여 측면 메뉴를 엽니다.
  2. 후처리 드롭다운에서 Cloud 함수 (함수 이름으로 식별됨)를 선택합니다.
  3. 애플리케이션 그래프에 변경사항이 자동 저장됩니다.

사후 처리 구성 예시를 로드할 수 없음

이벤트 채널 구성

  1. 애플리케이션 그래프에서 데이터 처리 노드(점유율 분석)를 클릭하여 측면 메뉴를 엽니다.
  2. '이벤트 알림' 섹션에서 '이벤트 알림 설정'을 클릭합니다. 이벤트 알림 예시를 로드할 수 없음
  3. 드롭다운에서 Pub/Sub 주제를 선택합니다.
  4. (선택사항) 이벤트 게시의 최소 간격/빈도를 설정합니다.

이벤트 알림 대화상자 예시를 로드하지 못함

8. 사용을 위해 앱 배포하기

필요한 모든 구성요소를 사용하여 엔드 투 엔드 앱을 빌드한 후 앱을 사용하는 마지막 단계는 앱을 배포하는 것입니다.

  1. Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
  2. 목록에서 트래픽 앱 옆에 있는 그래프 보기를 선택합니다.
  3. 애플리케이션 그래프 빌더 페이지에서 배포 버튼을 클릭합니다.
  4. 다음 확인 대화상자에서 배포를 선택합니다. 배포 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 배포가 완료되면 노드 옆에 녹색 체크표시가 표시됩니다. ee78bbf00e5db898.png

9. Pub/Sub 구독에서 이벤트/메시지 확인

동영상 데이터를 처리 앱에 수집하면 점유율 분석 모델에서 주석을 출력할 때 Cloud 함수가 이벤트를 생성해야 합니다. 그러면 이러한 이벤트가 Pub/Sub 주제를 통해 메시지로 게시되고 구독에서 수신됩니다.

다음 단계에서는 풀 구독이 있다고 가정합니다.

  1. 프로젝트에서 Pub/Sub 구독 목록을 열고 해당 구독을 찾습니다. Pub/Sub 구독 목록 페이지로 이동
  2. '메시지' 탭으로 이동합니다.
  3. '풀' 버튼을 클릭합니다.
  4. 표에서 메시지를 확인합니다. Pub/Sub 구독 메시지 이미지를 로드하는 중에 오류가 발생했습니다.

또는 UI 없이 메시지를 수신하는 방법을 알아볼 수 있습니다. 구독 페이지로 이동

10. 축하합니다

축하합니다. 실습을 완료했습니다.

정리

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

개별 리소스 삭제

리소스

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

의견

여기를 클릭하여 의견 보내기

설문조사

이 튜토리얼을 어떻게 사용하실 계획인가요?

읽기만 할 계획입니다 읽은 다음 연습 활동을 완료할 계획입니다

이 Codelab이 얼마나 유용했나요?

매우 유용함 다소 유용함