Bahasa Inggris | 繁體中文
Server-API | Streaming-Web | Augmentasi Data | Evaluasi | Kereta
"Deteksi-Bahaya-Konstruksi" adalah alat bertenaga AI yang dirancang untuk meningkatkan keselamatan di lokasi konstruksi. Dengan memanfaatkan model YOLO untuk deteksi objek, ia mengidentifikasi potensi bahaya seperti:
Pekerja tanpa helm
Pekerja tanpa rompi keselamatan
Pekerja di dekat mesin atau kendaraan
Pekerja di area terlarang, area terlarang akan dihasilkan secara otomatis dengan menghitung dan mengelompokkan koordinat kerucut keselamatan.
Algoritma pasca-pemrosesan semakin meningkatkan akurasi deteksi. Sistem ini dibangun untuk penerapan real-time, menawarkan analisis instan dan peringatan untuk bahaya yang teridentifikasi.
Selain itu, sistem ini mengintegrasikan hasil pengenalan AI secara real-time melalui antarmuka web. Ia dapat mengirimkan notifikasi dan gambar di lokasi secara real-time melalui aplikasi perpesanan seperti LINE, Messenger, WeChat, dan Telegram untuk peringatan dan pengingat cepat. Sistem ini juga mendukung berbagai bahasa, memungkinkan pengguna menerima notifikasi dan berinteraksi dengan antarmuka dalam bahasa pilihan mereka. Bahasa yang didukung meliputi:
Cina Tradisional (Taiwan)
Bahasa Cina Sederhana (Tiongkok Daratan)
Perancis
Bahasa inggris
Thai
Vietnam
Indonesia
Dukungan multi-bahasa ini membuat sistem dapat diakses oleh khalayak global, sehingga meningkatkan kegunaan di berbagai wilayah.
Contoh Deteksi Bahaya
Penggunaan
Informasi Tambahan
Informasi Kumpulan Data
Berkontribusi
Peta Jalan Pembangunan
Lisensi
Di bawah ini adalah contoh deteksi bahaya secara real-time oleh sistem:
Pekerja tanpa Helm atau Rompi Keselamatan
Pekerja di dekat Mesin atau Kendaraan
Pekerja di Area Terlarang
Sebelum menjalankan aplikasi, Anda perlu mengonfigurasi sistem dengan menentukan detail aliran video dan parameter lainnya dalam file konfigurasi JSON. Contoh file konfigurasi config/configuration.json
akan terlihat seperti ini:
[ {"video_url": "https://cctv1.kctmc.nat.gov.tw/6e559e58/","site": "Kaohsiung","stream_name": "Test","model_key": "yolo11n","notifikasi ": { "line_token_1": "bahasa_1", "line_token_2": "bahasa_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": benar, "detect_in_restricted_area": true},"work_start_hour": 7,"work_end_hour ": 18,"store_in_redis": benar }, {"video_url": "URL streaming","site": "Factory_1","stream_name": "camera_1","model_key": "yolo11n","notifications": { "line_token_3": "bahasa_3", "line_token_4" : "bahasa_4"},"detect_with_server": false,"expire_date": "Tidak Ada Tanggal Kedaluwarsa","detection_items": { "detect_no_safety_vest_or_helmet": benar, "detect_near_machinery_or_vehicle": salah, "detect_in_restricted_area": true},"work_start_hour": 0,"work_end_hour": 24,"store_in_redis": benar } ]
Setiap objek dalam array mewakili konfigurasi streaming video dengan bidang berikut:
video_url
: URL streaming video langsung. Ini dapat mencakup:
Aliran pengawasan
Aliran RTSP
Aliran sekunder
Video YouTube atau streaming langsung
Aliran perselisihan
site
: Lokasi sistem pemantauan (misalnya, lokasi konstruksi, pabrik).
stream_name
: Nama yang ditetapkan untuk kamera atau streaming (misalnya, "Gerbang Depan", "Kamera 1").
model_key
: Pengidentifikasi kunci untuk digunakan model pembelajaran mesin (misalnya, "yolo11n").
notifications
: Daftar token API perpesanan LINE dan bahasa terkait untuk mengirimkan notifikasi.
Bahasa yang didukung untuk notifikasi meliputi:
Untuk informasi cara mendapatkan token LINE, silakan merujuk ke line_notify_guide_en.
zh-TW
: Bahasa Cina Tradisional
zh-CN
: Mandarin Sederhana
en
: Bahasa Inggris
fr
: Perancis
vi
: Vietnam
id
: Bahasa Indonesia
th
: Thailand
line_token_1
, line_token_2
, dll.: Ini adalah token LINE API.
language_1
, language_2
, dll.: Bahasa untuk notifikasi (misalnya, "en" untuk bahasa Inggris, "zh-TW" untuk bahasa Mandarin Tradisional).
detect_with_server
: Nilai Boolean yang menunjukkan apakah akan menjalankan deteksi objek menggunakan API server. Jika True
, sistem akan menggunakan server untuk mendeteksi objek. Jika False
, deteksi objek akan berjalan secara lokal di mesin.
expire_date
: Tanggal kedaluwarsa untuk konfigurasi streaming video dalam format ISO 8601 (misalnya, "2024-12-31T23:59:59"). Jika tidak ada tanggal kedaluwarsa, string seperti "Tidak Ada Tanggal Kedaluwarsa" dapat digunakan.
detection_items
: Menentukan item deteksi keamanan untuk memantau skenario tertentu. Setiap item dapat diatur ke True
untuk mengaktifkan atau False
untuk menonaktifkan. Item deteksi yang tersedia adalah:
detect_no_safety_vest_or_helmet
: Mendeteksi jika seseorang tidak mengenakan rompi keselamatan atau helm. Hal ini penting untuk memantau kepatuhan terhadap persyaratan perlengkapan keselamatan di lokasi yang mewajibkan peralatan tersebut untuk perlindungan personel.
detect_near_machinery_or_vehicle
: Mendeteksi jika seseorang berada dalam jarak yang berbahaya dengan mesin atau kendaraan. Hal ini membantu mencegah kecelakaan yang disebabkan oleh jarak yang dekat dengan alat berat atau kendaraan yang bergerak, yang sering ditemui di lokasi konstruksi atau kawasan industri.
detect_in_restricted_area
: Mendeteksi jika seseorang telah memasuki area terlarang atau terkendali. Area terlarang mungkin berbahaya bagi personel yang tidak terlatih atau mungkin berisi peralatan sensitif, sehingga pengaturan ini membantu mengendalikan akses ke zona tersebut.
work_start_hour
: Menentukan jam (dalam format 24 jam) kapan sistem harus mulai memantau aliran video. Hal ini memungkinkan pemantauan dibatasi pada jam kerja aktif, sehingga mengurangi pemrosesan yang tidak perlu di luar jangka waktu yang ditentukan (misalnya, 7
untuk pukul 07.00).
work_end_hour
: Menentukan jam (dalam format 24 jam) kapan sistem harus berhenti memantau aliran video. Pemantauan akan dihentikan setelah waktu ini untuk mengoptimalkan penggunaan sumber daya (misalnya, 18
pada pukul 18:00).
Bersama-sama, work_start_hour
dan work_end_hour
menentukan periode pemantauan selama sehari. Untuk pemantauan 24 jam, atur work_start_hour
ke 0
dan work_end_hour
ke 24
.
store_in_redis
: Nilai boolean yang menentukan apakah akan menyimpan frame yang diproses dan data deteksi terkait di Redis. Jika True
, sistem akan menyimpan data ke database Redis untuk digunakan lebih lanjut, seperti pemantauan real-time atau integrasi dengan layanan lain. Jika False
, tidak ada data yang akan disimpan di Redis.
Aplikasi memerlukan variabel lingkungan tertentu untuk konfigurasi yang tepat. Variabel-variabel ini harus didefinisikan dalam file .env
yang terletak di direktori root proyek. Di bawah ini adalah contoh file .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 koneksi untuk database MySQL. Digunakan oleh modul server_api
.
API_USERNAME
: Nama pengguna untuk mengautentikasi dengan API. Digunakan oleh main.py
.
API_PASSWORD
: Kata sandi untuk mengautentikasi dengan API. Digunakan oleh main.py
.
API_URL
: URL API server YOLO. Digunakan oleh main.py
.
REDIS_HOST
: Nama host untuk server Redis. Digunakan oleh main.py
.
REDIS_PORT
: Nomor port untuk server Redis. Digunakan oleh main.py
.
REDIS_PASSWORD
: Kata sandi untuk menghubungkan ke server Redis. Digunakan oleh main.py
.
LINE_CHANNEL_ACCESS_TOKEN
: Token akses untuk LINE Messaging API. Digunakan oleh src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_CLOUD_NAME
: Nama cloud Cloudinary untuk manajemen media. Digunakan oleh src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_API_KEY
: Kunci API untuk mengakses layanan Cloudinary. Digunakan oleh src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_API_SECRET
: Rahasia API untuk mengakses layanan Cloudinary. Digunakan oleh src/notifiers/line_notifier_message_api.py
.
Catatan : Ganti nilai placeholder dengan kredensial aktual dan detail konfigurasi untuk memastikan fungsionalitas yang tepat.
Sekarang, Anda dapat meluncurkan sistem deteksi bahaya di Docker atau Python env:
Untuk menjalankan sistem deteksi bahaya, Anda harus menginstal Docker dan Docker Compose di mesin Anda. Ikuti langkah-langkah berikut untuk mengaktifkan dan menjalankan sistem:
Kloning repositori ke mesin lokal Anda.
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
Arahkan ke direktori kloning.
cd Construction-Hazard-Detection
Bangun dan jalankan layanan menggunakan Docker Compose:
build penulisan buruh pelabuhan
Untuk menjalankan aplikasi, gunakan perintah berikut:
komposisi buruh pelabuhan
Anda dapat melihat hasil deteksi di http://localhost
Untuk menghentikan layanan, gunakan perintah berikut:
buruh pelabuhan-menulis
Untuk menjalankan sistem deteksi bahaya dengan Python, ikuti langkah-langkah berikut:
Gunakan perintah berikut untuk mengkloning repositori dari GitHub:
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
Ubah direktori ke repositori yang baru dikloning:
cd Deteksi Bahaya Konstruksi
Jalankan perintah berikut untuk menginstal paket Python yang diperlukan:
instalasi pip -r persyaratan.txt
Buka terminal dan jalankan perintah berikut untuk menginstal dan memulai server MySQL:
sudo pembaruan yang tepat sudo apt install server mysql sudo systemctl mulai mysql.layanan
Unduh dan instal versi MySQL yang sesuai untuk sistem operasi Anda dari halaman Unduhan MySQL.
Setelah menginstal MySQL, gunakan perintah berikut untuk menginisialisasi database construction_hazard_detection
dan membuat tabel users
:
mysql -u root -p < skrip/init.sql
Anda akan diminta memasukkan kata sandi root MySQL. Pastikan file scripts/init.sql
berisi perintah SQL yang diperlukan untuk menyiapkan database dan tabel seperti yang dijelaskan sebelumnya.
Redis diperlukan hanya saat menggunakan fungsionalitas Web Streaming . Ikuti langkah-langkah di bawah ini untuk menyiapkan Redis.
Instal Redis
Buka terminal dan jalankan perintah berikut:
sudo pembaruan yang tepat sudo apt install redis-server
Konfigurasikan Redis (Opsional)
Jika Anda memerlukan pengaturan khusus, edit file konfigurasi Redis:
sudo vim /etc/redis/redis.conf
Untuk meningkatkan keamanan, aktifkan perlindungan kata sandi dengan menambahkan atau mengubah baris berikut:
requirepass YourStrongPassword
Ganti YourStrongPassword
dengan kata sandi yang aman.
Mulai dan Aktifkan Layanan Redis
Mulai layanan Redis:
sudo systemctl mulai redis.service
Aktifkan Redis untuk memulai secara otomatis saat boot:
sudo systemctl aktifkan redis.service
Lihat panduan instalasi Redis resmi untuk instruksi khusus untuk sistem operasi Anda.
Mulai API deteksi objek dengan perintah berikut:
contoh uvicorn.YOLO_server.backend.app:sio_app --host 0.0.0.0 --port 8001
Gunakan perintah berikut untuk menjalankan aplikasi utama dan menentukan file konfigurasi:
python3 main.py --config config/configuration.json
Ganti config/configuration.json
dengan jalur sebenarnya ke file konfigurasi Anda.
Jalankan perintah berikut untuk memulai layanan backend pada sistem Linux:
contoh uvicorn.streaming_web.backend.app:sio_app --host 127.0.0.1 --port 8002
Untuk memulai layanan backend pada sistem Windows, gunakan perintah berikut:
pelayan-melayani --host=127.0.0.1 --port=8002 "examples.streaming_web.backend.app:streaming-web-app"
Lihat file examples/YOLO_server_api/frontend/nginx.conf
untuk instruksi penerapan. Tempatkan file web statis di direktori berikut:
examples/YOLO_server_api/frontend/dist
Log sistem tersedia dalam kontainer Docker dan dapat diakses untuk tujuan debugging.
Gambar keluaran dengan deteksi (jika diaktifkan) akan disimpan ke jalur keluaran yang ditentukan.
Pemberitahuan akan dikirimkan melalui LINE Messaging API selama jam yang ditentukan jika bahaya terdeteksi.
Pastikan Dockerfile
ada di direktori root proyek dan dikonfigurasi dengan benar sesuai kebutuhan aplikasi Anda.
Untuk informasi selengkapnya tentang penggunaan dan perintah Docker, lihat dokumentasi Docker.
Kumpulan data utama untuk melatih model ini adalah Kumpulan Data Gambar Keamanan Lokasi Konstruksi dari Roboflow. Kami telah memperkaya kumpulan data ini dengan anotasi tambahan dan membuatnya dapat diakses secara terbuka di Roboflow. Kumpulan data yang disempurnakan dapat ditemukan di sini: Deteksi Bahaya Konstruksi di Roboflow. Kumpulan data ini mencakup label berikut:
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'
Model | ukuran (piksel) | peta val 50 | peta val 50-95 | param (M) | FLOP (B) |
---|---|---|---|---|---|
YOLO11n | 640 | 58.0 | 34.2 | 2.6 | 6.5 |
YOLO11 | 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 |
Kumpulan data kami yang komprehensif memastikan bahwa model ini dilengkapi dengan baik untuk mengidentifikasi berbagai potensi bahaya yang umum ditemukan di lingkungan konstruksi.
Tambahkan dukungan untuk notifikasi WhatsApp.
Perbaiki antarmuka UI contoh/YOLO server_api/versi seluler frontend
Kami menyambut kontribusi untuk proyek ini. Silakan ikuti langkah-langkah berikut:
Cabangkan repositori.
Buat perubahan Anda.
Kirimkan permintaan penarikan dengan deskripsi jelas tentang peningkatan Anda.
Proyek ini dilisensikan di bawah Lisensi AGPL-3.0.