https://github.com/junho100/aws-bedrock-ts-demo
https://github.com/junho100/aws-bedrock-ts-demo
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/junho100/aws-bedrock-ts-demo
- Owner: junho100
- Created: 2025-04-26T10:39:19.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-04-29T07:31:12.000Z (about 1 year ago)
- Last Synced: 2025-04-29T08:34:42.624Z (about 1 year ago)
- Language: TypeScript
- Size: 27.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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 서비스 사용량을 모니터링할 수 있습니다.