From 2fc8178a5c52750b1cc204af01101e9c4d2cf965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=B0=BD=EC=9A=B1?= Date: Mon, 24 Aug 2026 19:06:24 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20?= =?UTF-8?q?=EC=86=8C=EA=B0=9C=EC=84=9C=20=EC=A0=84=EB=A9=B4=20=EC=9E=AC?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20+=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EB=B8=8C=EB=A6=AC=ED=94=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존 소개서의 문제는 문장이 아니라 구조와 최신성이었다. - 기대효과 섹션이 아예 없었다. 기능 목록만 있고 "그래서 뭐가 달라지나"가 없었다. - 왜 만들었나가 4문장이었다. 이미 CCTV 가 있는 현장이 왜 또 사는지에 답하지 못했다. - 내용이 0.9.0 시점이었다. 1.0.0 의 핵심인 통보·에스컬레이션이 로드맵에 "P3 예정"으로 적혀 있었고 테스트 320건·감사 43항목도 옛 수치였다 — 완성된 기능을 미완성으로 소개하는 문서가 고객에게 나갈 뻔했다. 재작성 - 기능 나열을 버리고 감지 → 대응 → 증거의 사슬로 재구성. 어느 한 칸이 비면 나머지가 무의미해진다는 것이 이 제품의 논지이므로 문서 구조도 그래야 한다. - 왜 만들었나를 "CCTV 는 이미 있는데 왜 사고를 못 막나" 세 가지(아무도 안 본다 / 발견이 늦다 / 증명할 자료가 없다)로 세우고, 각각에 대응하는 답을 표로 연결. - 기대효과 신설. 지어낸 ROI 대신 **제품이 스스로 계측해 보여주는 지표**(TTA, 니어미스:사고, 조치 전후 밀도, 오탐율)로 썼다 — 공급자 주장이 아니라 고객 화면의 숫자다. '약속하지 않는 것' 절을 함께 넣었다. 사고를 없애지 못하고, 감지율 100%는 없고, 오탐은 초기에 반드시 난다. 과장은 도입 후에 반드시 되돌아온다. - 설계 제약(감시하지 않는다 / 인터넷 없이 동작한다 / 클라우드를 안 쓴다)을 기능보다 앞에 두었다. 이 제품의 형태는 거기서 나왔다. 수치는 전부 코드와 대조해 교정 - 테스트 535건(pytest 311 + PHPUnit 224), 감사 55건, 감지 17종 + 서버 발행 1종 - "3초 안에 찾아낸다"는 과장이었다. 실제로는 쓰러진 자세가 3초 지속되면 확정이므로 "3초면 알아채고"로 고치고, 근거가 되는 3초를 감지 표에 함께 적었다. 이미지 브리프 신설 (docs/소개서-이미지-브리프.md) - 현장 사진 4장 + 다이어그램 3장의 발주 명세. 각 항목에 "이 이미지가 없으면 전달 안 되는 것", 담을 것, 피할 것, 사양, 캡션안, 우선순위. - 제품 화면 캡처 8장은 이미 확보되어 있어 발주 대상에서 제외. - 개인정보 제약을 최상단에 명시. 얼굴이 식별되는 작업자 사진이 한 장이라도 들어가면 "감시하지 않는다"는 이 제품의 핵심 주장이 무너진다. - 검토했으나 뺀 이미지(쓰러진 순간 프레임, 블러 전/후 비교, 스켈레톤 오버레이)와 그 이유도 기록. 나중에 "왜 없지"가 반복되지 않도록. HTML 은 md-to-html-report 로 재생성(목차·표·콜아웃·인쇄 스타일). 실렌더 확인. --- docs/images/README.md | 15 + docs/소개서-이미지-브리프.md | 292 +++++++++++++++ docs/프로젝트-소개서.html | 685 +++++++++++++++++++++++++++++++++++ docs/프로젝트-소개서.md | 342 +++++++++++++++++ 4 files changed, 1334 insertions(+) create mode 100644 docs/images/README.md create mode 100644 docs/소개서-이미지-브리프.md create mode 100644 docs/프로젝트-소개서.html create mode 100644 docs/프로젝트-소개서.md diff --git a/docs/images/README.md b/docs/images/README.md new file mode 100644 index 0000000..c85c917 --- /dev/null +++ b/docs/images/README.md @@ -0,0 +1,15 @@ +# 소개서 이미지 + +`docs/소개서-이미지-브리프.md` 의 발주 명세대로 받은 이미지를 이 폴더에 넣습니다. +파일명은 브리프에 지정된 것을 **그대로** 씁니다 (배치 매니페스트가 파일명으로 찾습니다). + + 01-현장-설치.jpg P0 표지 + 02-경광등.jpg P0 §2-2 대응 + 05-사슬.png P0 §2 무엇을 하는가 + 06-구성도.png P0 §4 시스템 구성 + 03-엣지노드.jpg P1 §4-1 엣지 노드 + 07-대응시간.png P1 §3-1 즉시 달라지는 것 + 04-위험구역.jpg P2 §2-1 감지 + +이미지가 들어오면 매니페스트를 만들어 소개서 HTML 을 재생성합니다. +제품 화면 캡처 8장은 이미 `server/deploy/manual/shots/` 에 있으므로 여기 넣지 않습니다. diff --git a/docs/소개서-이미지-브리프.md b/docs/소개서-이미지-브리프.md new file mode 100644 index 0000000..39ebc77 --- /dev/null +++ b/docs/소개서-이미지-브리프.md @@ -0,0 +1,292 @@ +# 프로젝트 소개서 — 이미지 브리프 + +대상 문서: `docs/프로젝트-소개서.md` (v1.0.0) +작성 목적: 소개서에 넣을 이미지를 **무엇을·왜·어떤 사양으로** 만들지 확정하기 위한 발주 명세. + +--- + +## 0. 먼저 읽을 것 + +### 0-1. 이미 확보된 자산 — 새로 만들 필요 없음 + +실제 제품 화면 캡처 8장이 이미 있습니다 (`server/deploy/manual/shots/`, 1400px 폭, 실데이터). +소개서에도 이것을 그대로 씁니다. **이 8장은 발주 대상이 아닙니다.** + +| 파일 | 화면 | +|------|------| +| `events.jpg` | 이벤트 콘솔 (감지 스트림) | +| `event-detail.jpg` | 이벤트 상세 (증거 3프레임) | +| `package.jpg` | 사고조사 패키지 | +| `report.jpg` | 안전 리포트 | +| `compliance.jpg` | 안전 관리 | +| `admin.jpg` | 시스템 설정 | +| `setup.jpg` | 설치 점검 | +| `zones.jpg` | 구역 설정 | + +### 0-2. 이 브리프가 요청하는 것 + +**A. 현장 사진 4장** — 제가 만들 수 없습니다. 촬영 또는 스톡 확보가 필요합니다. +**B. 다이어그램 3장** — 개념도입니다. 스펙을 아래에 그대로 실행 가능한 수준으로 적었습니다. + +### 0-3. 전 이미지 공통 규칙 + +- **가로 방향**, 최소 폭 **1600px** (인쇄 배포 고려). 파일당 2MB 이하 권장. +- 형식: 사진 `.jpg`(품질 85 이상) · 다이어그램 `.png`(투명 배경 불필요, 흰 배경). +- **텍스트가 이미지 안에 들어가면 한국어로.** 영문 라벨 금지 (고객 대면 문서). +- 색: 문서 강조색은 **네이비 `#003478`**. 다이어그램의 주 강조는 이 색으로. + 위험/경고 표현이 필요하면 빨강 `#dc2626`, 주의 황색 `#b7820a`. + +### 0-4. ⚠ 개인정보 — 이 문서에서 가장 중요한 제약 + +이 제품의 핵심 주장은 **"작업자를 감시하지 않는다"** 입니다. +소개서에 **얼굴이 식별되는 실제 작업자 사진이 한 장이라도 들어가면 그 주장이 무너집니다.** + +- 실제 인물 촬영 시 **서면 동의 필수**, 또는 +- 얼굴이 식별되지 않는 각도(뒷모습·측면·헬멧 착용·원거리), 또는 +- 모델을 쓴 연출 촬영, 또는 라이선스가 명확한 스톡. + +이 규칙을 못 지키는 컷은 **아예 빼는 편이 낫습니다.** + +### 0-5. 배치 방식 + +한글 헤딩은 파일명 자동 매칭이 불안정하므로 **매니페스트로 위치를 고정**합니다. +이미지를 받으면 제가 `docs/소개서-이미지.json` 을 만들어 HTML 생성기에 넘깁니다. +**따라서 파일명은 아래 지정한 이름 그대로** 주시면 됩니다. + +--- + +## A. 현장 사진 (촬영·확보 필요) + +### A-1. `01-현장-설치.jpg` — 표지 이미지 ★P0 + +| | | +|---|---| +| **위치** | 문서 최상단, 리드 문단 바로 아래 | +| **유형** | 현장 사진 | +| **비율** | 16:9 가로 (와이드), 최소 1600×900 | + +**이 이미지가 없으면 전달 안 되는 것** +이 시스템이 **실제 공장 안에 설치되는 물건**이라는 사실. 소프트웨어 소개서로만 보이면 +"화면만 있는 제품"으로 읽힙니다. + +**담아야 할 것** +- 실내 공장 또는 물류창고의 실제 작업 공간 (기계·랙·통로가 보이는 곳) +- 천장이나 기둥에 설치된 **카메라 1대가 화면 안에 명확히** 보일 것 +- 가능하면 그 옆에 **경광등**이 함께 보이면 최상 (이 제품의 차별점이라 표지에 값어치가 큼) +- 조명은 실제 공장 조도 그대로 — 스튜디오처럼 밝게 보정하지 말 것 + +**피할 것** +- 얼굴이 식별되는 작업자 (0-4 참조) +- 사무실·데이터센터·서버랙 이미지 (이 제품은 현장 물건입니다) +- 렌더링·3D 목업 티가 나는 이미지 +- 카메라가 안 보이는 그냥 공장 전경 (그러면 아무 회사 소개서와 같아집니다) + +**캡션 안** +> 기존 CCTV 화각에 엣지 AI 노드를 더해 설치합니다. 배선과 화각을 바꾸지 않습니다. + +--- + +### A-2. `02-경광등.jpg` — 현장 경광등 ★P0 + +| | | +|---|---| +| **위치** | §2-2 대응 — 어떻게 사람에게 닿는가 | +| **유형** | 현장 사진 (근접) | +| **비율** | 4:3 또는 3:2 가로, 최소 1600px 폭 | + +**이 이미지가 없으면 전달 안 되는 것** +"인터넷이 끊겨도 울린다"는 이 제품의 **가장 큰 차별점**이 글자로만 남습니다. +경광등은 눈에 보이는 물건이므로 사진 한 장이 문단 세 개보다 강합니다. + +**담아야 할 것** +- 벽·기둥에 설치되어 **실제로 점등된** 경광등 (적색 권장) +- 주변 공장 환경이 배경으로 조금 보일 것 (맥락 없이 경광등만 있으면 부품 사진이 됩니다) +- 가능하면 근처에 Pi 노드 함체가 함께 보이면 좋음 + +**피할 것** +- 흰 배경 제품 컷 (쇼핑몰 사진처럼 보임) +- 소방·화재 경보 설비로 오인될 구성 + +**캡션 안** +> 감지한 노드가 자기 GPIO로 직접 울립니다. 서버도 인터넷도 거치지 않습니다. + +--- + +### A-3. `03-엣지노드.jpg` — Pi + Hailo 노드 ★P1 + +| | | +|---|---| +| **위치** | §4-1 엣지 노드 | +| **유형** | 하드웨어 사진 | +| **비율** | 3:2 가로, 최소 1600px 폭 | + +**목적** — "엣지에서 추론한다"의 실체를 보여줍니다. 클라우드 GPU를 안 쓴다는 주장의 근거. + +**담아야 할 것** +- Raspberry Pi 5 + AI HAT+(Hailo-8)가 **조립된 상태** +- 실제 배치 형태 (DIN 레일 함체 안 또는 벽면 브래킷 장착) +- 카메라 케이블이 연결된 모습이면 더 좋음 + +**피할 것** +- 맨 기판만 책상 위에 올려둔 컷 (시제품처럼 보입니다) +- 과한 조명·보케 처리 + +**캡션 안** +> 추론은 이 장비에서 끝납니다. 영상은 이 상자 밖으로 나가지 않습니다. + +--- + +### A-4. `04-위험구역.jpg` — 위험구역이 있는 작업 공간 ★P2 + +| | | +|---|---| +| **위치** | §2-1 감지 (구역 규칙 위반 표 위) | +| **유형** | 현장 사진 | +| **비율** | 16:9 가로 | + +**목적** — "구역"이 추상 개념이 아니라 실제 공간임을 보여줍니다. + +**담아야 할 것** +- 바닥에 **안전선(황색 테이프)** 이 그어진 구역, 또는 방호 울타리가 있는 기계 주변 +- 프레스·컨베이어처럼 협착 위험이 명확한 설비가 보이면 최상 + +**피할 것** — 사람이 그 구역 안에 있는 컷 (규정 위반 장면을 홍보물에 넣는 셈이 됩니다) + +**캡션 안** +> 관리자가 이 화면 위에 직접 구역을 그리고, 등급과 인원 규칙을 붙입니다. + +--- + +## B. 다이어그램 (제작 필요) + +> 아래 3장은 **개념도**입니다. 제가 만든 SVG는 품질이 떨어지므로 스펙만 드립니다. +> 손으로 그리셔도 되고, 디자인 툴이나 이미지 생성 도구를 쓰셔도 됩니다. +> 각 항목의 **"이 그림이 말해야 하는 한 문장"** 이 전달되면 형태는 자유입니다. + +### B-1. `05-사슬.png` — 감지 → 대응 → 증거 ★P0 (최우선) + +| | | +|---|---| +| **위치** | §2 무엇을 하는가 (현재 ASCII 도식을 대체) | +| **비율** | 16:6 정도의 가로로 긴 형태, 최소 1800×700 | + +**이 그림이 말해야 하는 한 문장** +> "감지만 있는 제품이 아니라, 사람에게 닿고 증거로 남는 데까지가 하나로 이어져 있다." + +**구성** — 왼쪽에서 오른쪽으로 흐르는 3단 블록. 블록 사이에 굵은 화살표. + +``` +[1] 감지 [2] 대응 [3] 증거 +───────────── ───────────────── ───────────────── +17종 이벤트 → 현장 경광등 (즉시) → 사고조사 패키지 +엣지 AI 판정 담당자 통보 (1분) 증거 3프레임 +얼굴 자동 블러 상위 확대 (5분) 통보·조치 이력 + 위·변조 탐지 기록 +``` + +**반드시 들어갈 요소** +- 각 단계에 **시간 표기**: 감지 `3초` · 경광등 `즉시` · 통보 `1분` · 상위 확대 `5분`. + 이 숫자들이 이 그림의 핵심입니다 — 속도가 곧 제품 가치이므로. +- 2단계 "현장 경광등" 옆에 **네트워크 불필요** 표시 (예: 와이파이 아이콘에 사선) +- 3단계는 문서 아이콘 계열로 — 1·2단계와 성격이 다름을 형태로 구분 + +**피할 것** +- 클라우드 아이콘 (이 제품은 클라우드를 쓰지 않습니다 — 정반대 메시지) +- 사람 얼굴 아이콘 +- 3단계를 동등한 크기로만 나열하기 → 화살표가 굵어야 "이어져 있다"가 읽힙니다 + +--- + +### B-2. `06-구성도.png` — 시스템 구성 ★P0 + +| | | +|---|---| +| **위치** | §4 시스템 구성 (현재 ASCII 도식을 대체) | +| **비율** | 4:3 또는 3:2 세로로 여유 있는 형태, 최소 1600px 폭 | + +**이 그림이 말해야 하는 한 문장** +> "영상은 현장을 벗어나지 않는다. 밖으로 나가는 것은 스냅샷 3장과 메타데이터뿐이다." + +**구성** — 위에서 아래로 3층. + +| 층 | 내용 | 표기 | +|---|---|---| +| 1층 | 카메라 (CSI/USB) | "Pi 1대당 2~4대" | +| 2층 | Raspberry Pi 5 + Hailo-8 | 자세추정 · 이벤트 판정 · **얼굴 블러(저장 전)** · 오프라인 큐 · **경광등 GPIO** | +| 3층 | 웹 대시보드 (PHP + MySQL) | "일반 웹호스팅에서 동작" | +| 3층 우측 | 통보 | 메일 · 사내 웹훅/문자 | + +**반드시 들어갈 요소** +- **2층과 3층 사이 화살표에 라벨**: `HMAC 서명 · 스냅샷 3장 + 메타데이터` 그리고 + **`영상 없음`** — 이 라벨이 이 그림에서 가장 중요합니다. +- 2층을 **점선 박스로 감싸고 "현장(폐쇄망 가능)"** 이라고 표기 → 경계가 눈에 보이게 +- 2층에서 경광등으로 빠지는 **짧은 화살표를 따로** (서버를 안 거친다는 것이 보여야 함) + +**피할 것** +- 인터넷/클라우드 아이콘을 2층과 3층 사이에 크게 넣기 — 폐쇄망 구성이 가능하다는 점이 흐려짐 +- 화살표를 양방향으로 (데이터는 위로 올라가고, 설정만 내려옵니다 — 굳이 그린다면 설정 하향 화살표는 가늘게) + +--- + +### B-3. `07-대응시간.png` — 발견 시간 비교 ★P1 + +| | | +|---|---| +| **위치** | §3-1 즉시 달라지는 것 (표 위 또는 아래) | +| **비율** | 16:7 가로, 최소 1800px 폭 | + +**이 그림이 말해야 하는 한 문장** +> "야간에 쓰러지면 지금은 다음 순찰까지 방치된다. 이 시스템은 그 간격을 분 단위로 줄인다." + +**구성** — 위아래 두 개의 수평 타임라인. + +``` +[도입 전] 쓰러짐 ●─────────────────────────────────────● 다음 순찰/교대 때 발견 + └───────── 수십 분 ~ 수 시간 ─────────┘ + +[도입 후] 쓰러짐 ●─┬──┬─────┬────────────────────────── + │ │ └ 5분: 미확인 시 상위 담당자 + │ └ 1분 이내: 담당자 통보 + └ 3초: 감지 · 현장 경광등 +``` + +**반드시 들어갈 요소** +- 위쪽(도입 전) 막대는 **회색·길게**, 아래쪽(도입 후)은 **네이비·짧게** — 길이 대비가 메시지 +- 아래쪽 타임라인의 3·1분·5분 지점에 마커와 라벨 +- "수십 분 ~ 수 시간"은 **범위로만** 표기할 것 (구체 수치는 현장마다 달라 단정하면 반박당합니다) + +**피할 것** +- 구체적인 생존율·부상률 수치 (근거 없는 주장이 됩니다) +- 응급/의료 이미지 (과장으로 읽힙니다) + +--- + +## C. 정리 — 발주 목록 + +| 우선순위 | 파일명 | 유형 | 비고 | +|---|---|---|---| +| **P0** | `01-현장-설치.jpg` | 사진 | 표지. 카메라(+경광등)가 보이는 실내 현장 | +| **P0** | `02-경광등.jpg` | 사진 | 점등 상태. 최대 차별점 | +| **P0** | `05-사슬.png` | 다이어그램 | 감지→대응→증거, 시간 표기 필수 | +| **P0** | `06-구성도.png` | 다이어그램 | "영상 없음" 라벨 필수 | +| P1 | `03-엣지노드.jpg` | 사진 | Pi + Hailo 조립·설치 상태 | +| P1 | `07-대응시간.png` | 다이어그램 | 전/후 타임라인 대비 | +| P2 | `04-위험구역.jpg` | 사진 | 안전선·방호 울타리 | + +**P0 4장만 확보되어도 소개서는 충분히 성립합니다.** P1·P2는 여유가 될 때 추가하면 됩니다. + +**전달 방법** — 위 파일명 그대로 `docs/images/` 에 넣어주시면, 제가 매니페스트를 만들어 +HTML을 재생성하고 배치·캡션·인쇄 레이아웃까지 맞추겠습니다. + +--- + +## D. 참고 — 넣지 않기로 한 것 + +검토했으나 의도적으로 제외한 이미지입니다. 나중에 "왜 없지?"가 나오지 않도록 남깁니다. + +| 제외 항목 | 이유 | +|---|---| +| 넘어짐 감지 순간의 실제 프레임 | 얼굴 블러를 해도 **사람이 쓰러진 사진**을 홍보물에 쓰는 것은 부적절. 대신 §2-1 표와 이벤트 상세 화면 캡처로 대체 | +| 얼굴 블러 전/후 비교 | 비교하려면 **블러 전 원본**을 문서에 실어야 함 — 프라이버시 주장과 정면 충돌 | +| 골격(스켈레톤) 오버레이 시연 | 기술 데모로는 좋지만, 작업자를 추적한다는 인상을 강화해 도입 저항을 키움 | +| AI·뉴럴넷 추상 이미지 | 아무 정보도 전달하지 않음. 이 소개서의 문제는 "구체성 부족"이므로 정반대 방향 | diff --git a/docs/프로젝트-소개서.html b/docs/프로젝트-소개서.html new file mode 100644 index 0000000..8b46d50 --- /dev/null +++ b/docs/프로젝트-소개서.html @@ -0,0 +1,685 @@ + + + + + +move_detect — 작업장 안전 AI CCTV 프로젝트 소개서 + + + +
+
+
REPORT
+

move_detect — 작업장 안전 AI CCTV 프로젝트 소개서

+
+ +
+ +
+

쓰러진 작업자를 3초면 알아채고, 즉시 현장에 울리고, 5분 안에 확인되지 않으면 위로 올립니다.

+

실내 공장·창고의 안전사고를 엣지 AI가 실시간으로 감지하고, 감지에서 끝내지 않고 현장 경광등과
+담당자 통보까지 이어지도록
만든 온프레미스 안전관리 시스템입니다. 영상은 외부로 나가지
+않습니다 — 사고 순간의 스냅샷 3장(얼굴 자동 블러)만 전달합니다.

+
+

버전 1.0.0 · 2026-08-18

+
+

1. 왜 만들었나

+

1-1. CCTV는 이미 있는데, 왜 사고를 못 막나

+

대부분의 작업장에는 이미 CCTV가 달려 있습니다. 그런데도 사고가 발생하면 다음 세 가지가
+반복됩니다.

+

첫째, 아무도 보고 있지 않습니다. 카메라 수십 대를 실시간으로 지켜보는 인력은 어디에도
+없습니다. CCTV는 사실상 사후 확인용 녹화기로만 쓰이고 있고, 그것은 사고를 막는 장치가
+아니라 사고를 설명하는 장치입니다.

+

둘째, 발견이 늦을수록 피해가 커집니다. 넘어짐 자체보다 위험한 것은 넘어진 뒤 방치되는
+시간입니다. 의식을 잃은 작업자에게 그 시간은 곧 후유장해와 사망 위험의 크기입니다.
+야간·주말·단독 작업 시간대에는 이 공백이 몇 시간 단위로 벌어집니다.

+

셋째, 사고 후에 증명할 자료가 없습니다. 사고가 나면 사업주는 "무엇을 위험으로 보고
+있었고, 어떤 통제를 걸어두었으며, 사건 당시 그것이 작동했는가"를 설명해야 합니다.
+녹화 영상만으로는 그 질문에 답할 수 없습니다.

+

1-2. 이 세 가지를 각각 겨냥했습니다

+ + + + + + + + + + + + + + + + + + + + + +
문제move_detect의 답
아무도 안 보고 있다AI가 24시간 대신 봅니다. 사람은 감지된 사건만 봅니다
발견이 늦다감지 즉시 현장 경광등이 울리고, 확인이 없으면 상위 담당자로 자동 확대됩니다
증명할 자료가 없다사건마다 증거·통보·조치·위험요인이 묶인 사고조사 패키지가 한 번에 나옵니다
+

1-3. 설계를 결정한 세 가지 제약

+

이 제품의 형태는 다음 세 제약에서 나왔습니다. 기능보다 이 제약이 먼저입니다.

+
    +
  • 작업자를 감시하지 않는다. 라이브뷰가 없습니다. 영상은 저장도 전송도 하지 않습니다.
    + 사고 순간의 스냅샷만, 그것도 얼굴을 블러 처리한 뒤에 보냅니다. 근로자 동의를 받기 어려운
    + 구조로는 현장에 들어갈 수 없습니다.
  • +
  • 인터넷이 끊겨도 동작한다. 폐쇄망 현장을 전제로 만들었습니다. 정전·회선 장애는 위험이
    + 오히려 높아지는 시간대인데, 그때 시스템이 함께 죽으면 의미가 없습니다.
  • +
  • 클라우드 GPU를 쓰지 않는다. 추론은 현장 장비에서 끝납니다. 월 사용료가 없고, 영상이
    + 외부로 나갈 이유 자체가 없어집니다.
  • +
+
+

2. 무엇을 하는가

+

기능을 나열하기 전에 구조를 먼저 봅니다. 이 제품은 하나의 사슬입니다.

+
   감지                대응                     증거
+ ─────────      ─────────────────       ────────────────────
+ 17종 이벤트  →  현장 경광등 (즉시)   →   사고조사 패키지
+ 엣지 AI 판정     담당자 통보            증거 3프레임
+ 얼굴 블러        미확인 시 상위 확대     통보 이력 · 조치 이력
+                                        위·변조 탐지 감사기록
+
+

사슬의 어느 한 칸이 비면 나머지가 무의미해집니다. 감지만 있으면 아무도 모르고,
+대응만 있으면 나중에 설명할 수 없습니다.

+

2-1. 감지 — 무엇을 알아채는가

+

엣지가 17종을 판정하고, 여기에 서버가 발행하는 '미확인 경보 확대' 1종이 더해집니다.
+사람에 대한 것, 구역 규칙에 대한 것, 그리고 감시 장비 자신에 대한 것으로 나뉩니다.

+

사람의 위험 상태

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
이벤트무엇을 잡는가
넘어짐기립→쓰러짐 전이를 자세로 판정. 쓰러진 자세가 3초(조정 가능) 지속되면 확정 — 앉는 동작과 구분
넘어짐 후 미동 없음쓰러진 뒤 움직임이 없으면 위급으로 승격 — 의식 소실 의심
장시간 부동자세와 무관하게 오래 움직이지 않는 작업자
위험 상태 소실위험한 상태였던 사람이 화면에서 사라짐 (가림·추락 등)
넘어질 뻔함 (니어미스)사고 직전까지 갔다가 회복 — 사고 전 신호
작업자세 부담허리·팔 각도 노출 시간 집계 (익명 통계)
+

구역 규칙 위반 — 관리자가 카메라 화면 위에 그린 구역에 대해 판정합니다.

+ + + + + + + + + + + + + + + + + + + + + +
이벤트무엇을 잡는가
경고구역 진입 / 제한구역 침입 / 협착구역 침입등급별 구역 진입
단독 작업2인 1조 구역에 혼자 있는 상태가 지속
정원 초과 / 체류 상한 초과구역별 인원·체류시간 규칙 위반
+

감시 자신의 건전성 — 이 항목들이 이 제품의 차별점입니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
이벤트왜 필요한가
카메라 화각 변경청소하다 삼각대를 스치면 위험구역이 엉뚱한 바닥을 가리킵니다. 그런데 프레임은 계속 들어오고 화면은 정상으로 보입니다 — 이 조용한 실패를 감지합니다
카메라 가림 / 조도 저하렌즈가 덮이거나 조명이 죽어 검출력이 떨어진 상태
장치 이상 / 감시 성능 저하노드·카메라 자체의 장애
미확인 경보 확대위급 사건을 정해진 시간 동안 아무도 확인하지 않았다는 사실 자체를 사건으로 만듭니다
+
+

보호구 미착용 · 중장비 근접 · 화재/연기 3종은 감지기 배선과 이벤트 규격이 준비되어 있으나
+추론 모델이 확보되지 않아 비활성 상태입니다. 자세한 내용은 9장을 보십시오.

+
+

2-2. 대응 — 어떻게 사람에게 닿는가

+

감지가 화면에만 뜨면 그것은 기록 장치입니다. 이 제품은 세 갈래로 사람에게 닿습니다.

+
    +
  1. +

    현장 경광등·부저 (즉시, 네트워크 불필요)
    + 감지한 엣지 노드가 자기 GPIO로 직접 울립니다. 서버도 인터넷도 거치지 않으므로 회선이
    + 끊겨도, 서버가 죽어도 동작합니다.
    어떤 현장이든 이것부터 설정하도록 안내합니다.

    +
  2. +
  3. +

    담당자 통보 (메일 · 사내 웹훅/문자 게이트웨이)
    + 심각도 기준을 채널마다 정할 수 있습니다. 통보에는 현장 사진이 들어가지 않습니다 —
    + 링크만 보내고, 사진은 로그인한 사람만 봅니다.

    +
  4. +
  5. +

    미확인 시 자동 확대
    + 위급 사건이 정해진 시간(기본 5분) 동안 확인되지 않으면 상위 담당자에게 올라갑니다.
    + "감지했다"를 "누군가 보게 만들었다"로 바꾸는 장치입니다.

    +
  6. +
+

2-3. 증거 — 나중에 무엇으로 설명하는가

+
    +
  • 사고조사 패키지 (1클릭) — 사건 개요와 대응 소요 시간, 증거 3프레임,
    +같은 카메라의 전후 30분 타임라인, 누구에게 언제 통보가 갔는지, 해당 위험요인과 통제
    + 대책, 그 카메라의 개선 조치 이력, 서명란. 인쇄해 그대로 제출합니다.
  • +
  • 위·변조 탐지 감사기록 — 확인·설정변경·구역편집이 모두 해시로 연결되어 기록됩니다.
    + 중간을 고치거나 지우면 그 이후 전 구간이 어긋나 탐지됩니다.
  • +
  • 위험성평가 연계 — 감지 유형별로 어떤 위험요인을 통제하고 있는지 기록하고, 사고조사
    + 패키지에 함께 실립니다.
  • +
+

2-4. 운영 — 현장이 스스로 굴릴 수 있는가

+

납품 후 고객이 손댈 수 없는 시스템은 결국 꺼집니다.

+
    +
  • 감지 임계값 편집 — 허용 범위와 설명이 화면에 붙어 있어 잘못된 값이 저장되지 않습니다
  • +
  • 정비 중 알람 억제 — 계획된 작업 동안 통보만 보류. 사유 필수, 최대 8시간, 자동 만료.
    +감지와 기록은 계속되므로 그 시간대도 사후에 조사할 수 있습니다
  • +
  • 오탐 관리 — 카메라·유형별 오탐율을 보고 재조정 대상을 고릅니다
  • +
  • 교대 인수인계 — 누가 어떤 미처리 건을 넘겨받았는지 기록
  • +
  • 설비 성능 추이 — "지금 살아 있는가"가 아니라 "점점 나빠지고 있는가"
  • +
  • 설치 점검 화면 — 각 단계가 실제로 동작하는지 조회해서 확인
  • +
+
+

3. 기대효과

+

3-1. 즉시 달라지는 것

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목도입 전도입 후
야간·단독 작업 중 쓰러짐다음 순찰·교대까지 방치감지 즉시 경광등, 미확인 시 상위 확대
위험구역 관리표지판과 교육에 의존진입·단독작업·정원초과를 규칙으로 판정
사고 조사녹화 뒤져 반나절1클릭 패키지 (전후 맥락·통보·조치 포함)
CCTV 인력봐야 보임감지된 사건만 봄
안전 활동 증빙문서로 주장시스템 기록으로 제시
+

3-2. 시스템이 스스로 측정해 보여주는 효과

+

이 제품은 자기 효과를 스스로 계측합니다. 도입 효과를 공급자 주장이 아니라 고객 화면의
+숫자로 확인할 수 있다는 뜻입니다. 안전 리포트에 다음이 나옵니다.

+
    +
  • 평균 대응 시간 (TTA) — 감지에서 확인까지 걸린 시간. 이 숫자가 줄어드는 것이 곧
    + "발견이 빨라졌다"의 증거입니다
  • +
  • 니어미스 : 사고 비율 — 사고 전 신호가 얼마나 먼저 잡히는지. 니어미스가 상대적으로
    + 많다는 것은 예방이 앞단에서 작동하고 있다는 뜻입니다
  • +
  • 개선 조치 전·후 감지 밀도 — 매트를 깔았더니 그 카메라의 넘어짐이 줄었는가.
    +통계적으로 유의하지 않은 변화는 "판정 보류"로 표시합니다 — 표본 6건에서 나온
    + "33% 개선"을 성과로 적으면 안전회의에서 한 번 반박당하고 그 자료 전체가 신뢰를 잃습니다
  • +
  • 오탐율 추이 — 시스템이 현장에 맞게 조정되고 있는지
  • +
  • 요일×시간 사고 패턴 · 전조 급증 경보 — 인력 배치와 사전 개입의 근거
  • +
+

3-3. 관리 부담이 줄어드는 지점

+
    +
  • 사고조사 자료를 사람이 모으지 않습니다 — 사고 다음 날 반나절을 쓸 수 있는 사람은 없습니다
  • +
  • 위험성평가와 실제 감지가 한 곳에 연결되어 있어 갱신 근거가 자동으로 쌓입니다
  • +
  • 교대 인수인계와 정비 억제가 기록으로 남아, "그때 왜 알람이 없었나"에 답할 수 있습니다
  • +
  • 감사기록 위·변조 탐지로, 제출한 기록의 신뢰성을 별도로 주장할 필요가 없습니다
  • +
+

3-4. 약속하지 않는 것

+

과장은 도입 후 신뢰를 무너뜨리므로 미리 적습니다.

+
    +
  • 사고를 없애지 못합니다. 이 시스템은 사고를 더 빨리 발견하고, 전조를 앞당겨 보여주고,
    + 대응과 증거를 정리합니다. 사고 자체를 막는 것은 설비·공정·교육이며, 이 시스템은 그 개선의
    +근거를 제공하는 역할입니다.
  • +
  • 감지율 100%는 없습니다. 가려짐·역광·극단적 조도에서는 놓칩니다. 그래서 감시 자신의
    + 건전성(화각 변경·가림·조도)을 별도 이벤트로 감지해 못 보고 있다는 사실을 알립니다.
  • +
  • 오탐은 초기에 반드시 발생합니다. 현장마다 조명·동선·작업 자세가 달라, 첫 2~4주는
    + 임계값 조정 기간으로 잡아야 합니다. 그 조정을 고객이 직접 할 수 있도록 오탐율 통계와
    + 임계값 편집 화면을 넣었습니다.
  • +
  • 법적 판단을 대신하지 않습니다. 리포트와 사고조사 패키지는 안전 활동을 뒷받침하는
    + 보조 자료이며, 공식 재해 통계나 법정 서식을 대체하지 않습니다.
  • +
+
+

4. 시스템 구성

+
   [카메라 CSI/USB · Pi당 2~4대]
+              │
+   ┌──────────▼──────────────────────────────┐
+   │  Raspberry Pi 5 + Hailo-8 (26 TOPS)     │   ← 엣지: 자세추정 · 이벤트 판정
+   │  · 얼굴 블러 (저장 전)                   │      · 경광등 GPIO 직접 구동
+   │  · 오프라인 큐 (회선 단절 대비)          │      · 카메라 무결성 감시
+   └──────────┬──────────────────────────────┘
+              │  HMAC 서명 POST — 스냅샷 3장 + 메타데이터만 (영상 없음)
+              ▼
+   ┌─────────────────────────────────────────┐
+   │  웹 대시보드 (PHP 8 + MySQL)             │   ← 일반 웹호스팅에서 동작
+   │  이벤트 콘솔 · 구역 편집 · 안전 리포트    │      별도 서버 투자 불필요
+   │  안전 관리 · 시스템 설정 · 사고조사       │
+   └──────────┬──────────────────────────────┘
+              │
+     메일 · 사내 웹훅/문자 게이트웨이
+
+

4-1. 엣지 노드

+
    +
  • 하나의 공유 자세추정 모델로 모든 이벤트를 판정 — 카메라마다 모델을 더 올리지 않습니다
  • +
  • CSI·USB 카메라 혼용, CPU 폴백 경로 내장
  • +
  • 회선 단절 시 오프라인 큐에 보관 후 복구되면 재전송 (중복 전송은 서버가 제거)
  • +
  • systemd 상주 + 워치독 + 하트비트 텔레메트리
  • +
  • 감지 타이머는 단조 시계 기반이라 시스템 시각이 바뀌어도 오판하지 않습니다
  • +
+

4-2. 서버·대시보드

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
화면누가무엇을
이벤트운영자실시간 스트림, 확인·오탐 판정, 날짜 조회, 일괄 처리
이벤트 상세운영자증거 3프레임, 판정, 조치 기록, 사고조사 패키지 진입
구역 설정안전관리자카메라 화면 위 폴리곤, 등급·점유 규칙, 위험 히트맵
안전 리포트안전관리자주간 회의용 지표 한 장 (인쇄)
안전 관리안전관리자인수인계 · 정비 억제 · 위험성평가 · 설비 성능
시스템 설정관리자통보 경로 · 감지 임계값
+

이 외에 설치 점검(구성이 실제로 동작하는지 단계별 확인)과 사고조사 패키지(인쇄용
+단일 문서) 화면이 있습니다.

+
+

5. 개인정보 보호와 보안

+

작업자 감시 도구로 비치는 순간 현장 도입이 막힙니다. 그래서 프라이버시는 설정이 아니라
+구조로 넣었습니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
영역적용
영상라이브뷰 없음, 영상 저장·전송 없음. 사건 스냅샷 3장만
얼굴저장 전에 자동 블러. 원본은 어디에도 남지 않음
접근스냅샷은 인증 프록시 경유. 보존기간 경과 시 자동 삭제
통보알림에 이미지 미포함 — 링크만 전송
전송 보안HMAC 서명 + nonce로 위·변조·재전송 차단, 장치·IP별 rate limit
인증Argon2id, 로그인 잠금(사용자명 열거 차단), 세션 고정 방지
권한역할 기반 접근제어 + 현장 스코프, 전 요청 CSRF
웹CSP nonce (unsafe-inline 없음), DOM 주입은 textContent만
기록감사로그 해시체인 — 수정·삭제·우회삽입 탐지
+
+

6. 납품과 운영

+
    +
  • 웹호스팅 업로드 패키지 — 서버 일체(마이그레이션 8종 포함)를 zip 하나로 업로드,
    + 설정 파일 한 개만 수정
  • +
  • Pi 설치 번들 — 온라인 설치와 폐쇄망 오프라인 번들 모두 제공.
    + 런타임 휠·모델·소스를 전부 동봉해 설치 중 네트워크가 필요 없습니다
  • +
  • 동봉 문서 — 설치 안내서 · 역할별 사용 설명서(실제 화면 캡처 포함 단일 HTML) ·
    + 변경 내역 · 납품 점검 리포트
  • +
  • 자동 실행 2종 — 통보 디스패처(1분) · 보존기간 정리(일 1회)
  • +
  • 운영 도구 — 백업/복구, 감사기록 무결성 검증, 시연용 데모 데이터 생성
  • +
+
+

7. 품질 근거

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목현황
자동화 테스트535건 (엣지 Python 311 · 서버 PHP 224), 스킵 0 (하드웨어 항목 제외)
납품 감사1차 43건 + 재감사 12건 = 55건 전량 해소, 판정 적합
상호운용 검증HMAC 골든 벡터로 엣지(Python) ↔ 서버(PHP) 대조
계층 정합 검증감지 유형이 엣지·검증기·DB·화면 네 곳에서 일치하는지 자동 검사
납품물 검증산출물↔소스 패리티, 패키지 내부 클래스 해석·문법 검사, 무결성 해시
CI검증 명령 단일화, 스킵 발생 시 빌드 실패
+
+

감사에서 실제로 잡힌 대표 사례: 신규 감지 유형이 서버 검증기에만 누락되어 감지기가
+구현·배포되고도 아무 이벤트도 남기지 못하던 상태
를 발견해 수정하고, 재발 방지 테스트를
+추가했습니다. 이런 "조용한 실패"를 찾는 것이 이 프로젝트 감사 사이클의 목적입니다.

+
+
+

8. 기술 스택

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분기술
엣지 하드웨어Raspberry Pi 5 + AI HAT+ (Hailo-8, 26 TOPS)
엣지 소프트웨어Python, Hailo HEF 자세추정 (CPU 폴백 내장)
카메라CSI (picamera2) · USB (V4L2 MJPEG), Pi당 2~4대
서버PHP 8 + PDO + MySQL — 일반 웹호스팅에서 동작
프런트엔드바닐라 JavaScript (빌드 도구 없음)
배포오프라인 번들 · systemd · zip 업로드 패키지
+
+

9. 현재 한계와 다음 단계

+

9-1. 모델 확보가 선행되어야 하는 항목

+

보호구 미착용 · 중장비 근접 · 화재/연기 감지는 감지기 배선·이벤트 규격·테스트까지 완성되어
+있고 추론 모델만 비어 있습니다.
라이선스 조건을 만족하는 가중치 확보와 엣지 컴파일이
+선행 조건입니다.

+

이 상태를 "곧 됩니다"로 켜두지 않고 명시적으로 비활성으로 둔 것은 의도적입니다 —
+켜져 있으면 현장은 감지되고 있다고 믿게 되고, 그 믿음이 가장 위험합니다.

+

9-2. 현장 설치 시 검증할 항목

+

코드로 닫을 수 없고 실장비에서만 확인 가능한 항목입니다. 설치 시 반드시 수행합니다.

+
    +
  • 경광등 실제 구동 (배선·극성·유지시간)
  • +
  • 카메라 무결성 임계값을 현장 조명·진동에 맞게 조정
  • +
  • 낙상 판정 타이밍을 실제 영상으로 조정 — 블라인드 조정은 감지 누락을 만들 수 있어
    + 현장 확보 후로 미뤘습니다
  • +
  • 통보 1회 실발송 (시험 발송으로 대상 확인 후)
  • +
+

9-3. 다음 단계

+
    +
  • 위 감지 3종 활성화 (모델 확보 시)
  • +
  • 기계 가동 상태 연동 협착 판정 — 협착구역은 기계가 돌 때만 위험합니다
  • +
  • 다현장 통합 운영 (본사 관점 롤업은 이미 제공)
  • +
+
+

부록. 한눈에 보기

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
한 줄 정의쓰러진 작업자를 3초면 알아채고, 현장에 즉시 울리고, 5분 안에 확인되지 않으면 위로 올리며, 그 전 과정을 증거로 남기는 시스템
핵심 차별점① 감지에서 끝나지 않고 현장 경광등·에스컬레이션까지 ② 감시 자신의 고장을 감지 ③ 사고조사 패키지 1클릭 ④ 위·변조 탐지 감사기록
프라이버시라이브뷰·영상 전송 없음 · 얼굴 저장 전 블러 · 알림에 이미지 미포함
운영 비용클라우드 GPU 없음, 일반 웹호스팅에서 동작
감지 유형17종 활성 (+ 모델 확보 대기 3종)
검증테스트 535건 · 납품 감사 55건 전량 해소
+
+ + +
+ + diff --git a/docs/프로젝트-소개서.md b/docs/프로젝트-소개서.md new file mode 100644 index 0000000..bb1760d --- /dev/null +++ b/docs/프로젝트-소개서.md @@ -0,0 +1,342 @@ +# move_detect — 작업장 안전 AI CCTV + +> **쓰러진 작업자를 3초면 알아채고, 즉시 현장에 울리고, 5분 안에 확인되지 않으면 위로 올립니다.** +> +> 실내 공장·창고의 안전사고를 엣지 AI가 실시간으로 감지하고, 감지에서 끝내지 않고 **현장 경광등과 +> 담당자 통보까지 이어지도록** 만든 온프레미스 안전관리 시스템입니다. 영상은 외부로 나가지 +> 않습니다 — 사고 순간의 스냅샷 3장(얼굴 자동 블러)만 전달합니다. + +버전 1.0.0 · 2026-08-18 + +--- + +## 1. 왜 만들었나 + +### 1-1. CCTV는 이미 있는데, 왜 사고를 못 막나 + +대부분의 작업장에는 이미 CCTV가 달려 있습니다. 그런데도 사고가 발생하면 다음 세 가지가 +반복됩니다. + +**첫째, 아무도 보고 있지 않습니다.** 카메라 수십 대를 실시간으로 지켜보는 인력은 어디에도 +없습니다. CCTV는 사실상 **사후 확인용 녹화기**로만 쓰이고 있고, 그것은 사고를 막는 장치가 +아니라 사고를 설명하는 장치입니다. + +**둘째, 발견이 늦을수록 피해가 커집니다.** 넘어짐 자체보다 위험한 것은 넘어진 뒤 방치되는 +시간입니다. 의식을 잃은 작업자에게 그 시간은 곧 후유장해와 사망 위험의 크기입니다. +야간·주말·단독 작업 시간대에는 이 공백이 몇 시간 단위로 벌어집니다. + +**셋째, 사고 후에 증명할 자료가 없습니다.** 사고가 나면 사업주는 "무엇을 위험으로 보고 +있었고, 어떤 통제를 걸어두었으며, 사건 당시 그것이 작동했는가"를 설명해야 합니다. +녹화 영상만으로는 그 질문에 답할 수 없습니다. + +### 1-2. 이 세 가지를 각각 겨냥했습니다 + +| 문제 | move_detect의 답 | +|------|------------------| +| 아무도 안 보고 있다 | AI가 24시간 대신 봅니다. 사람은 **감지된 사건만** 봅니다 | +| 발견이 늦다 | 감지 즉시 **현장 경광등**이 울리고, 확인이 없으면 **상위 담당자로 자동 확대**됩니다 | +| 증명할 자료가 없다 | 사건마다 증거·통보·조치·위험요인이 묶인 **사고조사 패키지**가 한 번에 나옵니다 | + +### 1-3. 설계를 결정한 세 가지 제약 + +이 제품의 형태는 다음 세 제약에서 나왔습니다. 기능보다 이 제약이 먼저입니다. + +- **작업자를 감시하지 않는다.** 라이브뷰가 없습니다. 영상은 저장도 전송도 하지 않습니다. + 사고 순간의 스냅샷만, 그것도 얼굴을 블러 처리한 뒤에 보냅니다. 근로자 동의를 받기 어려운 + 구조로는 현장에 들어갈 수 없습니다. +- **인터넷이 끊겨도 동작한다.** 폐쇄망 현장을 전제로 만들었습니다. 정전·회선 장애는 위험이 + 오히려 높아지는 시간대인데, 그때 시스템이 함께 죽으면 의미가 없습니다. +- **클라우드 GPU를 쓰지 않는다.** 추론은 현장 장비에서 끝납니다. 월 사용료가 없고, 영상이 + 외부로 나갈 이유 자체가 없어집니다. + +--- + +## 2. 무엇을 하는가 + +기능을 나열하기 전에 구조를 먼저 봅니다. 이 제품은 **하나의 사슬**입니다. + +``` + 감지 대응 증거 + ───────── ───────────────── ──────────────────── + 17종 이벤트 → 현장 경광등 (즉시) → 사고조사 패키지 + 엣지 AI 판정 담당자 통보 증거 3프레임 + 얼굴 블러 미확인 시 상위 확대 통보 이력 · 조치 이력 + 위·변조 탐지 감사기록 +``` + +사슬의 어느 한 칸이 비면 나머지가 무의미해집니다. 감지만 있으면 아무도 모르고, +대응만 있으면 나중에 설명할 수 없습니다. + +### 2-1. 감지 — 무엇을 알아채는가 + +엣지가 **17종**을 판정하고, 여기에 서버가 발행하는 '미확인 경보 확대' 1종이 더해집니다. +사람에 대한 것, 구역 규칙에 대한 것, 그리고 **감시 장비 자신**에 대한 것으로 나뉩니다. + +**사람의 위험 상태** + +| 이벤트 | 무엇을 잡는가 | +|--------|---------------| +| 넘어짐 | 기립→쓰러짐 전이를 자세로 판정. 쓰러진 자세가 **3초**(조정 가능) 지속되면 확정 — 앉는 동작과 구분 | +| **넘어짐 후 미동 없음** | 쓰러진 뒤 움직임이 없으면 **위급으로 승격** — 의식 소실 의심 | +| 장시간 부동 | 자세와 무관하게 오래 움직이지 않는 작업자 | +| 위험 상태 소실 | 위험한 상태였던 사람이 화면에서 사라짐 (가림·추락 등) | +| 넘어질 뻔함 (니어미스) | 사고 직전까지 갔다가 회복 — **사고 전 신호** | +| 작업자세 부담 | 허리·팔 각도 노출 시간 집계 (익명 통계) | + +**구역 규칙 위반** — 관리자가 카메라 화면 위에 그린 구역에 대해 판정합니다. + +| 이벤트 | 무엇을 잡는가 | +|--------|---------------| +| 경고구역 진입 / 제한구역 침입 / 협착구역 침입 | 등급별 구역 진입 | +| 단독 작업 | 2인 1조 구역에 혼자 있는 상태가 지속 | +| 정원 초과 / 체류 상한 초과 | 구역별 인원·체류시간 규칙 위반 | + +**감시 자신의 건전성** — 이 항목들이 이 제품의 차별점입니다. + +| 이벤트 | 왜 필요한가 | +|--------|-------------| +| **카메라 화각 변경** | 청소하다 삼각대를 스치면 위험구역이 엉뚱한 바닥을 가리킵니다. 그런데 프레임은 계속 들어오고 화면은 정상으로 보입니다 — 이 **조용한 실패**를 감지합니다 | +| 카메라 가림 / 조도 저하 | 렌즈가 덮이거나 조명이 죽어 검출력이 떨어진 상태 | +| 장치 이상 / 감시 성능 저하 | 노드·카메라 자체의 장애 | +| **미확인 경보 확대** | 위급 사건을 정해진 시간 동안 아무도 확인하지 않았다는 **사실 자체를 사건으로** 만듭니다 | + +> 보호구 미착용 · 중장비 근접 · 화재/연기 3종은 감지기 배선과 이벤트 규격이 준비되어 있으나 +> **추론 모델이 확보되지 않아 비활성** 상태입니다. 자세한 내용은 9장을 보십시오. + +### 2-2. 대응 — 어떻게 사람에게 닿는가 + +감지가 화면에만 뜨면 그것은 기록 장치입니다. 이 제품은 세 갈래로 사람에게 닿습니다. + +1. **현장 경광등·부저 (즉시, 네트워크 불필요)** + 감지한 엣지 노드가 자기 GPIO로 직접 울립니다. 서버도 인터넷도 거치지 않으므로 **회선이 + 끊겨도, 서버가 죽어도 동작합니다.** 어떤 현장이든 이것부터 설정하도록 안내합니다. + +2. **담당자 통보 (메일 · 사내 웹훅/문자 게이트웨이)** + 심각도 기준을 채널마다 정할 수 있습니다. 통보에는 **현장 사진이 들어가지 않습니다** — + 링크만 보내고, 사진은 로그인한 사람만 봅니다. + +3. **미확인 시 자동 확대** + 위급 사건이 정해진 시간(기본 5분) 동안 확인되지 않으면 상위 담당자에게 올라갑니다. + "감지했다"를 "누군가 보게 만들었다"로 바꾸는 장치입니다. + +### 2-3. 증거 — 나중에 무엇으로 설명하는가 + +- **사고조사 패키지 (1클릭)** — 사건 개요와 **대응 소요 시간**, 증거 3프레임, + **같은 카메라의 전후 30분 타임라인**, 누구에게 언제 통보가 갔는지, 해당 위험요인과 통제 + 대책, 그 카메라의 개선 조치 이력, 서명란. 인쇄해 그대로 제출합니다. +- **위·변조 탐지 감사기록** — 확인·설정변경·구역편집이 모두 해시로 연결되어 기록됩니다. + 중간을 고치거나 지우면 그 이후 전 구간이 어긋나 **탐지됩니다.** +- **위험성평가 연계** — 감지 유형별로 어떤 위험요인을 통제하고 있는지 기록하고, 사고조사 + 패키지에 함께 실립니다. + +### 2-4. 운영 — 현장이 스스로 굴릴 수 있는가 + +납품 후 고객이 손댈 수 없는 시스템은 결국 꺼집니다. + +- **감지 임계값 편집** — 허용 범위와 설명이 화면에 붙어 있어 잘못된 값이 저장되지 않습니다 +- **정비 중 알람 억제** — 계획된 작업 동안 통보만 보류. 사유 필수, 최대 8시간, 자동 만료. + **감지와 기록은 계속되므로** 그 시간대도 사후에 조사할 수 있습니다 +- **오탐 관리** — 카메라·유형별 오탐율을 보고 재조정 대상을 고릅니다 +- **교대 인수인계** — 누가 어떤 미처리 건을 넘겨받았는지 기록 +- **설비 성능 추이** — "지금 살아 있는가"가 아니라 "점점 나빠지고 있는가" +- **설치 점검 화면** — 각 단계가 실제로 동작하는지 조회해서 확인 + +--- + +## 3. 기대효과 + +### 3-1. 즉시 달라지는 것 + +| 항목 | 도입 전 | 도입 후 | +|------|---------|---------| +| 야간·단독 작업 중 쓰러짐 | 다음 순찰·교대까지 방치 | 감지 즉시 경광등, 미확인 시 상위 확대 | +| 위험구역 관리 | 표지판과 교육에 의존 | 진입·단독작업·정원초과를 규칙으로 판정 | +| 사고 조사 | 녹화 뒤져 반나절 | 1클릭 패키지 (전후 맥락·통보·조치 포함) | +| CCTV 인력 | 봐야 보임 | 감지된 사건만 봄 | +| 안전 활동 증빙 | 문서로 주장 | 시스템 기록으로 제시 | + +### 3-2. 시스템이 스스로 측정해 보여주는 효과 + +**이 제품은 자기 효과를 스스로 계측합니다.** 도입 효과를 공급자 주장이 아니라 고객 화면의 +숫자로 확인할 수 있다는 뜻입니다. 안전 리포트에 다음이 나옵니다. + +- **평균 대응 시간 (TTA)** — 감지에서 확인까지 걸린 시간. 이 숫자가 줄어드는 것이 곧 + "발견이 빨라졌다"의 증거입니다 +- **니어미스 : 사고 비율** — 사고 전 신호가 얼마나 먼저 잡히는지. 니어미스가 상대적으로 + 많다는 것은 예방이 앞단에서 작동하고 있다는 뜻입니다 +- **개선 조치 전·후 감지 밀도** — 매트를 깔았더니 그 카메라의 넘어짐이 줄었는가. + **통계적으로 유의하지 않은 변화는 "판정 보류"로 표시**합니다 — 표본 6건에서 나온 + "33% 개선"을 성과로 적으면 안전회의에서 한 번 반박당하고 그 자료 전체가 신뢰를 잃습니다 +- **오탐율 추이** — 시스템이 현장에 맞게 조정되고 있는지 +- **요일×시간 사고 패턴 · 전조 급증 경보** — 인력 배치와 사전 개입의 근거 + +### 3-3. 관리 부담이 줄어드는 지점 + +- 사고조사 자료를 사람이 모으지 않습니다 — 사고 다음 날 반나절을 쓸 수 있는 사람은 없습니다 +- 위험성평가와 실제 감지가 한 곳에 연결되어 있어 갱신 근거가 자동으로 쌓입니다 +- 교대 인수인계와 정비 억제가 기록으로 남아, "그때 왜 알람이 없었나"에 답할 수 있습니다 +- 감사기록 위·변조 탐지로, 제출한 기록의 신뢰성을 별도로 주장할 필요가 없습니다 + +### 3-4. 약속하지 않는 것 + +과장은 도입 후 신뢰를 무너뜨리므로 미리 적습니다. + +- **사고를 없애지 못합니다.** 이 시스템은 사고를 더 빨리 발견하고, 전조를 앞당겨 보여주고, + 대응과 증거를 정리합니다. 사고 자체를 막는 것은 설비·공정·교육이며, 이 시스템은 그 개선의 + **근거를 제공**하는 역할입니다. +- **감지율 100%는 없습니다.** 가려짐·역광·극단적 조도에서는 놓칩니다. 그래서 감시 자신의 + 건전성(화각 변경·가림·조도)을 별도 이벤트로 감지해 **못 보고 있다는 사실을 알립니다.** +- **오탐은 초기에 반드시 발생합니다.** 현장마다 조명·동선·작업 자세가 달라, 첫 2~4주는 + 임계값 조정 기간으로 잡아야 합니다. 그 조정을 고객이 직접 할 수 있도록 오탐율 통계와 + 임계값 편집 화면을 넣었습니다. +- **법적 판단을 대신하지 않습니다.** 리포트와 사고조사 패키지는 안전 활동을 뒷받침하는 + 보조 자료이며, 공식 재해 통계나 법정 서식을 대체하지 않습니다. + +--- + +## 4. 시스템 구성 + +``` + [카메라 CSI/USB · Pi당 2~4대] + │ + ┌──────────▼──────────────────────────────┐ + │ Raspberry Pi 5 + Hailo-8 (26 TOPS) │ ← 엣지: 자세추정 · 이벤트 판정 + │ · 얼굴 블러 (저장 전) │ · 경광등 GPIO 직접 구동 + │ · 오프라인 큐 (회선 단절 대비) │ · 카메라 무결성 감시 + └──────────┬──────────────────────────────┘ + │ HMAC 서명 POST — 스냅샷 3장 + 메타데이터만 (영상 없음) + ▼ + ┌─────────────────────────────────────────┐ + │ 웹 대시보드 (PHP 8 + MySQL) │ ← 일반 웹호스팅에서 동작 + │ 이벤트 콘솔 · 구역 편집 · 안전 리포트 │ 별도 서버 투자 불필요 + │ 안전 관리 · 시스템 설정 · 사고조사 │ + └──────────┬──────────────────────────────┘ + │ + 메일 · 사내 웹훅/문자 게이트웨이 +``` + +### 4-1. 엣지 노드 + +- 하나의 공유 자세추정 모델로 모든 이벤트를 판정 — 카메라마다 모델을 더 올리지 않습니다 +- CSI·USB 카메라 혼용, CPU 폴백 경로 내장 +- 회선 단절 시 오프라인 큐에 보관 후 복구되면 재전송 (중복 전송은 서버가 제거) +- systemd 상주 + 워치독 + 하트비트 텔레메트리 +- 감지 타이머는 단조 시계 기반이라 시스템 시각이 바뀌어도 오판하지 않습니다 + +### 4-2. 서버·대시보드 + +| 화면 | 누가 | 무엇을 | +|------|------|--------| +| 이벤트 | 운영자 | 실시간 스트림, 확인·오탐 판정, 날짜 조회, 일괄 처리 | +| 이벤트 상세 | 운영자 | 증거 3프레임, 판정, 조치 기록, 사고조사 패키지 진입 | +| 구역 설정 | 안전관리자 | 카메라 화면 위 폴리곤, 등급·점유 규칙, 위험 히트맵 | +| 안전 리포트 | 안전관리자 | 주간 회의용 지표 한 장 (인쇄) | +| 안전 관리 | 안전관리자 | 인수인계 · 정비 억제 · 위험성평가 · 설비 성능 | +| 시스템 설정 | 관리자 | 통보 경로 · 감지 임계값 | + +이 외에 **설치 점검**(구성이 실제로 동작하는지 단계별 확인)과 **사고조사 패키지**(인쇄용 +단일 문서) 화면이 있습니다. + +--- + +## 5. 개인정보 보호와 보안 + +작업자 감시 도구로 비치는 순간 현장 도입이 막힙니다. 그래서 프라이버시는 설정이 아니라 +**구조**로 넣었습니다. + +| 영역 | 적용 | +|------|------| +| **영상** | 라이브뷰 없음, 영상 저장·전송 없음. 사건 스냅샷 3장만 | +| **얼굴** | 저장 전에 자동 블러. 원본은 어디에도 남지 않음 | +| **접근** | 스냅샷은 인증 프록시 경유. 보존기간 경과 시 자동 삭제 | +| **통보** | 알림에 이미지 미포함 — 링크만 전송 | +| 전송 보안 | HMAC 서명 + nonce로 위·변조·재전송 차단, 장치·IP별 rate limit | +| 인증 | Argon2id, 로그인 잠금(사용자명 열거 차단), 세션 고정 방지 | +| 권한 | 역할 기반 접근제어 + 현장 스코프, 전 요청 CSRF | +| 웹 | CSP nonce (unsafe-inline 없음), DOM 주입은 textContent만 | +| 기록 | 감사로그 해시체인 — 수정·삭제·우회삽입 탐지 | + +--- + +## 6. 납품과 운영 + +- **웹호스팅 업로드 패키지** — 서버 일체(마이그레이션 8종 포함)를 zip 하나로 업로드, + 설정 파일 한 개만 수정 +- **Pi 설치 번들** — 온라인 설치와 **폐쇄망 오프라인 번들** 모두 제공. + 런타임 휠·모델·소스를 전부 동봉해 설치 중 네트워크가 필요 없습니다 +- **동봉 문서** — 설치 안내서 · **역할별 사용 설명서**(실제 화면 캡처 포함 단일 HTML) · + 변경 내역 · 납품 점검 리포트 +- **자동 실행 2종** — 통보 디스패처(1분) · 보존기간 정리(일 1회) +- **운영 도구** — 백업/복구, 감사기록 무결성 검증, 시연용 데모 데이터 생성 + +--- + +## 7. 품질 근거 + +| 항목 | 현황 | +|------|------| +| 자동화 테스트 | **535건** (엣지 Python 311 · 서버 PHP 224), 스킵 0 (하드웨어 항목 제외) | +| 납품 감사 | 1차 43건 + 재감사 12건 = **55건 전량 해소**, 판정 **적합** | +| 상호운용 검증 | HMAC 골든 벡터로 엣지(Python) ↔ 서버(PHP) 대조 | +| 계층 정합 검증 | 감지 유형이 엣지·검증기·DB·화면 네 곳에서 일치하는지 자동 검사 | +| 납품물 검증 | 산출물↔소스 패리티, 패키지 내부 클래스 해석·문법 검사, 무결성 해시 | +| CI | 검증 명령 단일화, 스킵 발생 시 빌드 실패 | + +> 감사에서 실제로 잡힌 대표 사례: 신규 감지 유형이 서버 검증기에만 누락되어 **감지기가 +> 구현·배포되고도 아무 이벤트도 남기지 못하던 상태**를 발견해 수정하고, 재발 방지 테스트를 +> 추가했습니다. 이런 "조용한 실패"를 찾는 것이 이 프로젝트 감사 사이클의 목적입니다. + +--- + +## 8. 기술 스택 + +| 구분 | 기술 | +|------|------| +| 엣지 하드웨어 | Raspberry Pi 5 + AI HAT+ (Hailo-8, 26 TOPS) | +| 엣지 소프트웨어 | Python, Hailo HEF 자세추정 (CPU 폴백 내장) | +| 카메라 | CSI (picamera2) · USB (V4L2 MJPEG), Pi당 2~4대 | +| 서버 | PHP 8 + PDO + MySQL — 일반 웹호스팅에서 동작 | +| 프런트엔드 | 바닐라 JavaScript (빌드 도구 없음) | +| 배포 | 오프라인 번들 · systemd · zip 업로드 패키지 | + +--- + +## 9. 현재 한계와 다음 단계 + +### 9-1. 모델 확보가 선행되어야 하는 항목 + +보호구 미착용 · 중장비 근접 · 화재/연기 감지는 **감지기 배선·이벤트 규격·테스트까지 완성되어 +있고 추론 모델만 비어 있습니다.** 라이선스 조건을 만족하는 가중치 확보와 엣지 컴파일이 +선행 조건입니다. + +이 상태를 "곧 됩니다"로 켜두지 않고 **명시적으로 비활성**으로 둔 것은 의도적입니다 — +켜져 있으면 현장은 감지되고 있다고 믿게 되고, 그 믿음이 가장 위험합니다. + +### 9-2. 현장 설치 시 검증할 항목 + +코드로 닫을 수 없고 실장비에서만 확인 가능한 항목입니다. 설치 시 반드시 수행합니다. + +- 경광등 실제 구동 (배선·극성·유지시간) +- 카메라 무결성 임계값을 현장 조명·진동에 맞게 조정 +- 낙상 판정 타이밍을 실제 영상으로 조정 — 블라인드 조정은 감지 **누락**을 만들 수 있어 + 현장 확보 후로 미뤘습니다 +- 통보 1회 실발송 (시험 발송으로 대상 확인 후) + +### 9-3. 다음 단계 + +- 위 감지 3종 활성화 (모델 확보 시) +- 기계 가동 상태 연동 협착 판정 — 협착구역은 기계가 돌 때만 위험합니다 +- 다현장 통합 운영 (본사 관점 롤업은 이미 제공) + +--- + +## 부록. 한눈에 보기 + +| | | +|---|---| +| **한 줄 정의** | 쓰러진 작업자를 3초면 알아채고, 현장에 즉시 울리고, 5분 안에 확인되지 않으면 위로 올리며, 그 전 과정을 증거로 남기는 시스템 | +| **핵심 차별점** | ① 감지에서 끝나지 않고 **현장 경광등·에스컬레이션까지** ② **감시 자신의 고장**을 감지 ③ **사고조사 패키지 1클릭** ④ 위·변조 탐지 감사기록 | +| **프라이버시** | 라이브뷰·영상 전송 없음 · 얼굴 저장 전 블러 · 알림에 이미지 미포함 | +| **운영 비용** | 클라우드 GPU 없음, 일반 웹호스팅에서 동작 | +| **감지 유형** | 17종 활성 (+ 모델 확보 대기 3종) | +| **검증** | 테스트 535건 · 납품 감사 55건 전량 해소 |