английский | 繁體中文
Сервер-API | Стриминг-Интернет | Увеличение данных | Оценка | Тренироваться
«Обнаружение опасностей в строительстве» — это инструмент на базе искусственного интеллекта, предназначенный для повышения безопасности на строительных площадках. Используя модель YOLO для обнаружения объектов, она выявляет потенциальные опасности, такие как:
Рабочие без касок
Рабочие без жилетов безопасности
Рабочие возле машин или транспортных средств
Рабочие в зонах ограниченного доступа, зоны ограниченного доступа будут автоматически генерироваться путем расчета и кластеризации координат конусов безопасности.
Алгоритмы постобработки еще больше повышают точность обнаружения. Система создана для развертывания в режиме реального времени, предлагая мгновенный анализ и оповещения об обнаруженных опасностях.
Кроме того, система интегрирует результаты распознавания ИИ в режиме реального времени через веб-интерфейс. Он может отправлять уведомления и изображения на месте в режиме реального времени через приложения для обмена сообщениями, такие как LINE, Messenger, WeChat и Telegram, для оперативных оповещений и напоминаний. Система также поддерживает несколько языков, что позволяет пользователям получать уведомления и взаимодействовать с интерфейсом на предпочитаемом ими языке. Поддерживаемые языки включают:
Традиционный китайский (Тайвань)
Упрощенный китайский (материковый Китай)
Французский
Английский
тайский
вьетнамский
индонезийский
Такая многоязычная поддержка делает систему доступной для глобальной аудитории, повышая удобство использования в разных регионах.
Примеры обнаружения опасностей
Использование
Дополнительная информация
Информация о наборе данных
Содействие
Дорожная карта развития
Лицензия
Ниже приведены примеры обнаружения угроз системой в режиме реального времени:
Рабочие без касок и защитных жилетов
Рабочие возле машин или транспортных средств
Рабочие в зонах ограниченного доступа
Перед запуском приложения необходимо настроить систему, указав детали видеопотоков и другие параметры в файле конфигурации JSON. Пример файла конфигурации config/configuration.json
должен выглядеть следующим образом:
[ {"video_url": "https://cctv1.kctmc.nat.gov.tw/6e559e58/","site": "Гаосюн","stream_name": "Test","model_key": "yolo11n","notifications ": { "line_token_1": "language_1", "line_token_2": "language_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}, «work_start_hour»: 7, «work_end_hour»: 18, «store_in_redis»: true }, {"video_url": "URL потоковой передачи","site": "Factory_1","stream_name": "camera_1","model_key": "yolo11n","notifications": { "line_token_3": "language_3", "line_token_4" : "language_4"},"detect_with_server": false,"expire_date": "Нет срока действия 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
: имя, присвоенное камере или потоку (например, «Передние ворота», «Камера 1»).
model_key
: идентификатор ключа для используемой модели машинного обучения (например, «yolo11n»).
notifications
: список токенов API обмена сообщениями LINE и соответствующих языков для отправки уведомлений.
Поддерживаемые языки уведомлений:
Информацию о том, как получить токен 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:00 утра).
work_end_hour
: указывает час (в 24-часовом формате), когда система должна прекратить мониторинг видеопотока. По истечении этого времени мониторинг прекратится для оптимизации использования ресурсов (например, 18
для 18:00).
Вместе work_start_hour
и work_end_hour
определяют период мониторинга в течение дня. Для круглосуточного мониторинга установите 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
: URL-адрес подключения к базе данных MySQL. Используется модулем server_api
.
API_USERNAME
: имя пользователя для аутентификации с помощью API. Используется main.py
API_PASSWORD
: пароль для аутентификации с помощью API. Используется main.py
API_URL
: URL-адрес API сервера YOLO. Используется main.py
REDIS_HOST
: имя хоста для сервера Redis. Используется main.py
REDIS_PORT
: номер порта для сервера Redis. Используется main.py
REDIS_PASSWORD
: пароль для подключения к серверу Redis. Используется main.py
LINE_CHANNEL_ACCESS_TOKEN
: токен доступа для API LINE Messaging. Используется src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_CLOUD_NAME
: имя облака Cloudinary для управления мультимедиа. Используется src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_API_KEY
: ключ API для доступа к сервисам Cloudinary. Используется src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_API_SECRET
: секрет API для доступа к сервисам Cloudinary. Используется 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:
сборка docker-compose
Чтобы запустить приложение, используйте следующую команду:
докер-составить
Вы можете просмотреть результаты обнаружения по адресу http://localhost.
Чтобы остановить службы, используйте следующую команду:
docker-compose вниз
Чтобы запустить систему обнаружения опасностей с помощью Python, выполните следующие действия:
Используйте следующую команду для клонирования репозитория с GitHub:
git-клон https://github.com/yihong1120/Construction-Hazard-Detection.git
Измените каталог на новый клонированный репозиторий:
cd Строительство-Обнаружение опасностей
Запустите следующую команду, чтобы установить необходимые пакеты Python:
pip install -r требования.txt
Откройте терминал и выполните следующие команды для установки и запуска сервера MySQL:
обновление sudo apt sudo apt установить MySQL-сервер sudo systemctl запустить mysql.service
Загрузите и установите соответствующую версию MySQL для вашей операционной системы со страницы загрузок MySQL.
После установки MySQL используйте следующую команду для инициализации базы данных construction_hazard_detection
и создания таблицы users
:
mysql -u root -p < скрипты/init.sql
Вам будет предложено ввести пароль root MySQL. Убедитесь, что файл scripts/init.sql
содержит необходимые команды SQL для настройки базы данных и таблиц, как описано ранее.
Redis необходим только при использовании функции потоковой веб-трансляции . Выполните следующие действия, чтобы настроить Redis.
Установить Редис
Откройте терминал и выполните следующие команды:
обновление sudo apt sudo apt установить Redis-сервер
Настройте Redis (необязательно)
Если вам нужны пользовательские настройки, отредактируйте файл конфигурации Redis:
судо vim /etc/redis/redis.conf
Для повышения безопасности включите защиту паролем, добавив или изменив следующую строку:
requirepass YourStrongPassword
Замените YourStrongPassword
безопасным паролем.
Запустите и включите службу Redis
Запустите службу Redis:
sudo systemctl запустить 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, и к ним можно получить доступ в целях отладки.
Выходные изображения с обнаружениями (если они включены) будут сохранены в указанном пути вывода.
Уведомления будут отправляться через API обмена сообщениями LINE в указанные часы в случае обнаружения опасностей.
Убедитесь, что 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 | параметры (М) | Флопы (Б) |
---|---|---|---|---|---|
YOLO11n | 640 | 58,0 | 34,2 | 2.6 | 6,5 |
ЙОЛО11с | 640 | 70,1 | 44,8 | 9.4 | 21,6 |
ЙОЛО11м | 640 | 73,3 | 42,6 | 20.1 | 68,0 |
YOLO11l | 640 | 77,3 | 54,6 | 25,3 | 86,9 |
ЙОЛО11x | 640 | 82,0 | 61,7 | 56,9 | 194,9 |
Наш обширный набор данных гарантирует, что модель хорошо оснащена для выявления широкого спектра потенциальных опасностей, обычно встречающихся в строительных средах.
Добавьте поддержку уведомлений WhatsApp.
Исправьте пользовательский интерфейс примеров/YOLO server_api/мобильной версии интерфейса.
Мы приветствуем вклад в этот проект. Пожалуйста, выполните следующие действия:
Форкните репозиторий.
Внесите свои изменения.
Отправьте запрос на включение с четким описанием ваших улучшений.
Этот проект распространяется по лицензии AGPL-3.0.