An open API service indexing awesome lists of open source software.

https://github.com/junho100/aws-bedrock-ts-demo


https://github.com/junho100/aws-bedrock-ts-demo

Last synced: 11 months ago
JSON representation

Awesome Lists containing this project

README

          

# AWS Bedrock을 활용한 비디오 분석 샘플 코드

## 기능

- 인터넷 URL에서 비디오 파일 다운로드
- 비디오의 프레임을 일정 간격으로 샘플링
- 샘플링된 프레임을 AWS Bedrock Claude AI를 통해 분석
- 프레임 분석 결과를 종합하여 비디오 내용 요약 생성
- 주요 이벤트, 관련 객체, 패턴, 이상 징후 및 위험 평가 제공

## 설치 방법

### 요구사항

- Node.js 16.x 이상
- AWS 계정 및 Bedrock 서비스 접근 권한
- AWS CLI 구성 및 자격 증명 설정

### 설치

```bash
# 저장소 클론
git clone https://github.com/junho100/aws-bedrock-ts-demo.git
cd aws-nova-ts-demo

# 의존성 설치
npm install
```

### config.ts 파일 생성

루트 디렉토리에 아래와 같은 내용으로 `config.ts` 파일을 생성하세요:

```typescript
/**
* 비디오 분석기 환경 설정
*/
export const config = {
// 비디오 URL (분석할 비디오 URL로 변경)
videoUrl: "https://비디오URL을입력하세요.mp4",

// 비디오 처리 설정
videoProcessing: {
// 프레임 샘플링 간격 (밀리초)
sampleMsec: 1000,

// 프레임 크기 조정 비율 (0.0 ~ 1.0)
resizeRatio: 0.7,

// 한 번에 처리할 프레임 수
frameBatchSize: 7,

// 슬라이딩 윈도우 크기 (몇 프레임씩 이동할지)
slidingWindowSize: 7,

// 출력 디렉토리
outputDir: "./workspace",
},

// AWS Bedrock 설정
aws: {
// AWS 리전
region: "ap-northeast-2",

// AWS 프로필 (credentials 파일에 설정된 프로필)
profile: "your-aws-profile",

// Bedrock 모델 ID
modelId: "apac.anthropic.claude-3-5-sonnet-20240620-v1:0",
},
};
```

## 사용 방법

1. 위에서 설명한 대로 `config.ts` 파일을 생성하고 필요한 정보를 입력합니다.

2. 애플리케이션 실행:

```bash
npm start
```

## 실행 예시

애플리케이션을 실행하면 다음과 같은 순서로 비디오 분석이 진행됩니다:

1. 지정된 URL에서 비디오 다운로드
2. 비디오에서 주기적으로 프레임 샘플링
3. 샘플링된 프레임을 AWS Bedrock Claude AI로 분석
4. 비디오 전체에 대한 종합 분석 결과 출력

```
=== 비디오 분석 시작 ===
비디오 URL: https://example.com/your-video.mp4
URL에서 비디오 다운로드 중: https://example.com/your-video.mp4
비디오가 다음 경로에 다운로드 되었습니다: /path/to/tmp_xxx/video_sample.mp4
프레임 샘플링 중...
62개 프레임이 샘플링 되었습니다.
프레임 분석 중...
비디오 종합 분석 중...

================ 비디오 분석 결과 ================
요약:
[비디오 내용에 대한 종합적인 요약 내용]

주요 이벤트:
1. [이벤트 설명] (중요도: HIGH)
2. [이벤트 설명] (중요도: MEDIUM)

관련 객체:
사람: [관련된 사람들 설명]
물체: [관련된 물체 설명]

분석:
패턴: [비디오에서 발견된 패턴 설명]
이상 징후: [발견된 이상 징후 설명]
위험 평가: [전체적인 위험 수준 평가]
==================================================
```

### 샘플 프레임

실행 과정에서 비디오는 여러 프레임으로 분할되어 `workspace/frames/` 디렉토리에 저장됩니다. 이러한 프레임들이 Claude AI에 의해 분석되어 비디오의 내용을 해석하는 데 사용됩니다.

예를 들어, 다음과 같은 형식으로 프레임이 저장됩니다:

- `frame_000001.jpg`
- `frame_000002.jpg`
- ...
- `frame_000039.jpg`

각 프레임은 지정된 시간 간격(기본값: 1초)으로 추출되며, 이 프레임들의 연속적인 분석을 통해 비디오의 전체적인 내용과 주요 이벤트를 파악합니다.

## 주요 구성 요소

- **VideoAnalyzer**: 비디오 처리 및 분석을 담당하는 메인 클래스
- **BedrockClient**: AWS Bedrock 서비스와의 통신을 처리하는 클래스
- **config.ts**: 애플리케이션 설정 관리

## 동영상 분석 방식

이 프로젝트는 다음과 같은 방식으로 동영상을 분석합니다:

### 1. 비디오 다운로드 및 전처리

- HTTP/HTTPS 프로토콜을 사용하여 지정된 URL에서 비디오 파일을 다운로드합니다.
- ffmpeg를 사용하여 비디오 메타데이터(FPS, 프레임 수, 해상도 등)를 추출합니다.

### 2. 프레임 샘플링

- 구성된 시간 간격(`sampleMsec`, 기본값: 1000ms)에 따라 비디오에서 정기적으로 프레임을 추출합니다.
- 추출된 각 프레임은 지정된 비율(`resizeRatio`, 기본값: 0.7)로 크기가 조정되어 저장됩니다.
- 모든 프레임은 `workspace/frames/` 디렉토리에 저장됩니다.

### 3. 슬라이딩 윈도우 기법

- 연속적인 비디오 컨텍스트를 유지하기 위해 슬라이딩 윈도우 접근 방식을 사용합니다.
- 프레임들이 배치(`frameBatchSize`, 기본값: 7개)로 그룹화되어 처리됩니다.
- 각 새 배치는 이전 배치에서 일정 수의 프레임(`slidingWindowSize`, 기본값: 7)만큼 이동하여 시간적 연속성을 유지합니다.

### 4. AI 분석 단계

- **프레임 시퀀스 분석**: AWS Bedrock의 Claude AI 모델이 각 프레임 배치를 분석하여 시간 순서대로 상황을 설명합니다.

- 모델은 CCTV 영상 분석 전문가 역할을 수행하도록 프롬프트가 설계되어 있습니다.
- 각 프레임 배치에 대해 시퀀스 요약과 주요 이벤트를 식별합니다.
- 이전 프레임 배치의 분석 결과를 참조하여 연속성을 유지합니다.

- **종합 분석**: 모든 프레임 배치 분석이 완료되면, 전체 비디오에 대한 종합 분석을 수행합니다.
- 주요 이벤트와 그 중요도(높음/중간/낮음)를 식별합니다.
- 관련 객체(사람, 물체)를 분류합니다.
- 행동 패턴, 이상 징후, 위험 평가 등 종합적인 분석 결과를 제공합니다.

### 5. 결과 처리

- 모든 분석 결과는 구조화된 JSON 형식으로 반환되며, 콘솔에 요약되어 출력됩니다.
- 토큰 사용량 통계가 기록되어 AWS Bedrock 서비스 사용량을 모니터링할 수 있습니다.