받은 이미지 11장을 docs/images/ 로 최적화 배치(37.6MB -> 3.3MB: 사진은
JPEG q88, 평면 다이어그램은 PNG-8, 최대폭 1600). 원본은 image/ 에 그대로 둔다.
소개서: 매니페스트(docs/소개서-이미지.json)로 11장을 절에 배치해 HTML 재생성
(4.6MB 단일 파일). 표지 컷은 1장 앞에 before-heading 으로.
경영진 보고 덱(docs/deck/): 14장. 매뉴얼 생성기와 같은 구조 —
deck.json(내용) + build_deck.py(생성기) + clips/(3초 클립). 손으로 쓴 HTML 은
두 번째 수정부터 낡고, 낡은 덱은 회의실에서 틀린 숫자를 띄운다.
클립이 없으면 포스터 스틸로 자동 대체되므로 지금 상태로도 완성본이다.
비교 슬라이드는 클립이 하나도 없으면 이미 좌우 비교인 09 스틸 1장으로
바뀐다 — 좌우 패널에 쪼개 넣으면 같은 비교가 두 겹이 된다.
모든 클립·스틸에 '재현' 배지를 템플릿에 박았다. 이 영상들은 제품 동작
녹화가 아니라 연출된 재현이고, 실제 동작처럼 보여주면 허위 시연이 된다.
배지 문구는 매체를 따른다(영상/이미지) — 스틸에 "재현 영상"은 그 자체가
작은 거짓말이다. 실화면 캡처 8장에는 배지가 붙지 않는다.
실렌더로 확인하며 잡은 결함:
- 마지막 슬라이드가 백지였다. :nth-child(even) 이 section.closing 보다
명시도가 높아 네이비 배경을 덮고, 흰 글자가 흰 배경에 얹혔다(대비 1:1).
- 한국어 제목이 어절 중간에서 끊겼다("설명할 수 있습/니다") — CJK 기본
줄바꿈이 글자 단위다. word-break:keep-all.
- 슬라이드 이동이 전혀 동작하지 않았다. scroll-snap-type:y mandatory 인
컨테이너에서 behavior:'smooth' 가 취소되고 원위치로 스냅된다
(측정: smooth->0, auto->905). 즉시 전환으로 변경 — 덱에서는 컷 전환이
오히려 슬라이드답다. 키보드가 항상 잡히는 것은 아니라 이전/다음 버튼도 추가.
- 도판이 커서 하단 주석이 화면 밖으로 밀렸다(max-height 하향).
- 표지 베일이 무거워 경광등 빨강이 죽었다 — 이 제품의 상징색이라 살렸다.
- 4번과 5번이 같은 도판을 썼다(포스터 교체).
접근성 게이트(측정): 대비 실패 0건. figcaption 4.35:1 미달로 --ink-3 을
#5C6474 로, 네이비 위 슬라이드 번호 2.0:1 을 #8FB2E2 로 교정. 레일 점은
7x7 이라 발표 중 못 맞춘다 — 점은 그대로 두고 히트영역 24x24(WCAG 2.5.8),
이전/다음 버튼 46x46.
영상 브리프(docs/영상-브리프.md): 3초 클립 6종. 스틸이 못 하는 것만 발주
했고, 클립마다 0.0~3.0초 타임라인·프레임 안에 반드시 있어야 할 것·피할 것을
적었다. 대시보드 녹화는 제외 — 실화면 캡처가 이미 있고 그건 진짜다.
생성물(경영진-보고.html)과 clips/ 는 gitignore — 사용설명서.html 과 같은 이유.
203 lines
No EOL
9.7 KiB
JSON
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.0.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": "감지 · 대응 · 증거"
|
|
}
|
|
]
|
|
} |