นี่คือพื้นที่เก็บข้อมูลสาธารณะของโครงการวิเคราะห์กล้องจราจรตามที่เผยแพร่ในบล็อกวิทยาเขตวิทยาศาสตร์ข้อมูลสถิติแห่งชาติ โดยเป็นส่วนหนึ่งของ ONS Coronary Faster Indicators (เช่น - กิจกรรมกล้องจราจร - วันที่ 10 กันยายน 2020) และวิธีการที่เกี่ยวข้อง โปรเจ็กต์นี้ใช้ Google Compute Platform (GCP) เพื่อเปิดใช้โซลูชันที่ปรับขนาดได้ แต่วิธีการพื้นฐานนั้นไม่เชื่อเรื่องพระเจ้าบนแพลตฟอร์ม พื้นที่เก็บข้อมูลนี้มีการใช้งานที่เน้น GCP ของเรา
ตัวอย่างผลลัพธ์ที่สร้างขึ้นสำหรับตัวบ่งชี้ที่เร็วขึ้นของไวรัสโคโรนามีดังต่อไปนี้
การทำความเข้าใจรูปแบบที่เปลี่ยนแปลงไปในด้านการเคลื่อนไหวและพฤติกรรมแบบเรียลไทม์เป็นจุดสนใจหลักของการตอบสนองของรัฐบาลต่อไวรัสโคโรนา (โควิด-19) วิทยาเขตวิทยาศาสตร์ข้อมูลกำลังสำรวจแหล่งข้อมูลทางเลือกที่อาจให้ข้อมูลเชิงลึกเกี่ยวกับวิธีประเมินระดับการเว้นระยะห่างทางสังคม และติดตามการฟื้นตัวของสังคมและเศรษฐกิจเมื่อเงื่อนไขการล็อคดาวน์ผ่อนคลายลง
กล้องจราจรเป็นแหล่งข้อมูลที่เปิดเผยต่อสาธารณะอย่างกว้างขวาง ช่วยให้ผู้เชี่ยวชาญด้านการขนส่งและสาธารณชนสามารถประเมินการไหลของการจราจรในส่วนต่างๆ ของประเทศผ่านทางอินเทอร์เน็ต รูปภาพจากกล้องจราจรที่ผลิตขึ้นนั้นเปิดเผยต่อสาธารณะ โดยมีความละเอียดต่ำ และไม่อนุญาตให้ระบุตัวตนของบุคคลหรือยานพาหนะเป็นรายบุคคล แตกต่างจากกล้องวงจรปิดที่ใช้เพื่อความปลอดภัยสาธารณะและการบังคับใช้กฎหมายสำหรับการรับรู้ป้ายทะเบียนอัตโนมัติ (ANPR) หรือสำหรับตรวจสอบความเร็วการจราจร
ขั้นตอนหลักของไปป์ไลน์ตามที่ระบุไว้ในภาพคือ:
การนำเข้ารูปภาพ
การตรวจจับภาพผิดพลาด
การตรวจจับวัตถุ
การตรวจจับวัตถุแบบคงที่
การจัดเก็บจำนวนผลลัพธ์
จากนั้นสามารถประมวลผลการนับเพิ่มเติมได้ (การปรับตามฤดูกาล การใส่ค่าที่ขาดหายไป) และแปลงเป็นรายงานตามต้องการ เราจะตรวจสอบขั้นตอนไปป์ไลน์หลักโดยย่อ
ผู้ใช้เลือกชุดแหล่งที่มาของกล้อง (ภาพ JPEG ที่โฮสต์บนเว็บ) และจัดทำเป็นรายการ URL ให้กับผู้ใช้ มีการจัดเตรียมโค้ดตัวอย่างเพื่อรับภาพสาธารณะจาก Transport for London และโค้ดผู้เชี่ยวชาญเพื่อดึงข้อมูลการจราจร NE โดยตรงจากหอดูดาวในเมืองของมหาวิทยาลัยนิวคาสเซิล
กล้องอาจไม่พร้อมใช้งานด้วยเหตุผลหลายประการ (ข้อผิดพลาดของระบบ ฟีดถูกปิดใช้งานโดยผู้ให้บริการในพื้นที่ ฯลฯ) และสิ่งเหล่านี้อาจทำให้โมเดลสร้างจำนวนวัตถุปลอม (เช่น จุดเล็กๆ อาจดูเหมือนรถบัสที่อยู่ห่างไกล) ตัวอย่างของภาพดังกล่าวคือ:
จนถึงตอนนี้รูปภาพเหล่านี้ทั้งหมดเป็นไปตามรูปแบบของภาพที่สังเคราะห์มาก ซึ่งประกอบด้วยสีพื้นหลังเรียบๆ และข้อความซ้อนทับ (เทียบกับภาพของฉากธรรมชาติ) ปัจจุบันภาพเหล่านี้ตรวจพบได้โดยการลดความลึกของสี (รวมสีที่คล้ายกันเข้าด้วยกัน) จากนั้นดูที่ส่วนสูงสุดของภาพที่มีสีเดียว เมื่อเกินเกณฑ์ เราจะพิจารณาว่ารูปภาพนั้นเป็นภาพสังเคราะห์และทำเครื่องหมายว่ามีข้อบกพร่อง ข้อผิดพลาดอื่นๆ อาจเกิดขึ้นเนื่องจากการเข้ารหัส เช่น:
ในกรณีนี้ การฟีดของกล้องหยุดทำงานและแถว "สด" สุดท้ายถูกทำซ้ำ เราตรวจพบสิ่งนี้โดยการตรวจสอบว่าแถวล่างสุดของรูปภาพตรงกับแถวด้านบนหรือไม่ (ภายในเกณฑ์) หากเป็นเช่นนั้น แถวถัดไปด้านบนจะถูกตรวจสอบว่าตรงกันและต่อๆ ไปจนกว่าแถวจะไม่ตรงกันอีกต่อไปหรือแถวเราหมด หากจำนวนแถวที่ตรงกันเกินกว่าเกณฑ์ รูปภาพไม่น่าจะสร้างข้อมูลที่เป็นประโยชน์ได้ ดังนั้นจึงถูกทำเครื่องหมายว่ามีข้อผิดพลาด
โปรดทราบว่า ผู้ให้บริการรูปภาพแต่ละรายใช้วิธีการที่แตกต่างกันในการแสดงว่ากล้องไม่พร้อมใช้งาน เทคนิคการตรวจจับของเราอาศัยสีไม่กี่สีที่ใช้ กล่าวคือ เป็นภาพที่สังเคราะห์ล้วนๆ หากใช้ภาพที่เป็นธรรมชาติมากขึ้น เทคนิคของเราอาจไม่ได้ผล อีกทางเลือกหนึ่งคือเก็บ "ไลบรารี" ของรูปภาพที่เสียหายไว้และมองหาความคล้ายคลึงกัน ซึ่งอาจทำงานได้ดีกับรูปภาพที่เป็นธรรมชาติมากกว่า
กระบวนการตรวจจับวัตถุสามารถระบุได้ทั้งวัตถุที่อยู่นิ่งและเคลื่อนที่ โดยใช้ Faster-RCNN ที่ได้รับการฝึกล่วงหน้าจากหอดูดาวในเมืองของมหาวิทยาลัยนิวคาสเซิล แบบจำลองนี้ได้รับการฝึกอบรมเกี่ยวกับภาพจากกล้องจราจร 10,000 ภาพจากอังกฤษตะวันออกเฉียงเหนือ และได้รับการตรวจสอบเพิ่มเติมโดยวิทยาเขตวิทยาศาสตร์ข้อมูล ONS เพื่อยืนยันว่าแบบจำลองนี้สามารถใช้ได้กับภาพจากกล้องจากพื้นที่อื่น ๆ ของสหราชอาณาจักร ตรวจจับประเภทวัตถุต่อไปนี้: รถยนต์ รถตู้ รถบรรทุก รถบัส คนเดินเท้า นักปั่นจักรยาน นักปั่นจักรยานยนต์
ขณะที่เราตั้งเป้าที่จะตรวจจับกิจกรรม สิ่งสำคัญคือต้องกรองวัตถุคงที่ออกโดยใช้ข้อมูลชั่วคราว รูปภาพจะถูกสุ่มตัวอย่างในช่วงเวลา 10 นาที ดังนั้นวิธีการดั้งเดิมในการตรวจจับพื้นหลังในวิดีโอ เช่น การผสมของเกาส์เซียนจึงไม่เหมาะ
คนเดินถนนและยานพาหนะใดๆ ที่ถูกจำแนกระหว่างการตรวจจับวัตถุจะถูกตั้งค่าเป็นแบบคงที่และจะถูกลบออกจากการนับสุดท้ายหากปรากฏอยู่ในพื้นหลังด้วย รูปภาพด้านล่างแสดงตัวอย่างผลลัพธ์ของหน้ากากป้องกันไฟฟ้าสถิต โดยที่รถยนต์ที่จอดอยู่ในภาพ (a) ถูกระบุว่าเป็นแบบคงที่และถูกลบออก ประโยชน์พิเศษอีกอย่างหนึ่งก็คือ หน้ากากป้องกันไฟฟ้าสถิตสามารถช่วยกำจัดสัญญาณเตือนที่ผิดพลาดได้ ตัวอย่างเช่น ในรูปภาพ (b) ถังขยะถูกระบุอย่างไม่ถูกต้องว่าเป็นคนเดินถนนในการตรวจจับวัตถุ แต่ถูกกรองออกเป็นพื้นหลังแบบคงที่
ผลลัพธ์จะถูกจัดเก็บเป็นตาราง รหัสกล้องบันทึกสคีมา วันที่ เวลา จำนวนที่เกี่ยวข้องต่อประเภทวัตถุ (รถยนต์ รถตู้ คนเดินเท้า ฯลฯ) หากภาพมีข้อผิดพลาดหรือหากภาพหายไป
ในขั้นต้น ระบบได้รับการออกแบบให้เป็นระบบคลาวด์เนทีฟ เพื่อให้สามารถปรับขนาดได้ อย่างไรก็ตาม สิ่งนี้ทำให้เกิดอุปสรรคในการเข้า - คุณต้องมีบัญชีกับผู้ให้บริการคลาวด์ รู้วิธีรักษาความปลอดภัยโครงสร้างพื้นฐาน ฯลฯ ด้วยเหตุนี้ เราจึงได้ back-ported รหัสเพื่อทำงานบนเครื่องสแตนด์อโลน (หรือ "โฮสต์ท้องถิ่น") เพื่อให้ผู้ใช้ที่สนใจสามารถรันระบบบนแล็ปท็อปของตนเองได้ ขณะนี้มีการอธิบายการใช้งานทั้งสองไว้ด้านล่าง
สถาปัตยกรรมนี้สามารถแมปกับเครื่องเดียวหรือระบบคลาวด์ได้ เราเลือกใช้ Google Compute Platform (GCP) แต่แพลตฟอร์มอื่นๆ เช่น Amazon Web Services (AWS) หรือ Azure ของ Microsoft จะให้บริการที่ค่อนข้างเทียบเท่ากัน
ระบบโฮสต์เป็น "ฟังก์ชันคลาวด์" ซึ่งเป็นโค้ดแบบสแตนด์อโลน ไร้สัญชาติ ซึ่งสามารถเรียกซ้ำๆ ได้โดยไม่ก่อให้เกิดความเสียหาย ซึ่งเป็นข้อพิจารณาสำคัญในการเพิ่มความทนทานของฟังก์ชัน การประมวลผลต่อเนื่องแบบรายวันและ "ทุกๆ 10 นาที" ได้รับการจัดเตรียมโดยใช้เครื่องกำหนดเวลาของ GCP เพื่อทริกเกอร์หัวข้อ GCP Pub/Sub ตามกำหนดการที่ต้องการ ฟังก์ชันระบบคลาวด์ของ GCP ได้รับการลงทะเบียนกับหัวข้อและเริ่มต้นเมื่อใดก็ตามที่หัวข้อถูกทริกเกอร์
การประมวลผลภาพเพื่อตรวจจับยานพาหนะและคนเดินเท้าส่งผลให้มีการเขียนจำนวนวัตถุลงในฐานข้อมูลเพื่อการวิเคราะห์ในภายหลังเป็นอนุกรมเวลา ฐานข้อมูลใช้เพื่อแบ่งปันข้อมูลระหว่างการรวบรวมข้อมูลและการวิเคราะห์อนุกรมเวลา ลดการมีเพศสัมพันธ์ เราใช้ BigQuery ภายใน GCP เป็นฐานข้อมูลของเราโดยได้รับการรองรับอย่างกว้างขวางในผลิตภัณฑ์ GCP อื่นๆ เช่น Data Studio สำหรับการแสดงข้อมูลเป็นภาพ การใช้งานโฮสต์ในพื้นที่จะจัดเก็บ CSV รายวันโดยการเปรียบเทียบ เพื่อลบการพึ่งพาฐานข้อมูลเฉพาะหรือโครงสร้างพื้นฐานอื่น ๆ
ซอร์สโค้ดที่เกี่ยวข้องกับ GCP จะถูกจัดเก็บไว้ในโฟลเดอร์ค cloud
ซึ่งจะดาวน์โหลดภาพ ประมวลผลเพื่อนับวัตถุ จัดเก็บจำนวนในฐานข้อมูล และสร้างการวิเคราะห์อนุกรมเวลา (รายสัปดาห์) เอกสารและซอร์สโค้ดทั้งหมดจะถูกจัดเก็บไว้ในโฟลเดอร์ cloud
โปรดดู Cloud README.md สำหรับภาพรวมของสถาปัตยกรรมและวิธีการติดตั้งอินสแตนซ์ของคุณเองโดยใช้สคริปต์ของเราลงในพื้นที่โปรเจ็กต์ GCP ของคุณ โปรเจ็กต์สามารถรวมเข้ากับ GitHub ได้ ทำให้สามารถปรับใช้อัตโนมัติและทดสอบการดำเนินการโดยอัตโนมัติจากการคอมมิตไปยังโปรเจ็กต์ GitHub ในพื้นที่ สิ่งนี้ได้รับการบันทึกไว้ใน Cloud README.md ด้วย นอกจากนี้ รหัสสนับสนุนระบบคลาวด์ยังจัดเก็บไว้ในโมดูล chrono_lens.gcloud
ซึ่งช่วยให้สคริปต์บรรทัดคำสั่งสามารถรองรับ GCP ได้ ควบคู่ไปกับรหัสฟังก์ชันระบบคลาวด์ในโฟลเดอร์ cloud
รหัสเครื่องเดียว ("localhost") แบบสแตนด์อโลนมีอยู่ในโมดูล chrono_lens.localhost
กระบวนการนี้เป็นไปตามโฟลว์เดียวกันกับตัวแปร GCP แม้ว่าจะใช้เครื่องเดียวและไฟล์ Python แต่ละไฟล์ใน chrono_lens.localhost
จะแมปกับ Cloud Functions ของ GCP อ้างถึง README-localhost.md สำหรับรายละเอียดเพิ่มเติม
ตอนนี้เราอธิบายขั้นตอนต่างๆ และข้อกำหนดเบื้องต้นในการติดตั้งระบบ เนื่องจากการใช้งาน GCP และโฮสต์ภายในเครื่องจำเป็นต้องมีการติดตั้งในเครื่องบางส่วน
ขอแนะนำอย่างยิ่งให้สร้างสภาพแวดล้อมเสมือนจริง โดยให้มีสภาพแวดล้อมการทำงานที่แยกจากกัน ตัวอย่างของสภาพแวดล้อมการทำงานที่ดี ได้แก่ conda, pyenv และ poerty
โปรดทราบว่าการขึ้นต่อกันนั้นมีอยู่ใน requirements.txt
แล้ว ดังนั้นโปรดติดตั้งผ่าน pip:
pip install -r requirements.txt
เพื่อป้องกันไม่ให้ส่งรหัสผ่านโดยไม่ตั้งใจ ขอแนะนำให้ใช้ hooks ที่กระทำล่วงหน้าเพื่อป้องกันไม่ให้การประมวลผล git ก่อนที่ข้อมูลที่ละเอียดอ่อนจะเข้าสู่พื้นที่เก็บข้อมูล เราใช้ hooks ล่วงหน้าจาก https://github.com/ukgovdatascience/govcookiecutter
การติดตั้ง Requirement.txt จะติดตั้งเครื่องมือก่อนคอมมิต ซึ่งตอนนี้จำเป็นต้องเชื่อมต่อกับ git:
pre-commit install
...ซึ่งจะดึงการกำหนดค่าจาก .pre-commit-config.yaml
หมายเหตุ check-added-large-files
ที่ตรวจสอบแล้วมีขนาด kB สูงสุดใน .pre-commit-config.yaml
เพิ่มขึ้นชั่วคราวเป็น 60Mb เมื่อเพิ่มไฟล์โมเดล RCNN /tests/test_data/test_detector_data/fig_frcnn_rebuscov-3.pb
. จากนั้นขีดจำกัดจะเปลี่ยนกลับเป็น 5Mb เป็นขีดจำกัดบน "ปกติ" ที่สมเหตุสมผล
ขอแนะนำให้ทำการกวาดไฟล์ทั้งหมดก่อนดำเนินการต่อ เพียงเพื่อให้แน่ใจว่าไม่มีสิ่งใดเกิดขึ้นโดยไม่ได้ตั้งใจ:
pre-commit run --all-files
การดำเนินการนี้จะรายงานปัญหาที่มีอยู่ - มีประโยชน์เนื่องจาก hook จะทำงานเฉพาะกับไฟล์ที่แก้ไขเท่านั้น
โปรเจ็กต์ได้รับการออกแบบเพื่อใช้ผ่านโครงสร้างพื้นฐานคลาวด์เป็นหลัก แต่มีสคริปต์ยูทิลิตี้สำหรับการเข้าถึงในเครื่องและอัปเดตอนุกรมเวลาในระบบคลาวด์ สคริปต์เหล่านี้อยู่ในโฟลเดอร์ scripts/gcloud
โดยแต่ละสคริปต์จะอธิบายไว้ในส่วนแยกกันต่อไปนี้ ข้อมูลเพิ่มเติมสามารถพบได้ใน scripts/gcloud/README.md
และการใช้งานโดยเครื่องเสมือนเสริมมีอธิบายไว้ใน cloud/README.md
สคริปต์ในโฟลเดอร์ scripts/localhost
รองรับการใช้งานที่ไม่ใช่คลาวด์ และรายละเอียดวิธีใช้ระบบ chrono_lens
บนเครื่องแบบสแตนด์อโลนมีอธิบายไว้ใน README-localhost.md
ข้อมูลเพิ่มเติมเกี่ยวกับการใช้สคริปต์สามารถพบได้ใน scripts/localhost/README.md
โปรดทราบว่าสคริปต์ใช้ประโยชน์จากโค้ดในโฟลเดอร์ chrono_lens
เวอร์ชัน | วันที่ | หมายเหตุ |
---|---|---|
1.0.0 | 2021-06-08 | การเปิดตัวครั้งแรกของพื้นที่เก็บข้อมูลสาธารณะ |
1.0.1 | 21-09-2021 | แก้ไขข้อบกพร่องสำหรับภาพที่แยกออกมา การชนของเวอร์ชันเทนเซอร์โฟลว์ |
1.1.0 | - | เพิ่มการรองรับที่จำกัดสำหรับเครื่องเดี่ยวแบบสแตนด์อโลน |
นำเสนอขอบเขตของการทำงานในอนาคตที่เป็นไปได้ที่นี่ การเปลี่ยนแปลงเหล่านี้อาจไม่ได้รับการตรวจสอบ แต่อยู่ที่นี่เพื่อให้ผู้คนตระหนักถึงการปรับปรุงที่อาจเกิดขึ้นที่เราได้พิจารณา
ปัจจุบันมีการใช้สคริปต์ทุบตีเชลล์เพื่อสร้างโครงสร้างพื้นฐาน GCP การปรับปรุงคือการใช้ IaC เช่น Terraform ซึ่งช่วยลดความยุ่งยากในการเปลี่ยนแปลง (เช่น) การกำหนดค่าฟังก์ชันคลาวด์ โดยไม่ต้องลบทริกเกอร์ Cloud Build ด้วยตนเอง และสร้างใหม่เมื่อสภาพแวดล้อมรันไทม์หรือขีดจำกัดหน่วยความจำมีการเปลี่ยนแปลง
การออกแบบปัจจุบันเกิดขึ้นจากกรณีการใช้งานเบื้องต้นในการรับภาพก่อนที่โมเดลจะเสร็จสิ้น ดังนั้นรูปภาพที่มีอยู่ทั้งหมดจึงถูกดาวน์โหลด ไม่ใช่แค่รูปภาพที่ได้รับการวิเคราะห์เท่านั้น เพื่อประหยัดต้นทุนการนำเข้า โค้ดการนำเข้าควรตรวจสอบกับไฟล์ JSON การวิเคราะห์ และดาวน์โหลดเฉพาะไฟล์เหล่านั้นเท่านั้น ควรแจ้งเตือนเมื่อแหล่งข้อมูลเหล่านี้ไม่มีอีกต่อไป หรือหากมีแหล่งข้อมูลใหม่
ภาพทดแทนทุกคืนสำหรับ NETravelData ดูเหมือนจะรีเฟรชประมาณ 40% ของภาพ NETravelData ข้อดีของการรีเฟรชเป็นประจำจะลดลงหากต้องใช้ตัวเลขเพียงรายวันเท่านั้น และด้วยเหตุนี้ Cloud Function distribute_ne_travel_data
จึงอาจถูกลบออก
http async
ไปยัง PubSub การออกแบบเบื้องต้นใช้สคริปต์ที่ดำเนินการด้วยตนเองเมื่อทดสอบโมเดลใหม่ - กล่าวคือ batch_process_images.py
ข้อมูลนี้จะรายงานความสำเร็จ (หรือไม่) และจำนวนภาพที่ประมวลผล เมื่อต้องการทำเช่นนี้ Cloud Function จะทำงานได้ดีเมื่อส่งคืนผลลัพธ์ อย่างไรก็ตาม สถาปัตยกรรมที่มีประสิทธิภาพมากกว่าคือการใช้คิว PubSub ภายในด้วยฟังก์ชัน distribute_json_sources
และ processed_scheduled
เพิ่มงานลงในคิว PubSub ซึ่งถูกใช้โดยฟังก์ชันผู้ปฏิบัติงานเพียงคนเดียว แทนที่จะเป็นลำดับชั้นปัจจุบันของการเรียกอะซิงก์ (ใช้ฟังก์ชันพิเศษสองฟังก์ชันเพื่อขยายขนาด ).
หอดูดาวในเมืองของมหาวิทยาลัยนิวคาสเซิลได้จัดเตรียม Faster-RCNNN ที่ผ่านการฝึกอบรมมาแล้วซึ่งเราใช้ (สำเนาในตัวเครื่องถูกเก็บไว้ใน /tests/test_data/test_detector_data/fig_frcnn_rebuscov-3.pb
)
ข้อมูลจัดทำโดยการจัดการการจราจรในเมืองทางตะวันออกเฉียงเหนือและการควบคุม Open Data Service ซึ่งได้รับอนุญาตภายใต้ Open Government Licence 3.0 รูปภาพมาจากการจัดการและควบคุมการจราจรในเมืองของ Tyne and Wear
ข้อมูลภาคตะวันออกเฉียงเหนือได้รับการประมวลผลเพิ่มเติมและโฮสต์โดย Urban Observatory ของมหาวิทยาลัยนิวคาสเซิล ซึ่งเราขอขอบคุณการสนับสนุนและคำแนะนำอย่างสุดซึ้ง
ข้อมูลจัดทำโดย TfL และขับเคลื่อนโดย TfL Open Data ข้อมูลได้รับอนุญาตภายใต้ Open Government Licence เวอร์ชัน 2.0 ข้อมูล TfL มีข้อมูล OS © Crown ลิขสิทธิ์และสิทธิ์ฐานข้อมูล 2016 และ Geomni UK Map data © และสิทธิ์ในฐานข้อมูล (2019)
มีการใช้ไลบรารีของบุคคลที่สามต่างๆ ในโปรเจ็กต์นี้ สิ่งเหล่านี้แสดงอยู่ในหน้าการพึ่งพา ซึ่งเรารับทราบถึงการมีส่วนร่วมอย่างสุดซึ้ง