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

1. 목표

개요

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

  • 특정 선에서 도로를 건너는 차량 및 사람 수를 집계합니다.
  • 도로의 고정된 지역에 있는 차량/사람의 수를 셉니다.
  • 도로의 어느 부분에서든 혼잡을 감지합니다.

학습할 내용

  • 스트리밍을 위한 동영상 수집 방법
  • Vertex AI Vision에서 애플리케이션을 만드는 방법
  • 숙박 인원 분석에서 제공하는 다양한 기능과 사용 방법
  • 앱 배포 방법
  • 스토리지 Vertex AI Vision의 미디어 웨어하우스에서 동영상을 검색하는 방법입니다.
  • 점유 분석 모델의 데이터를 처리하는 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 명령어를 사용하여 샘플 동영상을 복사할 수 있습니다. 다음 변수를 바꿉니다.
  • SOURCE: 사용할 동영상 파일의 위치입니다. 자체 동영상 파일 소스 (예: 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입니다. 자세한 내용은 Cloud 위치를 참고하세요.
  • 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 콘솔에서 스트림으로 수집되는 동영상의 실시간 뷰입니다. 동영상 크레딧: 엘리자베스 마보, 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 함수에 연결합니다. 그러면 Cloud 함수가 모델의 출력을 자유롭게 소화하고 필요에 맞는 이벤트를 생성할 수 있습니다. 그런 다음 이전에 만든 Pub/Sub 주제를 대상으로 구성하여 이벤트 채널을 구성합니다. 또한 최소 간격을 설정하면 단기간에 이벤트 채널이 동일한 이벤트로 인해 플러딩되는 것을 방지할 수 있습니다.

후속 처리를 위한 Cloud 함수 선택

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

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

이벤트 채널 구성

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

이벤트 알림 대화상자 예시를 로드할 수 없음

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

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

  1. Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
  2. 목록에서 traffic-app 앱 옆에 있는 그래프 보기를 선택합니다.
  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이 얼마나 유용했나요?

매우 유용함 보통