Inglês | 繁體中文
API do servidor | Streaming-Web | Aumento de dados | Avaliação | Trem
"Construction-Hazard-Detection" é uma ferramenta alimentada por IA projetada para aumentar a segurança nos canteiros de obras. Ao aproveitar o modelo YOLO para detecção de objetos, ele identifica perigos potenciais, como:
Trabalhadores sem capacete
Trabalhadores sem coletes de segurança
Trabalhadores perto de máquinas ou veículos
Trabalhadores em áreas restritas, as áreas restritas serão geradas automaticamente pelo cálculo e agrupamento das coordenadas dos cones de segurança.
Algoritmos de pós-processamento melhoram ainda mais a precisão da detecção. O sistema foi desenvolvido para implantação em tempo real, oferecendo análises instantâneas e alertas para perigos identificados.
Além disso, o sistema integra resultados de reconhecimento de IA em tempo real por meio de uma interface web. Ele pode enviar notificações e imagens em tempo real no local por meio de aplicativos de mensagens como LINE, Messenger, WeChat e Telegram para alertas e lembretes imediatos. O sistema também oferece suporte a vários idiomas, permitindo que os usuários recebam notificações e interajam com a interface no idioma de sua preferência. Os idiomas suportados incluem:
Chinês Tradicional (Taiwan)
Chinês simplificado (China continental)
Francês
Inglês
Tailandês
vietnamita
indonésio
Este suporte multilíngue torna o sistema acessível a um público global, melhorando a usabilidade em diferentes regiões.
Exemplos de detecção de perigos
Uso
Informações adicionais
Informações do conjunto de dados
Contribuindo
Roteiro de Desenvolvimento
Licença
Abaixo estão exemplos de detecção de perigos em tempo real pelo sistema:
Trabalhadores sem capacete ou colete de segurança
Trabalhadores perto de máquinas ou veículos
Trabalhadores em áreas restritas
Antes de executar o aplicativo, você precisa configurar o sistema especificando os detalhes dos streams de vídeo e outros parâmetros em um arquivo de configuração JSON. Um exemplo de arquivo de configuração config/configuration.json
deve ser parecido com este:
[ {"video_url": "https://cctv1.kctmc.nat.gov.tw/6e559e58/","site": "Kaohsiung","stream_name": "Teste","model_key": "yolo11n","notificações ": { "line_token_1": "idioma_1", "line_token_2": "idioma_2"},"detect_with_server": verdadeiro,"expire_date": "2024-12-31T23:59:59","detection_items": { "detect_no_safety_vest_or_helmet": verdadeiro, "detect_near_machinery_or_vehicle": verdadeiro, "detect_in_restricted_area": verdadeiro},"work_start_hour": 7,"work_end_hour ": 18,"store_in_redis": verdadeiro }, {"video_url": "URL de streaming","site": "Factory_1","stream_name": "camera_1","model_key": "yolo11n","notificações": { "line_token_3": "idioma_3", "line_token_4" : "idioma_4"},"detect_with_server": false,"expire_date": "Sem data de expiração","detection_items": { "detect_no_safety_vest_or_helmet": verdadeiro, "detect_near_machinery_or_vehicle": falso, "detect_in_restricted_area": verdadeiro},"work_start_hour": 0,"work_end_hour": 24,"store_in_redis": verdadeiro } ]
Cada objeto na matriz representa uma configuração de fluxo de vídeo com os seguintes campos:
video_url
: o URL da transmissão de vídeo ao vivo. Isso pode incluir:
Fluxos de vigilância
Fluxos RTSP
Fluxos secundários
Vídeos do YouTube ou transmissões ao vivo
Transmissões de discórdia
site
: A localização do sistema de monitoramento (por exemplo, canteiro de obras, fábrica).
stream_name
: O nome atribuído à câmera ou stream (por exemplo, "Front Gate", "Camera 1").
model_key
: O identificador de chave a ser usado pelo modelo de aprendizado de máquina (por exemplo, "yolo11n").
notifications
: uma lista de tokens de API de mensagens do LINE e idiomas correspondentes para envio de notificações.
Os idiomas suportados para notificações incluem:
Para obter informações sobre como obter um token LINE, consulte line_notify_guide_en.
zh-TW
: chinês tradicional
zh-CN
: chinês simplificado
en
: Inglês
fr
: francês
vi
: vietnamita
id
: indonésio
th
: Tailandês
line_token_1
, line_token_2
, etc.: Estes são os tokens da API LINE.
language_1
, language_2
, etc.: Os idiomas das notificações (por exemplo, "en" para inglês, "zh-TW" para chinês tradicional).
detect_with_server
: valor booleano que indica se a detecção de objetos deve ser executada usando uma API do servidor. Se True
, o sistema usará o servidor para detecção de objetos. Se False
, a detecção de objetos será executada localmente na máquina.
expire_date
: Data de expiração para a configuração do stream de vídeo no formato ISO 8601 (por exemplo, "2024-12-31T23:59:59"). Se não houver data de expiração, uma string como "No Expire Date" poderá ser usada.
detection_items
: especifica os itens de detecção de segurança para monitorar cenários específicos. Cada item pode ser definido como True
para ativar ou False
para desativar. Os itens de detecção disponíveis são:
detect_no_safety_vest_or_helmet
: Detecta se uma pessoa não está usando colete de segurança ou capacete. Isto é essencial para monitorar a conformidade com os requisitos dos equipamentos de segurança em locais onde tais equipamentos são obrigatórios para proteção pessoal.
detect_near_machinery_or_vehicle
: Detecta se uma pessoa está perigosamente perto de máquinas ou veículos. Isto ajuda a prevenir acidentes causados pela proximidade de equipamentos pesados ou veículos em movimento, frequentemente encontrados em canteiros de obras ou áreas industriais.
detect_in_restricted_area
: Detecta se uma pessoa entrou em uma área restrita ou controlada. As áreas restritas podem ser perigosas para pessoal não treinado ou podem conter equipamentos sensíveis, portanto esta configuração ajuda a controlar o acesso a tais zonas.
work_start_hour
: especifica a hora (no formato de 24 horas) em que o sistema deve começar a monitorar o stream de vídeo. Isso permite que o monitoramento seja restrito às horas de trabalho ativas, reduzindo processamentos desnecessários fora do horário definido (por exemplo, 7
para 7h).
work_end_hour
: especifica a hora (no formato de 24 horas) em que o sistema deve parar de monitorar o stream de vídeo. O monitoramento cessará após esse horário para otimizar o uso dos recursos (por exemplo, das 18
às 18h).
Juntos, work_start_hour
e work_end_hour
definem o período de monitoramento durante um dia. Para monitoramento de 24 horas, defina work_start_hour
como 0
e work_end_hour
como 24
.
store_in_redis
: um valor booleano que determina se devem ser armazenados quadros processados e dados de detecção associados no Redis. Se True
, o sistema salvará os dados em um banco de dados Redis para uso posterior, como monitoramento em tempo real ou integração com outros serviços. Se False
, nenhum dado será salvo no Redis.
O aplicativo requer variáveis de ambiente específicas para configuração adequada. Estas variáveis devem ser definidas em um arquivo .env
localizado no diretório raiz do projeto. Abaixo está um exemplo do arquivo .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
: o URL de conexão do banco de dados MySQL. Usado pelo módulo server_api
.
API_USERNAME
: o nome de usuário para autenticação com a API. Usado por main.py
.
API_PASSWORD
: A senha para autenticação com a API. Usado por main.py
.
API_URL
: o URL da API do servidor YOLO. Usado por main.py
.
REDIS_HOST
: O nome do host do servidor Redis. Usado por main.py
.
REDIS_PORT
: O número da porta do servidor Redis. Usado por main.py
.
REDIS_PASSWORD
: A senha para conexão ao servidor Redis. Usado por main.py
.
LINE_CHANNEL_ACCESS_TOKEN
: o token de acesso para a API de mensagens do LINE. Usado por src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_CLOUD_NAME
: o nome da nuvem Cloudinary para gerenciamento de mídia. Usado por src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_API_KEY
: a chave API para acessar serviços Cloudinary. Usado por src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_API_SECRET
: o segredo da API para acessar serviços Cloudinary. Usado por src/notifiers/line_notifier_message_api.py
.
Nota : Substitua os valores do espaço reservado por credenciais reais e detalhes de configuração para garantir a funcionalidade adequada.
Agora, você pode iniciar o sistema de detecção de perigos no ambiente Docker ou Python:
Para executar o sistema de detecção de perigos, você precisa ter o Docker e o Docker Compose instalados em sua máquina. Siga estas etapas para colocar o sistema em funcionamento:
Clone o repositório em sua máquina local.
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
Navegue até o diretório clonado.
cd Construction-Hazard-Detection
Crie e execute os serviços usando Docker Compose:
compilação docker-compose
Para executar o aplicativo, use o seguinte comando:
docker-compose up
Você pode visualizar os resultados da detecção em http://localhost
Para interromper os serviços, use o seguinte comando:
docker-compose down
Para executar o sistema de detecção de perigos com Python, siga estas etapas:
Use o seguinte comando para clonar o repositório do GitHub:
clone git https://github.com/yihong1120/Construction-Hazard-Detection.git
Mude o diretório para o repositório recém-clonado:
cd Detecção de Perigos de Construção
Execute o seguinte comando para instalar os pacotes Python necessários:
pip instalar -r requisitos.txt
Abra o terminal e execute os seguintes comandos para instalar e iniciar o servidor MySQL:
atualização do sudo apt sudo apt instalar servidor mysql sudo systemctl iniciar mysql.service
Baixe e instale a versão apropriada do MySQL para o seu sistema operacional na página de downloads do MySQL.
Após instalar o MySQL, use o seguinte comando para inicializar o banco de dados construction_hazard_detection
e criar a tabela users
:
mysql -u root -p <scripts/init.sql
Você será solicitado a inserir a senha root do MySQL. Certifique-se de que o arquivo scripts/init.sql
contenha os comandos SQL necessários para configurar o banco de dados e as tabelas conforme descrito anteriormente.
O Redis é necessário apenas ao usar a funcionalidade Streaming Web . Siga as etapas abaixo para configurar o Redis.
Instalar Redis
Abra o terminal e execute os seguintes comandos:
atualização do sudo apt sudo apt instalar servidor redis
Configurar Redis (opcional)
Se precisar de configurações personalizadas, edite o arquivo de configuração do Redis:
sudo vim /etc/redis/redis.conf
Para aumentar a segurança, ative a proteção por senha adicionando ou modificando a seguinte linha:
requirepass YourStrongPassword
Substitua YourStrongPassword
por uma senha segura.
Iniciar e ativar o serviço Redis
Inicie o serviço Redis:
sudo systemctl iniciar redis.service
Habilite o Redis para iniciar automaticamente na inicialização:
sudo systemctl habilitar redis.service
Consulte o guia oficial de instalação do Redis para obter instruções específicas para o seu sistema operacional.
Inicie a API de detecção de objetos com o seguinte comando:
exemplos de uvicorn.YOLO_server.backend.app:sio_app --host 0.0.0.0 --port 8001
Use o seguinte comando para executar o aplicativo principal e especificar o arquivo de configuração:
python3 main.py --config config/configuration.json
Substitua config/configuration.json
pelo caminho real para seu arquivo de configuração.
Execute o seguinte comando para iniciar o serviço de back-end em um sistema Linux:
exemplos de uvicorn.streaming_web.backend.app:sio_app --host 127.0.0.1 --port 8002
Para iniciar o serviço de back-end em um sistema Windows, use o seguinte comando:
garçonete-serve --host=127.0.0.1 --port=8002 "examples.streaming_web.backend.app:streaming-web-app"
Consulte o arquivo examples/YOLO_server_api/frontend/nginx.conf
para obter instruções de implantação. Coloque os arquivos estáticos da web no seguinte diretório:
examples/YOLO_server_api/frontend/dist
Os logs do sistema estão disponíveis no contêiner Docker e podem ser acessados para fins de depuração.
As imagens de saída com detecções (se habilitadas) serão salvas no caminho de saída especificado.
As notificações serão enviadas através da API de mensagens LINE durante os horários especificados se perigos forem detectados.
Certifique-se de que o Dockerfile
esteja presente no diretório raiz do projeto e esteja configurado corretamente de acordo com os requisitos do seu aplicativo.
Para obter mais informações sobre o uso e os comandos do Docker, consulte a documentação do Docker.
O conjunto de dados principal para treinar este modelo é o conjunto de dados de imagens de segurança do canteiro de obras do Roboflow. Enriquecemos este conjunto de dados com anotações adicionais e o tornamos abertamente acessível no Roboflow. O conjunto de dados aprimorado pode ser encontrado aqui: Detecção de perigos de construção no Roboflow. Este conjunto de dados inclui os seguintes rótulos:
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'
Modelo | tamanho (pixels) | valor mAP 50 | valor mAP 50-95 | parâmetros (M) | FLOPs (B) |
---|---|---|---|---|---|
YOLO11n | 640 | 58,0 | 34,2 | 2.6 | 6,5 |
YOLO11s | 640 | 70,1 | 44,8 | 9.4 | 21.6 |
YOLO11m | 640 | 73,3 | 42,6 | 20.1 | 68,0 |
YOLO11l | 640 | 77,3 | 54,6 | 25.3 | 86,9 |
YOLO11x | 640 | 82,0 | 61,7 | 56,9 | 194,9 |
Nosso conjunto de dados abrangente garante que o modelo esteja bem equipado para identificar uma ampla gama de perigos potenciais comumente encontrados em ambientes de construção.
Adicione suporte para notificações do WhatsApp.
Corrija a interface da UI de exemplos/YOLO server_api/frontend mobile version
Aceitamos contribuições para este projeto. Siga estas etapas:
Bifurque o repositório.
Faça suas alterações.
Envie uma solicitação pull com uma descrição clara de suas melhorias.
Este projeto está licenciado sob a licença AGPL-3.0.