Safe-Eye는 PySlowFast 모델과 Django 웹 프레임워크를 활용한 비디오 감시 및 이상 행동 감지 시스템입니다. 이 프로젝트는 CCTV 또는 보안 카메라에서 수집된 비디오 데이터를 실시간으로 분석하여 잠재적인 위험 상황을 탐지하고 대응할 수 있도록 설계되었습니다.
Safe Eye는 CCTV 카메라와 AI 기술을 활용하여 공간 안전을 강화하고자 만든 프로젝트입니다. 컴퓨터 비전 및 인공지능 기술을 활용하여 CCTV 영상을 분석하고, 잠재적인 위험 상황을 신속하게 감지하여 대응할 수 있도록 안전 관리자를 지원합니다.
-
실시간 이상 행동 감지
- CCTV 영상에서 사람들의 행동을 실시간으로 분석하여 이상 행동을 감지합니다.
- 폭력, 절도, 기물 파손 등 다양한 유형의 이상 행동을 인식할 수 있습니다.
- 이상 행동 발생 시 즉각적인 알람을 발송하여 신속한 대응을 촉진합니다.
-
상세 분석 화면
- 선택한 카메라 또는 영역의 고해상도 비디오 피드
- 감지 이벤트 목록 및 상세 정보
- 사용자 메모 및 설명 추가 기능
- 비디오 클립, 스크린샷 및 이벤트 데이터 내보내기
-
경고 및 알람 설정 화면
- 경고 및 알람 수준에 따른 특정 작업 설정
- 생성형 AI 모델을 활용한 맥락 적합 경고 및 알람 메시지 자동 생성
- 사용자 정의 가능한 알림 메시지 및 수신자 목록
- 정기적인 테스트 및 훈련 예약 기능
-
통계 및 보고 화면
- 기간 별 이벤트에 대한 상세 보고서 생성
- 이벤트 데이터 필터링 및 정렬 옵션
- 통계 데이터, 이벤트 로그 및 보고서 내보내기
- 자동 보고서 생성 및 전달 예약 기능
-
사용자 관리 및 설정 화면
- 사용자 프로필 정보 업데이트 및 알림 기본 설정
- 시스템 상태 모니터링 및 진단 도구
- 각 사용자의 스테이터스에 따라 알람을 분류
-
실시간 채팅 기능
- 채팅방 입장, 퇴장 이벤트 처리
- 메시지 수신 및 전송 기능 구현
- 백엔드: Django, Pillow, DRF, 스웨거, NumPy
- 프론트엔드: Next.js
- 머신러닝: TensorFlow, PyTorch
- 컴퓨터 비전: OpenCV
- 데이터베이스: PostgreSQL
- 실시간 처리: Apache Kafka
- DevOps: Docker, Kubernetes
SafeEye 프로젝트는 MIT 라이선스를 따릅니다.
- 환경 준비:
- 하드웨어 요구 사항: Ubuntu 18.04, 12th Gen Intel(R) Core(TM) i5 CPU, NVIDIA GeForce RTX 3070 GPU
- 소프트웨어 및 모듈 설치: Python 3.9과 CUDA 11.6 설치 필요한 Python 모듈을 requirements.txt을 사용해 설치
- 모델 정보:
- PySlowFast 모델 주로 이상 행동 인식에 사용
-
프로젝트 저장소 클론:
git clone https://github.com/proactive/safe-eye.git cd Safe-eye
-
필요한 종속성 설치:
source ./venv/Scripts/activate pip install -r requirements.txt
or
./commands.sh reinstall
-
환경 변수 설정:
cp .env.example .env # .env 파일을 편집하여 필요한 설정 값 입력
-
데이터베이스 마이그레이션 실행:
python manage.py migrate
or
./commands.sh migrate
-
Django 서버 실행:
python manage.py runserver
-
Next.js 프론트엔드 프로젝트 레포지토리:
// git clone git clone https://github.com/team-proactive/safe-eye-front.git cd safe-eye-front cp .env.local.example .env.local npm install npm run dev
-
commands.sh
파일을 실행하여 필요한 작업을 수행할 수 있습니다. 이 파일은 Git Bash에서 실행해야 합니다.- 세션 내에서 실행하고 가상환경을 종료하려면
./commands.sh
를 입력합니다. - 세션이 종료되더라도 가상환경을 유지하려면
. commands.sh
를 입력합니다.
- 세션 내에서 실행하고 가상환경을 종료하려면
-
가상 환경을 생성하고 활성화하려면
reinstall
커맨드를 실행합니다. 추가로 설치할 패키지를 입력하라는 메시지가 표시되면 필요한 패키지를 입력하거나 엔터를 눌러 건너뛸 수 있습니다. -
데이터베이스 마이그레이션을 수행하려면
migrate
커맨드를 실행합니다. -
프로젝트를 실행하려면
run
커맨드를 실행합니다.
install
: 초기 설치를 수행합니다. 가상 환경을 생성하고 Django 프로젝트와 앱을 생성합니다.activate
: 가상 환경을 활성화합니다.migrate
: 데이터베이스 마이그레이션을 수행합니다.run
: Django 개발 서버를 실행합니다.create
: static, media, templates 디렉토리를 생성합니다.static
: static 파일을 수집합니다.reinstall
: 가상 환경을 재설치하고requirements.txt
에 명시된 패키지를 설치합니다.remove
: 가상 환경을 제거합니다.add_admin
: 관리자 계정을 생성합니다.mock_data
: 애플리케이션의 초기 데이터를 로드합니다.
mock_data
커맨드를 사용하여 애플리케이션의 초기 데이터를 로드할 수 있습니다. 이 데이터는 각 앱의 fixtures/initial_data.json
파일에 정의되어 있습니다.
모델을 변경한 후에는 안전하게 데이터베이스를 삭제하고, AI를 활용하여 해당 모델에 대한 initial_data.json
파일을 생성합니다. 그런 다음 mock_data
명령어를 사용하여 초기 데이터를 로드합니다.
📦safe-eye
┣ 📂config
┃ ┣ 📜asgi.py
┃ ┣ 📜settings.py
┃ ┣ 📜urls.py
┃ ┗ 📜wsgi.py
┣ 📂accounts
┃ ┣ 📜admin.py
┃ ┣ 📜apps.py
┃ ┣ 📜models.py
┃ ┣ 📜serializers.py
┃ ┣ 📜tests.py
┃ ┣ 📜urls.py
┃ ┗ 📜views.py
┣ 📂alarm
┃ ┣ 📂fixtures
┃ ┃ ┣ 📜initial_data.json
┃ ┃ ┗ 📜mock_data_gen.py
┃ ┣ 📜admin.py
┃ ┣ 📜apps.py
┃ ┣ 📜models.py
┃ ┣ 📜serializers.py
┃ ┣ 📜tests.py
┃ ┣ 📜urls.py
┃ ┗ 📜views.py
┣ 📂notice
┃ ┣ 📂fixtures
┃ ┃ ┣ 📜initial_data.json
┃ ┃ ┗ 📜mock_data_gen.py
┃ ┣ 📜admin.py
┃ ┣ 📜apps.py
┃ ┣ 📜models.py
┃ ┣ 📜serializers.py
┃ ┣ 📜tests.py
┃ ┣ 📜urls.py
┃ ┗ 📜views.py
┣ 📂madia
┃ ┣ 📂fixtures
┃ ┃ ┣ 📜initial_data.json
┃ ┃ ┗ 📜mock_data_gen.py
┃ ┣ 📜admin.py
┃ ┣ 📜apps.py
┃ ┣ 📜models.py
┃ ┣ 📜serializers.py
┃ ┣ 📜tests.py
┃ ┣ 📜urls.py
┃ ┗ 📜views.py
┣ 📂utils
┃ ┣ 📂fixtures
┃ ┃ ┗ 📜initial_data.json
┃ ┣ 📂migrations
┃ ┣ 📜admin.py
┃ ┣ 📜apps.py
┃ ┣ 📜mixins.py
┃ ┣ 📜models.py
┃ ┣ 📜serializers.py
┃ ┣ 📜tests.py
┃ ┣ 📜urls.py
┃ ┣ 📜views.py
┣ 📂chat
┃ ┣ 📂__pycache__
┃ ┣ 📂migrations
┃ ┣ 📜__iniit__.py
┃ ┣ 📜admin.py
┃ ┣ 📜apps.py
┃ ┣ 📜models.py
┃ ┣ 📜serializers.py
┃ ┣ 📜tests.py
┃ ┣ 📜urls.py
┃ ┣ 📜views.py
┣ 📜.env
┣ 📜.env.example
┣ 📜.gitignore
┣ 📜a-team.png
┣ 📜commands.sh
┣ 📜manage.py
┣ 📜README.md
┗ 📜requirements.txt
-
accounts 앱:
- 커스텀 유저 모델을 정의하고 관리하는 앱입니다.
- 사용자 인증, 회원가입, 로그인 등의 기능을 담당합니다.
- 사용자 정보 관련 API 엔드포인트를 제공합니다.
-
utils 앱:
- 여러 앱에서 공통적으로 사용되는 유틸리티 모듈을 모아둔 앱입니다.
- 태그, 상태 등의 상수 값을 정의하고 관리합니다.
- 믹스인(Mixin) 클래스를 제공하여 코드 재사용성을 높입니다.
-
media 앱:
- AI 모델의 출력값(이미지)을 저장하고 관리하는 앱입니다.
- 분석된 이미지 파일을 저장하고 서빙하는 기능을 제공합니다.
- 이미지 업로드, 다운로드 등의 API 엔드포인트를 제공합니다.
-
alarm 앱:
- 경고 메시지를 생성하고 관리하는 앱입니다.
- 이상 행동 감지 시 알람을 발송하는 기능을 담당합니다.
- 알람 설정, 알람 로그 관리 등의 기능을 제공합니다.
-
notice 앱:
- 공지사항과 관련된 기능을 담당하는 앱입니다.
- 시스템 관리자가 사용자에게 공지사항을 전달하는 기능을 제공합니다.
- 공지사항 목록, 상세 보기, 생성, 수정, 삭제 등의 API 엔드포인트를 제공합니다.
-
ai 앱:
- AI 모델을 활용하여 영상 분석을 수행하는 앱입니다.
- CCTV 영상을 실시간으로 분석하고 이상 행동을 감지하는 기능을 담당합니다.
- AI 모델 추론, 결과 저장, 알람 생성 등의 작업을 수행합니다.
-
chat 앱:
- 실시간 채팅 기능을 제공하는 앱입니다.
- 채팅방 생성, 메시지 전송, 채팅방 참여 등의 기능을 담당합니다.
- WebSocket을 활용하여 실시간 양방향 통신을 구현합니다.
- 채팅 관련 API 엔드포인트를 제공합니다.
fixtures 디렉토리는 초기 데이터를 로드하기 위한 JSON 파일을 포함합니다.
- id: AutoField, 태그의 고유 식별자
- tag_type: CharField, 태그의 유형
- tag_content: CharField, 태그의 내용
- content_type: ForeignKey, 연결된 모델의 ContentType
- object_id: PositiveIntegerField, 연결된 모델의 객체 id
- content_object: GenericForeignKey, 연결된 모델의 객체
- available: BooleanField, 상태의 유효성 여부
- content_type: ForeignKey, 연결된 모델의 ContentType
- object_id: PositiveIntegerField, 연결된 모델의 객체 id
- content_object: GenericForeignKey, 연결된 모델의 객체
- created_at: DateTimeField, 상태 생성 시간
- updated_at: DateTimeField, 상태 업데이트 시간
- tags: GenericRelation, Tag 모델과의 관계
- status: GenericRelation, Status 모델과의 관계
- AbstractUser 모델을 상속받아 구현
- profile_picture: ImageField, 사용자 프로필 사진
- profile_message: TextField, 사용자 프로필 메시지
- profile_status: GenericRelation, StatusMixin을 통해 Status 모델과 관계 (추가)
- id: AutoField, 공지사항의 고유 식별자
- title: CharField, 공지사항 제목
- content: TextField, 공지사항 내용
- created_at: DateTimeField, 공지사항 생성 시간
- updated_at: DateTimeField, 공지사항 업데이트 시간
- id: AutoField, 알람의 고유 식별자
- alarm_type: CharField, 알람 유형 (이상 행동, 위험 상황 등)
- alarm_content: TextField, 알람 내용
- created_at: DateTimeField, 알람 생성 시간
- updated_at: DateTimeField, 알람 업데이트 시간
- user: ForeignKey, 알람과 연결된 사용자 (CustomUser 모델과 연결)
- id: AutoField, 분석 결과의 고유 식별자
- video: FileField, 분석 대상 비디오 파일
- result_image: ImageField, 분석 결과 이미지
- analysis_type: CharField, 분석 유형 (이상 행동, 객체 인식 등)
- created_at: DateTimeField, 분석 결과 생성 시간
- updated_at: DateTimeField, 분석 결과 업데이트 시간
- user: ForeignKey, 분석 결과와 연결된 사용자 (CustomUser 모델과 연결)
- 채팅방을 나타내는 모델
- name: CharField, 채팅방 이름
- users: ManyToManyField, 채팅방에 참여하는 사용자들과의 다대다 관계
- created_at: DateTimeField, 채팅방 생성 시간
- 채팅 메시지를 나타내는 모델
- room: ForeignKey, 메시지가 속한 채팅방과의 외래키 관계
- sender: ForeignKey, 메시지를 보낸 사용자와의 외래키 관계
- content: TextField, 메시지 내용
- timestamp: DateTimeField, 메시지 전송 시간
- WebSocket을 통한 실시간 채팅 기능을 구현하는 컨슈머
- WebSocket 연결 수립, 해제 이벤트 처리
- 채팅방 입장, 퇴장 이벤트 처리
- 메시지 수신 및 전송 기능 구현
ERD는 현재 고민 중입니다.
classDiagram
class Tag {
+AutoField id
+CharField tag_type
+CharField tag_content
+ForeignKey content_type
+PositiveIntegerField object_id
+GenericForeignKey content_object
}
class Status {
+BooleanField available
+ForeignKey content_type
+PositiveIntegerField object_id
+GenericForeignKey content_object
+DateTimeField created_at
+DateTimeField updated_at
}
class TagMixin {
+GenericRelation tags
}
class StatusMixin {
+GenericRelation status
}
class CustomUser {
+ImageField profile_picture
+CharField profile_status
+TextField profile_message
+GenericRelation status
}
class Notice {
+AutoField id
+CharField title
+TextField content
+DateTimeField created_at
+DateTimeField updated_at
}
class Alarm {
+AutoField id
+CharField alarm_type
+TextField alarm_content
+DateTimeField created_at
+DateTimeField updated_at
+ForeignKey user
}
class AnalysisResult {
+AutoField id
+FileField video
+ImageField result_image
+CharField analysis_type
+DateTimeField created_at
+DateTimeField updated_at
+ForeignKey user
}
CustomUser --|> AbstractUser
CustomUser --|> StatusMixin
CustomUser "1" --> "*" Alarm
CustomUser "1" --> "*" AnalysisResult
- Alarm 모델은 알람의 유형, 내용, 생성/업데이트 시간 등의 필드를 가지며, CustomUser 모델과 외래 키로 연결되어 있습니다.
- AnalysisResult 모델은 분석 대상 비디오 파일, 분석 결과 이미지, 분석 유형, 생성/업데이트 시간 등의 필드를 가지며, CustomUser 모델과 외래 키로 연결되어 있습니다.
- tag와 status는 user나 이벤트에 쓰일 수 있습니다.
notice
앱은 이 프로젝트의 예시 앱입니다. 이 앱은 공지사항 기능을 제공하며, 모델과 뷰, 시리얼라이저 등이 구현되어 있습니다.
이 앱의 모델과 API 엔드포인트를 참고하여 다른 앱을 개발할 수 있습니다.