อังกฤษ | 繁體中文
เซิร์ฟเวอร์ API | สตรีมมิ่งเว็บ | การเพิ่มข้อมูล | การประเมินผล | รถไฟ
"Construction-Hazard-Detection" เป็นเครื่องมือที่ขับเคลื่อนด้วย AI ซึ่งได้รับการออกแบบมาเพื่อเพิ่มความปลอดภัยในสถานที่ก่อสร้าง ด้วยการใช้ประโยชน์จากโมเดล YOLO สำหรับการตรวจจับวัตถุ จะระบุอันตรายที่อาจเกิดขึ้น เช่น:
คนงานไม่สวมหมวกกันน็อค
คนงานที่ไม่มีเสื้อชูชีพ
คนงานที่อยู่ใกล้เครื่องจักรหรือยานพาหนะ
ผู้ปฏิบัติงานในพื้นที่จำกัด พื้นที่หวงห้ามจะถูกสร้างขึ้นโดยอัตโนมัติโดยการคำนวณและจัดกลุ่มพิกัดของกรวยนิรภัย
อัลกอริธึมหลังการประมวลผลปรับปรุงความแม่นยำในการตรวจจับให้ดียิ่งขึ้น ระบบนี้สร้างขึ้นสำหรับการใช้งานแบบเรียลไทม์ โดยนำเสนอการวิเคราะห์และการแจ้งเตือนทันทีสำหรับอันตรายที่ระบุ
นอกจากนี้ ระบบยังรวมผลลัพธ์การจดจำ AI แบบเรียลไทม์ผ่านอินเทอร์เฟซเว็บ สามารถส่งการแจ้งเตือนและรูปภาพแบบเรียลไทม์ผ่านแอปส่งข้อความ เช่น LINE, Messenger, WeChat และ Telegram เพื่อแจ้งเตือนและเตือนความจำได้ทันที ระบบยังรองรับหลายภาษา ทำให้ผู้ใช้สามารถรับการแจ้งเตือนและโต้ตอบกับอินเทอร์เฟซในภาษาที่ต้องการได้ ภาษาที่รองรับได้แก่:
จีนตัวเต็ม (ไต้หวัน)
จีนตัวย่อ (จีนแผ่นดินใหญ่)
ภาษาฝรั่งเศส
ภาษาอังกฤษ
แบบไทย
ภาษาเวียดนาม
ชาวอินโดนีเซีย
การสนับสนุนหลายภาษานี้ทำให้ระบบสามารถเข้าถึงได้โดยผู้ชมทั่วโลก ปรับปรุงการใช้งานในภูมิภาคต่างๆ
ตัวอย่างการตรวจจับอันตราย
การใช้งาน
ข้อมูลเพิ่มเติม
ข้อมูลชุดข้อมูล
มีส่วนร่วม
แผนงานการพัฒนา
ใบอนุญาต
ด้านล่างนี้เป็นตัวอย่างการตรวจจับอันตรายแบบเรียลไทม์โดยระบบ:
คนงานที่ไม่มีหมวกกันน็อคหรือเสื้อนิรภัย
คนงานที่อยู่ใกล้เครื่องจักรหรือยานพาหนะ
คนงานในพื้นที่หวงห้าม
ก่อนที่จะรันแอปพลิเคชัน คุณต้องกำหนดค่าระบบโดยการระบุรายละเอียดของสตรีมวิดีโอและพารามิเตอร์อื่นๆ ในไฟล์การกำหนดค่า JSON ตัวอย่างไฟล์การกำหนดค่า config/configuration.json
ควรมีลักษณะดังนี้:
- {"video_url": "https://cctv1.kctmc.nat.gov.tw/6e559e58/","site": "เกาสง", "stream_name": "Test", "model_key": "yolo11n", "การแจ้งเตือน" ": { "line_token_1": "ภาษา_1", "line_token_2": "ภาษา_2"},"detect_with_server": จริง,"expire_date": "2024-12-31T23:59:59",detection_items": { "detect_no_safety_vest_or_helmet": จริง, "detect_near_machinery_or_vehicle": จริง, "detect_in_restricted_area": true},"work_start_hour": 7,"work_end_hour ": 18,"store_in_redis": จริง - {"video_url": "สตรีมมิ่ง URL", "ไซต์": "Factory_1", "stream_name": "กล้อง_1", "model_key": "yolo11n", "การแจ้งเตือน": { "line_token_3": "ภาษา_3", "line_token_4" : " language_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
: ชื่อที่กำหนดให้กับกล้องหรือสตรีม (เช่น "ประตูหน้า", "กล้อง 1")
model_key
: ตัวระบุคีย์สำหรับโมเดลการเรียนรู้ของเครื่องที่จะใช้ (เช่น "yolo11n")
notifications
: รายการโทเค็น API การส่งข้อความของ LINE และภาษาที่เกี่ยวข้องสำหรับการส่งการแจ้งเตือน
ภาษาที่รองรับสำหรับการแจ้งเตือน ได้แก่ :
สำหรับข้อมูลเกี่ยวกับวิธีการรับโทเค็น LINE โปรดดูที่ line_notify_guide_en
zh-TW
: จีนตัวเต็ม
zh-CN
: จีนตัวย่อ
th : 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") หากไม่มีวันหมดอายุ คุณสามารถใช้สตริง เช่น "ไม่มีวันหมดอายุ" ได้
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
ร่วมกันกำหนดระยะเวลาการมอนิเตอร์ในระหว่างวัน สำหรับการมอนิเตอร์ตลอด 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
: 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
: โทเค็นการเข้าถึงสำหรับ LINE Messaging API ใช้โดย 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 env ได้:
หากต้องการเรียกใช้ระบบตรวจจับอันตราย คุณต้องติดตั้ง 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 apt sudo apt ติดตั้งเซิร์ฟเวอร์ mysql sudo systemctl เริ่ม mysql.service
ดาวน์โหลดและติดตั้ง MySQL เวอร์ชันที่เหมาะสมสำหรับระบบปฏิบัติการของคุณจากหน้าดาวน์โหลด MySQL
หลังจากติดตั้ง MySQL ให้ใช้คำสั่งต่อไปนี้เพื่อเริ่มต้นฐานข้อมูล construction_hazard_detection
และสร้างตาราง users
:
mysql -u root -p < สคริปต์/init.sql
คุณจะได้รับแจ้งให้ป้อนรหัสผ่านรูทของ MySQL ตรวจสอบให้แน่ใจว่าไฟล์ scripts/init.sql
มีคำสั่ง SQL ที่จำเป็นในการตั้งค่าฐานข้อมูลและตารางตามที่อธิบายไว้ก่อนหน้านี้
จำเป็นต้องใช้ Redis เมื่อใช้ฟังก์ชัน สตรีมมิ่งเว็บ เท่านั้น ทำตามขั้นตอนด้านล่างเพื่อตั้งค่า Redis
ติดตั้ง Redis
เปิดเทอร์มินัลแล้วรันคำสั่งต่อไปนี้:
อัปเดต sudo apt sudo apt ติดตั้งเซิร์ฟเวอร์ redis
กำหนดค่า Redis (ไม่บังคับ)
หากคุณต้องการการตั้งค่าแบบกำหนดเอง ให้แก้ไขไฟล์การกำหนดค่า Redis:
sudo 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 --โฮสต์ 0.0.0.0 --พอร์ต 8001
ใช้คำสั่งต่อไปนี้เพื่อรันแอปพลิเคชันหลักและระบุไฟล์การกำหนดค่า:
python3 main.py --config config/configuration.json
แทนที่ config/configuration.json
ด้วยเส้นทางจริงไปยังไฟล์การกำหนดค่าของคุณ
รันคำสั่งต่อไปนี้เพื่อเริ่มบริการแบ็กเอนด์บนระบบ Linux:
ตัวอย่าง uvicorn.streaming_web.backend.app:sio_app --โฮสต์ 127.0.0.1 --พอร์ต 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 Messaging API ในช่วงเวลาที่กำหนดหากตรวจพบอันตราย
ตรวจสอบให้แน่ใจว่า Dockerfile
มีอยู่ในไดเร็กทอรีรากของโปรเจ็กต์และได้รับการกำหนดค่าอย่างเหมาะสมตามความต้องการของแอปพลิเคชันของคุณ
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานและคำสั่ง Docker โปรดดูเอกสารประกอบ Docker
ชุดข้อมูลหลักสำหรับการฝึกโมเดลนี้คือชุดข้อมูลภาพความปลอดภัยของสถานที่ก่อสร้างจาก Roboflow เราได้เสริมชุดข้อมูลนี้ด้วยคำอธิบายประกอบเพิ่มเติม และทำให้สามารถเข้าถึงได้อย่างเปิดเผยบน Roboflow สามารถดูชุดข้อมูลที่ปรับปรุงแล้วได้ที่นี่: Construction Hazard Detection บน 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'
แบบอย่าง | ขนาด (พิกเซล) | มูลค่า mAP 50 | มูลค่า mAP 50-95 | พารามิเตอร์ (ม) | ฟลอป (ข) |
---|---|---|---|---|---|
โยโล11n | 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 |
โยโล11ล | 640 | 77.3 | 54.6 | 25.3 | 86.9 |
โยโล11x | 640 | 82.0 | 61.7 | 56.9 | 194.9 |
ชุดข้อมูลที่ครอบคลุมของเราช่วยให้แน่ใจว่าแบบจำลองมีความพร้อมในการระบุอันตรายที่อาจเกิดขึ้นได้หลากหลายซึ่งมักพบในสภาพแวดล้อมการก่อสร้าง
เพิ่มการรองรับการแจ้งเตือน WhatsApp
แก้ไขอินเทอร์เฟซ UI ของ example/YOLO server_api/frontend mobile version
เรายินดีรับการมีส่วนร่วมในโครงการนี้ โปรดทำตามขั้นตอนเหล่านี้:
แยกพื้นที่เก็บข้อมูล
ทำการเปลี่ยนแปลงของคุณ
ส่งคำขอดึงพร้อมคำอธิบายที่ชัดเจนเกี่ยวกับการปรับปรุงของคุณ
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต AGPL-3.0