move_detect/docs/deck/deck.json
유창욱 bebf426c2e release: 1.1.0 — 서버 전용 릴리스 (감시 자신의 고장 신고)
1.0.0 이후 edge/ 는 한 줄도 바뀌지 않았다(git diff 확인). 바뀐 것은 서버뿐이라
서버 전용 릴리스로 낸다.

왜 버전을 올리는가: dist/ 재생성으로 DeviceHealthWatch 가 이미 패키지에 들어가
있는데 VERSION 은 1.0.0 이었다. 그대로 두면 "1.0.0" 이름표를 단 서로 다른
패키지가 두 종류 생긴다. 기능 추가이므로 1.1.0.

- VERSION 1.0.0 -> 1.1.0
- CHANGELOG "미출시 (main)" 절을 1.1.0 으로 확정
- dist 재생성 + 구버전 ZIP 제거(같은 폴더에 두 버전이 있으면 잘못 집는다)
  -> move-detect-cafe24-1.1.0-20260904.zip
- 사용설명서·경영진 덱·소개서 재생성 (전부 VERSION 을 표기에 쓴다)

Pi 번들은 이번 릴리스에서 갱신하지 않았다. edge/ 가 불변이라 내용은 1.0.0 과
동일하고, 재빌드는 arm64 + 네트워크(pip download, fetch_hailo_hef)가 있는 빌드
머신에서만 가능하다. dist/ 에는 1.0.0 타르볼이 그대로 남아 있으므로, Pi 를
납품할 때 그 머신에서 재빌드해 파일명 버전을 맞춰야 한다.

검증: pytest 308 passed / phpunit 240 passed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EBjuR7DW6PNNMows4KnbYU
2026-09-04 23:45:40 +09:00

203 lines
No EOL
9.7 KiB
JSON

{
"title": "작업장 안전 AI CCTV",
"subtitle": "쓰러진 사람을 3초 안에 알아채고, 경광등을 울리고, 증거를 남깁니다",
"audience": "경영진 보고",
"slides": [
{
"kind": "cover",
"image": "01-현장-설치.jpg",
"eyebrow": "제품 보고",
"title": "작업장 안전 AI CCTV",
"lead": "쓰러진 사람을 3초 안에 알아채고, 경광등을 울리고, 증거를 남깁니다.",
"foot": "감지 · 대응 · 증거 — 셋이 한 사슬로 묶인 시스템"
},
{
"kind": "statement",
"eyebrow": "문제",
"title": "CCTV는 이미 있습니다.<br>그런데 왜 사고를 못 막습니까.",
"columns": [
{
"head": "아무도 안 보고 있다",
"body": "카메라 수십 대를 사람이 실시간으로 볼 수는 없습니다. 화면은 사고가 난 뒤에 되감기 위한 것이 됩니다."
},
{
"head": "알아도 알릴 방법이 없다",
"body": "설령 감지해도 화면에만 뜨면 그것은 기록 장치입니다. 새벽 3시에 넘어진 사람은 아침까지 그대로입니다."
},
{
"head": "나중에 설명할 수 없다",
"body": "사고 조사에서 필요한 것은 영상이 아니라 시각·조치·통보의 기록인데, 그 기록이 남지 않습니다."
}
]
},
{
"kind": "figure",
"eyebrow": "해결 구조",
"title": "하나의 사슬입니다",
"image": "05-사슬.png",
"note": "어느 한 칸이 비면 나머지가 무의미해집니다. 감지만 있으면 아무도 모르고, 대응만 있으면 나중에 설명할 수 없습니다."
},
{
"kind": "clip",
"eyebrow": "핵심 시연",
"title": "쓰러지면, 경광등이 켜집니다",
"clip": "v01-넘어짐-경광등.mp4",
"poster": "02-경광등.jpg",
"caption": "쓰러진 자세가 3초 지속되면 확정. 감지한 노드가 자기 GPIO로 직접 울립니다.",
"points": [
"서버도 인터넷도 거치지 않습니다 — 회선이 끊겨도, 서버가 죽어도 울립니다",
"10초 넘게 움직임이 없으면 최상위 위급으로 스스로 올라갑니다",
"1분 안에 담당자에게, 5분 안에 확인되지 않으면 상위 담당자에게"
]
},
{
"kind": "figure",
"eyebrow": "판정 근거",
"title": "언제 감지되는지 설명할 수 있습니다",
"image": "08-넘어짐-감지-시퀀스.jpg",
"note": "한 프레임 보고 놀라서 울리는 것이 아니라, 자세가 지속되는지를 초 단위로 확인하고 단계적으로 올립니다. 도중에 일어서면 알람 없이 니어미스로만 기록됩니다 — 사고 전 신호가 통계로 쌓입니다."
},
{
"kind": "compare",
"eyebrow": "가장 많이 받는 질문",
"title": "앉으면 오탐이 나지 않습니까",
"left": {
"label": "울리지 않음",
"tone": "ok",
"clip": "v02-앉기-정상.mp4",
"poster": "09-앉기-vs-넘어짐.jpg",
"body": "쭈그려 앉거나 허리를 굽힌 자세는 세로가 여전히 깁니다."
},
"right": {
"label": "울림",
"tone": "alarm",
"clip": "v01-넘어짐-경광등.mp4",
"poster": "08-넘어짐-감지-시퀀스.jpg",
"body": "가로가 세로보다 넓어진 상태가 3초 이상 지속될 때만 확정합니다."
},
"note": "그래도 오탐은 납니다. 화면에서 오탐 표시 한 번이면 통계에서 빠지고, 감도 조정의 근거가 됩니다. 오탐율은 화면에 그대로 표시됩니다.",
"fallback": "09-앉기-vs-넘어짐.jpg"
},
{
"kind": "clip",
"eyebrow": "구역 규칙",
"title": "위험구역은 화면 위에 직접 그립니다",
"clip": "v04-구역진입.mp4",
"poster": "10-위험구역-판정.jpg",
"caption": "판정 기준은 발 위치입니다. 구역 안에 0.75초 이상 머물면 이벤트가 남습니다.",
"points": [
"경고 · 제한 · 협착 3단계로 위험도를 나눠 지정합니다",
"2인 1조 구역에 혼자 남으면 30초 뒤 사건이 됩니다",
"정원 초과 · 장시간 체류도 같은 방식으로 규칙화됩니다"
]
},
{
"kind": "clip",
"eyebrow": "차별점",
"title": "감시 장비 자신의 고장도 신고합니다",
"clip": "v05-카메라-건드림.mp4",
"poster": "01-현장-설치.jpg",
"caption": "청소하다 카메라를 스치면 위험구역이 엉뚱한 바닥을 가리킵니다. 그런데 프레임은 계속 들어오고 화면은 정상으로 보입니다.",
"points": [
"화각 변경 · 렌즈 가림 · 조도 저하를 스스로 감지합니다",
"노드가 응답을 멈추면 서버가 하트비트의 부재로 판정합니다",
"\"아무도 확인하지 않았다\"는 사실 자체도 사건으로 기록됩니다"
],
"kicker": "이것이 이 제품의 조용한 실패 방어선입니다. 대부분의 감시 시스템은 자기가 멈춘 것을 모릅니다."
},
{
"kind": "figure",
"eyebrow": "기대효과",
"title": "달라지는 것은 발견까지 걸리는 시간입니다",
"image": "07-대응시간.png",
"note": "사고를 없애지는 못합니다. 발견과 대응이 빨라질 뿐입니다 — 그런데 쓰러진 사람에게는 그 차이가 결과를 바꿉니다."
},
{
"kind": "metrics",
"eyebrow": "기대효과",
"title": "효과는 저희가 주장하지 않습니다.<br>시스템이 스스로 측정해 보여줍니다",
"items": [
{
"head": "평균 대응시간",
"body": "감지에서 확인까지 걸린 시간. 개선 활동의 성패가 이 숫자 하나로 드러납니다."
},
{
"head": "니어미스 : 사고 비율",
"body": "넘어질 뻔한 횟수가 쌓입니다. 사고가 나기 전에 어디가 위험한지 보입니다."
},
{
"head": "조치 전후 감지 밀도",
"body": "안전 조치를 한 구역에서 이벤트가 실제로 줄었는지 히트맵으로 비교합니다."
},
{
"head": "오탐율",
"body": "숨기지 않고 화면에 표시합니다. 신뢰할 수 있는 시스템인지 스스로 증명하게 합니다."
}
],
"note": "공급자의 ROI 추정이 아니라 고객 화면의 숫자입니다."
},
{
"kind": "statement",
"eyebrow": "반드시 나올 질문",
"title": "\"근로자 감시 아닙니까\"",
"lead": "노조가 물을 것이고, 물어야 합니다. 답은 약속이 아니라 구조여야 합니다.",
"columns": [
{
"head": "영상을 녹화하지 않습니다",
"body": "실시간으로 들여다보는 화면 자체가 제품에 없습니다. 위험 상황이 감지된 순간에만 사진 3장이 남고, 7일 뒤 자동 삭제됩니다."
},
{
"head": "누구인지 모릅니다",
"body": "이름도 사번도 얼굴 인식도 없습니다. 얼굴은 카메라 쪽에서, 전송 전에 가려집니다."
},
{
"head": "근무태도 기능이 없습니다",
"body": "감지 17종 전부가 위험 상태입니다. 자리 비움·작업 속도는 만들 수 있는 기능 자체가 없습니다."
}
],
"note": "존재하지 않는 데이터는 열람될 수 없고, 유출될 수 없고, 목적 외로 쓰일 수 없습니다. 접근 통제는 되돌릴 수 있지만 미수집은 되돌릴 수 없습니다."
},
{
"kind": "figure",
"eyebrow": "구성",
"title": "현장에 노드, 사무실에 대시보드",
"image": "06-구성도.png",
"note": "노드에서 서버로 가는 것은 스냅샷 3장과 메타데이터뿐입니다. 폐쇄망에서도 동작하며, 회선이 끊긴 동안의 이벤트는 노드에 쌓였다가 복구되면 올라갑니다."
},
{
"kind": "status",
"eyebrow": "현재 상태",
"title": "지금 어디까지 와 있습니까",
"done": {
"head": "완료 — 1.1.0 납품 버전",
"items": [
"감지 17종 · 통보 · 에스컬레이션 · 사고조사 패키지",
"자동 테스트 548건 통과 (엣지 308 · 서버 240)",
"납품 점검 43건 + 재감사 12건 전량 해소 — 판정 적합",
"폐쇄망 설치 패키지 · 역할별 사용설명서"
]
},
"pending": {
"head": "남은 것 — 실장비 현장 검증",
"items": [
"경광등 실제 점등 · 카메라 감도 현장 튜닝",
"실제 영상으로 넘어짐 판정 타이밍 확인",
"보호구 미착용 · 중장비 근접 · 화재 감지는 모델 확보가 선행되어야 합니다"
]
},
"note": "감지율 100%는 없습니다. 초기에는 오탐이 반드시 납니다. 그 사실을 숨기지 않는 것이 이 시스템을 계속 쓰게 만드는 조건입니다."
},
{
"kind": "closing",
"eyebrow": "요약",
"title": "이 시스템이 하는 일",
"lines": [
"쓰러진 자세가 <b>3초</b> 지속되면 확정하고,",
"감지한 노드가 <b>즉시</b> 경광등을 울리고,",
"<b>1분</b> 안에 담당자에게, <b>5분</b> 안에 확인되지 않으면 위로 올립니다.",
"그리고 무슨 일이 있었는지 <b>지울 수 없는 형태로</b> 남깁니다."
],
"foot": "감지 · 대응 · 증거"
}
]
}