영어 | 繁체중국어
서버-API | 스트리밍 웹 | 데이터 증강 | 평가 | 기차
"Construction-Hazard-Detection"은 건설 현장의 안전을 강화하도록 설계된 AI 기반 도구입니다. 물체 감지를 위해 YOLO 모델을 활용하여 다음과 같은 잠재적인 위험을 식별합니다.
헬멧을 착용하지 않은 근로자
안전조끼를 입지 않은 근로자
기계나 차량 근처에 있는 근로자
제한 구역의 작업자, 제한 구역은 안전 콘의 좌표를 계산하고 클러스터링하여 자동으로 생성됩니다.
후처리 알고리즘은 감지 정확도를 더욱 향상시킵니다. 이 시스템은 실시간 배포용으로 구축되어 식별된 위험에 대한 즉각적인 분석 및 경고를 제공합니다.
또한 이 시스템은 웹 인터페이스를 통해 AI 인식 결과를 실시간으로 통합합니다. LINE, 메신저, 위챗, 텔레그램 등 메시징 앱을 통해 알림과 실시간 현장 이미지를 보내 즉각적인 알림을 받을 수 있습니다. 또한 이 시스템은 여러 언어를 지원하므로 사용자는 원하는 언어로 알림을 받고 인터페이스와 상호 작용할 수 있습니다. 지원되는 언어는 다음과 같습니다.
중국어 번체(대만)
중국어 간체(중국 본토)
프랑스 국민
영어
태국어
베트남 사람
인도네시아 인
이러한 다국어 지원을 통해 전 세계 사용자가 시스템에 액세스할 수 있으므로 다양한 지역에서의 가용성이 향상됩니다.
위험 감지 예
용법
추가 정보
데이터 세트 정보
기여
개발 로드맵
특허
다음은 시스템에 의한 실시간 위험 감지의 예입니다.
헬멧이나 안전조끼를 착용하지 않은 근로자
기계 또는 차량 근처의 작업자
제한 구역의 근로자
애플리케이션을 실행하기 전에 JSON 구성 파일에 비디오 스트림의 세부 정보와 기타 매개변수를 지정하여 시스템을 구성해야 합니다. 예제 구성 파일 config/configuration.json
은 다음과 같습니다.
[ {"video_url": "https://cctv1.kctmc.nat.gov.tw/6e559e58/","site": "가오슝","stream_name": "테스트","model_key": "yolo11n","알림 ": { "line_token_1": "언어_1", "line_token_2": "언어_2"},"Detect_with_server": true,"expire_date": "2024-12-31T23:59:59","Detection_items": { "Detect_no_safety_vest_or_helmet": true, "Detect_near_machinery_or_vehicle": true, "Detect_in_restricted_area": true} ,"작업_시작_시간": 7,"work_end_hour": 18,"store_in_redis": 사실 }, {"video_url": "스트리밍 URL","site": "Factory_1","stream_name": "camera_1","model_key": "yolo11n","notifications": { "line_token_3": "언어_3", "line_token_4" : "언어_4"},"Detect_with_server": false,"expire_date": "만료 없음 날짜","Detection_items": { "Detect_no_safety_vest_or_helmet": 참, "Detect_near_machinery_or_vehicle": 거짓, "Detect_in_restricted_area": 참},"work_start_hour": 0,"work_end_hour": 24,"store_in_redis": 참 } ]
배열의 각 객체는 다음 필드가 포함된 비디오 스트림 구성을 나타냅니다.
video_url
: 라이브 비디오 스트림의 URL입니다. 여기에는 다음이 포함될 수 있습니다.
감시 스트림
RTSP 스트림
보조 스트림
YouTube 동영상 또는 실시간 스트림
디스코드 스트림
site
: 모니터링 시스템의 위치(예: 건설 현장, 공장)입니다.
stream_name
: 카메라 또는 스트림에 할당된 이름입니다(예: "Front Gate", "Camera 1").
model_key
: 사용할 기계 학습 모델의 키 식별자(예: "yolo11n")입니다.
notifications
: 알림을 보내기 위한 LINE 메시징 API 토큰 및 해당 언어 목록입니다.
알림에 지원되는 언어는 다음과 같습니다.
LINE 토큰 획득 방법에 대한 자세한 내용은 line_notify_guide_en을 참조하세요.
zh-TW
: 중국어 번체
zh-CN
: 중국어 간체
en
: 영어
fr
: 프랑스어
vi
: 베트남어
id
: 인도네시아어
th
: 태국어
line_token_1
, line_token_2
등: LINE API 토큰입니다.
language_1
, language_2
등: 알림 언어입니다(예: 영어의 경우 "en", 중국어 번체의 경우 "zh-TW").
detect_with_server
: 서버 API를 사용하여 객체 감지를 실행할지 여부를 나타내는 부울 값입니다. True
인 경우 시스템은 개체 감지를 위해 서버를 사용합니다. False
이면 객체 감지가 머신에서 로컬로 실행됩니다.
expire_date
: ISO 8601 형식의 비디오 스트림 구성 만료 날짜(예: "2024-12-31T23:59:59"). 만료 날짜가 없는 경우 "No Expire Date"와 같은 문자열을 사용할 수 있습니다.
detection_items
: 특정 시나리오를 모니터링하기 위한 안전 감지 항목을 지정합니다. 각 항목을 True
로 설정하여 활성화하거나 False
설정하여 비활성화할 수 있습니다. 사용 가능한 탐지 항목은 다음과 같습니다.
detect_no_safety_vest_or_helmet
: 사람이 안전 조끼나 헬멧을 착용하지 않았는지 감지합니다. 이는 인력 보호를 위해 해당 장비가 필수인 현장에서 안전 장비 요구 사항 준수를 모니터링하는 데 필수적입니다.
detect_near_machinery_or_vehicle
: 사람이 기계나 차량에 위험할 정도로 가까이 있는지 감지합니다. 이는 건설 현장이나 산업 현장에서 자주 발생하는 중장비나 이동 차량에 근접하여 발생하는 사고를 예방하는 데 도움이 됩니다.
detect_in_restricted_area
: 사람이 제한 구역이나 통제 구역에 진입했는지 감지합니다. 제한된 구역은 훈련받지 않은 인력에게 위험할 수 있거나 민감한 장비를 포함할 수 있으므로 이 설정은 해당 구역에 대한 접근을 제어하는 데 도움이 됩니다.
work_start_hour
: 시스템이 비디오 스트림 모니터링을 시작해야 하는 시간(24시간 형식)을 지정합니다. 이를 통해 모니터링을 활성 근무 시간으로 제한하여 정의된 시간 범위(예: 오전 7시에 7
) 이외의 불필요한 처리를 줄일 수 있습니다.
work_end_hour
: 시스템이 비디오 스트림 모니터링을 중지해야 하는 시간(24시간 형식)을 지정합니다. 리소스 사용량을 최적화하기 위해 이 시간 이후에는 모니터링이 중단됩니다(예: 오후 6시에 18
).
work_start_hour
와 work_end_hour
함께 하루 동안의 모니터링 기간을 정의합니다. 24시간 모니터링의 경우 work_start_hour
0
으로 설정하고 work_end_hour
24
로 설정합니다.
store_in_redis
: 처리된 프레임 및 관련 감지 데이터를 Redis에 저장할지 여부를 결정하는 부울 값입니다. True
인 경우 시스템은 실시간 모니터링 또는 다른 서비스와의 통합과 같은 추가 사용을 위해 데이터를 Redis 데이터베이스에 저장합니다. False
인 경우 Redis에 데이터가 저장되지 않습니다.
적절한 구성을 위해서는 애플리케이션에 특정 환경 변수가 필요합니다. 이러한 변수는 프로젝트의 루트 디렉터리에 있는 .env
파일에 정의되어야 합니다. 다음은 .env
파일의 예입니다.
DATABASE_URL='mysql+asyncmy://username:password@mysql/construction_hazard_detection'
API_USERNAME='user'
API_PASSWORD='password'
API_URL="http://yolo-server-api:6000"
REDIS_HOST='redis'
REDIS_PORT=6379
REDIS_PASSWORD='password'
LINE_CHANNEL_ACCESS_TOKEN='YOUR_LINE_CHANNEL_ACCESS_TOKEN'
CLOUDINARY_CLOUD_NAME='YOUR_CLOUDINARY_CLOUD_NAME'
CLOUDINARY_API_KEY='YOUR_CLOUD_API_KEY'
CLOUDINARY_API_SECRET='YOUR_CLOUD_API_SECRET'
DATABASE_URL
: MySQL 데이터베이스의 연결 URL입니다. server_api
모듈에서 사용됩니다.
API_USERNAME
: API 인증을 위한 사용자 이름입니다. main.py
에서 사용됩니다.
API_PASSWORD
: API 인증을 위한 비밀번호입니다. main.py
에서 사용됩니다.
API_URL
: YOLO 서버 API의 URL입니다. main.py
에서 사용됩니다.
REDIS_HOST
: Redis 서버의 호스트 이름입니다. main.py
에서 사용됩니다.
REDIS_PORT
: Redis 서버의 포트 번호입니다. main.py
에서 사용됩니다.
REDIS_PASSWORD
: Redis 서버에 접속하기 위한 비밀번호입니다. main.py
에서 사용됩니다.
LINE_CHANNEL_ACCESS_TOKEN
: LINE Messaging API에 대한 액세스 토큰입니다. src/notifiers/line_notifier_message_api.py
에서 사용됩니다.
CLOUDINARY_CLOUD_NAME
: 미디어 관리를 위한 Cloudinary 클라우드 이름입니다. src/notifiers/line_notifier_message_api.py
에서 사용됩니다.
CLOUDINARY_API_KEY
: Cloudinary 서비스에 액세스하기 위한 API 키입니다. src/notifiers/line_notifier_message_api.py
에서 사용됩니다.
CLOUDINARY_API_SECRET
: Cloudinary 서비스에 액세스하기 위한 API 비밀번호입니다. src/notifiers/line_notifier_message_api.py
에서 사용됩니다.
참고 : 올바른 기능을 보장하려면 자리 표시자 값을 실제 자격 증명 및 구성 세부 정보로 바꾸세요.
이제 Docker 또는 Python 환경에서 위험 감지 시스템을 시작할 수 있습니다.
위험 감지 시스템을 실행하려면 머신에 Docker 및 Docker Compose가 설치되어 있어야 합니다. 시스템을 시작하고 실행하려면 다음 단계를 따르세요.
저장소를 로컬 머신에 복제합니다.
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
복제된 디렉터리로 이동합니다.
cd Construction-Hazard-Detection
Docker Compose를 사용하여 서비스를 빌드하고 실행합니다.
도커 작성 빌드
애플리케이션을 실행하려면 다음 명령을 사용하십시오.
도커 작성
http://localhost에서 탐지 결과를 볼 수 있습니다.
서비스를 중지하려면 다음 명령을 사용하십시오.
도커 작성
Python으로 위험 감지 시스템을 실행하려면 다음 단계를 따르세요.
다음 명령을 사용하여 GitHub에서 저장소를 복제합니다.
자식 클론 https://github.com/yihong1120/Construction-Hazard-Detection.git
디렉터리를 새로 복제된 저장소로 변경합니다.
cd 건설-위험-감지
다음 명령을 실행하여 필요한 Python 패키지를 설치합니다.
pip 설치 -r 요구사항.txt
터미널을 열고 다음 명령을 실행하여 MySQL 서버를 설치하고 시작합니다.
sudo 적절한 업데이트 sudo apt 설치 mysql-서버 sudo systemctl start mysql.service
MySQL 다운로드 페이지에서 운영 체제에 적합한 MySQL 버전을 다운로드하여 설치하세요.
MySQL을 설치한 후 다음 명령을 사용하여 construction_hazard_detection
데이터베이스를 초기화하고 users
테이블을 생성하십시오.
mysql -u 루트 -p < scripts/init.sql
MySQL 루트 비밀번호를 입력하라는 메시지가 표시됩니다. 앞에서 설명한 대로 데이터베이스와 테이블을 설정하는 데 필요한 SQL 명령이 scripts/init.sql
파일에 포함되어 있는지 확인하십시오.
Redis는 스트리밍 웹 기능을 사용할 때만 필요합니다. Redis를 설정하려면 아래 단계를 따르세요.
Redis 설치
터미널을 열고 다음 명령을 실행하십시오.
sudo 적절한 업데이트 sudo apt 설치 redis-서버
Redis 구성(선택 사항)
사용자 정의 설정이 필요한 경우 Redis 구성 파일을 편집합니다.
sudo vim /etc/redis/redis.conf
보안을 강화하려면 다음 줄을 추가하거나 수정하여 비밀번호 보호를 활성화하십시오.
requirepass YourStrongPassword
YourStrongPassword
안전한 비밀번호로 바꾸세요.
Redis 서비스 시작 및 활성화
Redis 서비스를 시작합니다.
sudo systemctl start redis.service
부팅 시 Redis가 자동으로 시작되도록 활성화합니다.
sudo systemctl 활성화 redis.service
운영 체제별 지침은 공식 Redis 설치 가이드를 참조하세요.
다음 명령을 사용하여 객체 감지 API를 시작합니다.
uvicorn 예제.YOLO_server.backend.app:sio_app --host 0.0.0.0 --port 8001
다음 명령을 사용하여 기본 애플리케이션을 실행하고 구성 파일을 지정합니다.
python3 main.py --config config/configuration.json
config/configuration.json
구성 파일의 실제 경로로 바꿉니다.
Linux 시스템에서 백엔드 서비스를 시작하려면 다음 명령어를 실행하세요.
uvicorn example.streaming_web.backend.app:sio_app --host 127.0.0.1 --port 8002
Windows 시스템에서 백엔드 서비스를 시작하려면 다음 명령을 사용하십시오.
웨이트리스 서버 --host=127.0.0.1 --port=8002 "examples.streaming_web.backend.app:streaming-web-app"
배포 지침은 examples/YOLO_server_api/frontend/nginx.conf
파일을 참조하세요. 정적 웹 파일을 다음 디렉터리에 배치합니다.
examples/YOLO_server_api/frontend/dist
시스템 로그는 Docker 컨테이너 내에서 사용할 수 있으며 디버깅 목적으로 액세스할 수 있습니다.
감지된 출력 이미지(활성화된 경우)는 지정된 출력 경로에 저장됩니다.
위험이 감지되면 지정된 시간 동안 LINE 메시징 API를 통해 알림이 전송됩니다.
Dockerfile
이 프로젝트의 루트 디렉터리에 있고 애플리케이션 요구 사항에 따라 올바르게 구성되었는지 확인하세요.
Docker 사용법 및 명령에 대한 자세한 내용은 Docker 설명서를 참조하세요.
이 모델을 훈련하기 위한 기본 데이터 세트는 Roboflow의 건설 현장 안전 이미지 데이터 세트입니다. 우리는 추가 주석으로 이 데이터 세트를 강화하고 Roboflow에서 공개적으로 액세스할 수 있도록 했습니다. 향상된 데이터 세트는 Roboflow의 건설 위험 감지에서 찾을 수 있습니다. 이 데이터세트에는 다음 라벨이 포함되어 있습니다.
0: 'Hardhat'
1: 'Mask'
2: 'NO-Hardhat'
3: 'NO-Mask'
4: 'NO-Safety Vest'
5: 'Person'
6: 'Safety Cone'
7: 'Safety Vest'
8: 'Machinery'
9: 'Vehicle'
모델 | 크기 (픽셀) | 지도 값 50 | 지도 값 50-95 | 매개변수 (중) | FLOP (비) |
---|---|---|---|---|---|
욜로11n | 640 | 58.0 | 34.2 | 2.6 | 6.5 |
YOLO11 | 640 | 70.1 | 44.8 | 9.4 | 21.6 |
욜로11분 | 640 | 73.3 | 42.6 | 20.1 | 68.0 |
욜로11l | 640 | 77.3 | 54.6 | 25.3 | 86.9 |
욜로11x | 640 | 82.0 | 61.7 | 56.9 | 194.9 |
우리의 포괄적인 데이터 세트는 모델이 건설 환경에서 흔히 발견되는 광범위한 잠재적 위험을 식별할 수 있도록 잘 갖추어져 있음을 보장합니다.
WhatsApp 알림에 대한 지원을 추가합니다.
예제/YOLO server_api/프론트엔드 모바일 버전의 UI 인터페이스 수정
우리는 이 프로젝트에 대한 기여를 환영합니다. 다음 단계를 따르십시오.
저장소를 포크하십시오.
원하는 대로 변경하세요.
개선 사항에 대한 명확한 설명과 함께 풀 요청을 제출하세요.
이 프로젝트는 AGPL-3.0 라이선스에 따라 라이선스가 부여됩니다.