英語 | 繁体中文
サーバーAPI | ストリーミングウェブ | データ拡張 | 評価 | 電車
「Construction-Hazard-Detection」は、建設現場の安全性を高めるために設計された AI を活用したツールです。 YOLO モデルを物体検出に活用することで、次のような潜在的な危険を特定します。
ヘルメットを着用していない作業員
安全ベストを着用していない作業員
機械や車両の近くにいる作業者
立ち入り禁止エリアの作業員、立ち入り禁止エリアは、セーフティコーンの座標を計算してクラスタリングすることで自動的に生成されます。
後処理アルゴリズムにより、検出精度がさらに向上します。このシステムはリアルタイム導入向けに構築されており、特定された危険に対して即座に分析とアラートを提供します。
さらに、このシステムは Web インターフェイスを介して AI 認識結果をリアルタイムに統合します。 LINE、メッセンジャー、WeChat、Telegram などのメッセージング アプリを通じて通知やリアルタイムのオンサイト画像を送信し、アラートやリマインダーを迅速に送信できます。このシステムは複数の言語もサポートしているため、ユーザーは通知を受け取り、好みの言語でインターフェイスを操作できます。サポートされている言語は次のとおりです。
繁体字中国語 (台湾)
簡体字中国語 (中国本土)
フランス語
英語
タイ語
ベトナム語
インドネシア語
この多言語サポートにより、世界中のユーザーがシステムにアクセスできるようになり、さまざまな地域での使いやすさが向上します。
危険検知の例
使用法
追加情報
データセット情報
貢献する
開発ロードマップ
ライセンス
以下は、システムによるリアルタイムの危険検出の例です。
ヘルメットや安全ベストを着用していない作業者
機械や車両の近くで作業する人
立ち入り禁止区域の労働者
アプリケーションを実行する前に、JSON 構成ファイルでビデオ ストリームとその他のパラメーターの詳細を指定してシステムを構成する必要があります。構成ファイルconfig/configuration.json
の例は次のようになります。
[ {"video_url": "https://cctv1.kctmc.nat.gov.tw/6e559e58/","site": "高雄","stream_name": "テスト","model_key": "yolo11n","notifications ": { "line_token_1": "言語_1"、"line_token_2": " language_2"},"detect_with_server": true,"expire_date": "2024-12-31T23:59:59","detect_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": true, "detect_near_machinery_or_vehicle": false, "detect_in_restricted_area": true},"work_start_hour": 0,"work_end_hour": 24,"store_in_redis": true } 】
配列内の各オブジェクトは、次のフィールドを持つビデオ ストリーム構成を表します。
video_url
: ライブビデオストリームの URL。これには次のものが含まれます。
監視ストリーム
RTSPストリーム
二次ストリーム
YouTube ビデオまたはライブ ストリーム
Discord ストリーム
site
: 監視システムの場所 (建設現場、工場など)。
stream_name
: カメラまたはストリームに割り当てられた名前 (例: 「フロント ゲート」、「カメラ 1」)。
model_key
: 使用する機械学習モデルのキー識別子 (例: 「yolo11n」)。
notifications
: 通知を送信するための LINE メッセージング API トークンと対応言語のリスト。
通知でサポートされている言語は次のとおりです。
LINEトークンの取得方法については、line_notify_guide_jaを参照してください。
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
を組み合わせて、1 日の監視期間を定義します。 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 を使用してサービスを構築して実行します。
docker-compose ビルド
アプリケーションを実行するには、次のコマンドを使用します。
ドッカー構成アップ
検出結果は http://localhost で確認できます。
サービスを停止するには、次のコマンドを使用します。
docker-compose ダウン
Python で危険検出システムを実行するには、次の手順に従います。
次のコマンドを使用して、GitHub からリポジトリのクローンを作成します。
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
ディレクトリを新しく複製されたリポジトリに変更します。
cd 建設 - 危険 - 検知
次のコマンドを実行して、必要な Python パッケージをインストールします。
pip install -r 要件.txt
ターミナルを開き、次のコマンドを実行して MySQL サーバーをインストールして起動します。
sudo aptアップデート sudo apt install mysql-server sudo systemctl start mysql.service
MySQL ダウンロード ページから、オペレーティング システムに適切なバージョンの MySQL をダウンロードしてインストールします。
MySQL をインストールした後、次のコマンドを使用してconstruction_hazard_detection
データベースを初期化し、 users
テーブルを作成します。
mysql -u root -p < scripts/init.sql
MySQL root パスワードの入力を求められます。 scripts/init.sql
ファイルに、前述のようにデータベースとテーブルをセットアップするために必要な SQL コマンドが含まれていることを確認します。
Redis は、ストリーミング Web機能を使用する場合にのみ必要です。 Redis をセットアップするには、以下の手順に従ってください。
Redis をインストールする
ターミナルを開き、次のコマンドを実行します。
sudo aptアップデート sudo apt install redis-server
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 システムでバックエンド サービスを開始するには、次のコマンドを使用します。
waitress-serve --host=127.0.0.1 --port=8002 "examples.streaming_web.backend.app:streaming-web-app"
デプロイメント手順については、 examples/YOLO_server_api/frontend/nginx.conf
ファイルを参照してください。静的 Web ファイルを次のディレクトリに配置します。
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 | パラメータ (男) | フロップス (B) |
---|---|---|---|---|---|
YOLO11n | 640 | 58.0 | 34.2 | 2.6 | 6.5 |
YOLO11s | 640 | 70.1 | 44.8 | 9.4 | 21.6 |
ヨロ11m | 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 |
当社の包括的なデータセットにより、建設環境で一般的に見られる広範囲の潜在的な危険を特定するためのモデルが十分に装備されていることを保証します。
WhatsApp 通知のサポートを追加します。
Examples/YOLO server_api/frontend モバイル版の UI インターフェイスを修正
このプロジェクトへの貢献を歓迎します。次の手順に従ってください。
リポジトリをフォークします。
変更を加えます。
改善点を明確に説明したプル リクエストを送信してください。
このプロジェクトは、AGPL-3.0 ライセンスに基づいてライセンスされています。