Ini adalah gudang umum proyek analisis Kamera Lalu Lintas yang diterbitkan di Blog Kampus Sains Data Statistik Nasional sebagai bagian dari Indikator Cepat Virus Corona ONS (misalnya - Aktivitas Kamera Lalu Lintas - 10 September 2020) dan metodologi yang mendasarinya. Proyek ini menggunakan Google Compute Platform (GCP) untuk menghasilkan solusi yang skalabel, namun metodologi dasarnya adalah platform agnostik; repositori ini berisi implementasi kami yang berorientasi GCP.
Contoh keluaran yang dihasilkan untuk Indikator Lebih Cepat Virus Corona disajikan di bawah ini.
Memahami perubahan pola mobilitas dan perilaku secara real time telah menjadi fokus utama respons pemerintah terhadap virus corona (COVID-19). Kampus Ilmu Data telah mengeksplorasi sumber data alternatif yang mungkin memberikan wawasan tentang cara memperkirakan tingkat jarak sosial, dan melacak kemajuan masyarakat dan perekonomian seiring dengan pelonggaran kondisi lockdown.
Kamera lalu lintas adalah sumber data yang tersedia secara luas dan tersedia untuk umum yang memungkinkan para profesional transportasi dan masyarakat untuk menilai arus lalu lintas di berbagai wilayah negara melalui internet. Gambar yang dihasilkan kamera lalu lintas tersedia untuk umum, beresolusi rendah, dan tidak mengizinkan orang atau kendaraan untuk diidentifikasi secara individual. Berbeda dengan CCTV yang digunakan untuk keselamatan publik dan penegakan hukum untuk Pengenalan Plat Nomor Otomatis (ANPR) atau untuk memantau kecepatan lalu lintas.
Tahapan utama pipeline, seperti diuraikan pada gambar, adalah:
Penyerapan gambar
Deteksi gambar salah
Deteksi objek
Deteksi objek statis
Penyimpanan jumlah yang dihasilkan
Penghitungan tersebut kemudian dapat diproses lebih lanjut (penyesuaian musiman, penghitungan nilai yang hilang) dan diubah menjadi laporan sesuai kebutuhan. Kami akan meninjau secara singkat tahapan pipa utama.
Seperangkat sumber kamera (gambar JPEG yang dihosting web) dipilih oleh pengguna, dan diberikan sebagai daftar URL kepada pengguna. Kode contoh disediakan untuk mendapatkan gambar publik dari Transport for London, dan kode spesialis untuk mengambil Data Lalu Lintas NE langsung dari Urban Observatory Universitas Newcastle.
Kamera mungkin tidak tersedia karena berbagai alasan (kesalahan sistem, feed dinonaktifkan oleh operator lokal, dll.) dan hal ini dapat menyebabkan model menghasilkan jumlah objek palsu (misalnya gumpalan kecil mungkin terlihat seperti bus yang jauh). Contoh gambar seperti ini adalah:
Sejauh ini semua gambar tersebut mengikuti pola gambar yang sangat sintetik, terdiri dari warna latar belakang datar dan teks yang dilapis (dibandingkan dengan gambar pemandangan alam). Gambar-gambar ini saat ini dideteksi dengan mengurangi kedalaman warna (menggabungkan warna-warna serupa) dan kemudian melihat bagian tertinggi dari gambar yang ditempati oleh satu warna. Setelah melampaui ambang batas, kami menentukan bahwa gambar tersebut sintetis dan menandainya sebagai rusak. Kesalahan lain mungkin terjadi karena pengkodean, seperti:
Di sini, umpan kamera telah terhenti dan baris "langsung" terakhir telah diulang; kami mendeteksi ini dengan memeriksa apakah baris bawah gambar cocok dengan baris di atas (dalam ambang batas). Jika sudah, maka baris berikutnya di atas dicentang kecocokannya dan seterusnya hingga baris-baris tersebut tidak lagi cocok atau kita kehabisan baris. Jika jumlah baris yang cocok berada di atas ambang batas, kemungkinan besar gambar tersebut tidak menghasilkan data yang berguna dan karenanya ditandai sebagai salah.
Perhatikan bahwa penyedia gambar yang berbeda menggunakan cara yang berbeda untuk menunjukkan bahwa kamera tidak tersedia; teknik deteksi kami bergantung pada sedikit warna yang digunakan - yaitu gambar sintetis murni. Jika gambar yang lebih natural digunakan, teknik kami mungkin tidak akan berhasil. Alternatifnya adalah dengan menyimpan "perpustakaan" gambar yang gagal dan mencari kesamaan, yang mungkin berfungsi lebih baik dengan gambar yang lebih alami.
Proses deteksi objek mengidentifikasi objek statis dan bergerak, menggunakan Faster-RCNN terlatih yang disediakan oleh Urban Observatory Universitas Newcastle. Model tersebut telah dilatih pada 10.000 gambar kamera lalu lintas dari Inggris Timur Laut, dan selanjutnya divalidasi oleh ONS Data Science Campus untuk mengonfirmasi bahwa model tersebut dapat digunakan dengan citra kamera dari wilayah lain di Inggris. Ini mendeteksi jenis objek berikut: mobil, van, truk, bus, pejalan kaki, pengendara sepeda, pengendara sepeda motor.
Karena kami bertujuan untuk mendeteksi aktivitas, penting untuk menyaring objek statis menggunakan informasi temporal. Gambar diambil sampelnya dengan interval 10 menit, sehingga metode tradisional untuk mendeteksi latar belakang dalam video, seperti campuran Gaussian, tidak cocok.
Setiap pejalan kaki dan kendaraan yang diklasifikasikan selama deteksi objek akan ditetapkan sebagai statis dan dihapus dari penghitungan akhir jika mereka juga muncul di latar belakang. Gambar di bawah menunjukkan contoh hasil masker statis, dimana mobil yang diparkir pada gambar (a) diidentifikasi sebagai statis dan dihilangkan. Manfaat tambahannya adalah masker statis dapat membantu menghilangkan alarm palsu. Misalnya, pada gambar (b), tempat sampah salah diidentifikasi sebagai pejalan kaki dalam deteksi objek tetapi disaring sebagai latar belakang statis.
Hasilnya hanya disimpan sebagai tabel, skema perekaman id kamera, tanggal, waktu, jumlah terkait per jenis objek (mobil, van, pejalan kaki, dll.), jika ada gambar yang rusak atau jika ada gambar yang hilang.
Awalnya, sistem ini dirancang untuk menjadi cloud native, untuk memungkinkan skalabilitas; namun, hal ini menimbulkan hambatan untuk masuk - Anda harus memiliki akun di penyedia cloud, mengetahui cara mengamankan infrastruktur, dll. Dengan mengingat hal ini, kami juga telah mem-back-port kode agar dapat berfungsi pada mesin yang berdiri sendiri (atau "host lokal") untuk memungkinkan pengguna yang berminat menjalankan sistem di laptop mereka sendiri. Kedua implementasi tersebut sekarang dijelaskan di bawah.
Arsitektur ini dapat dipetakan ke satu mesin atau sistem cloud; kami memilih untuk menggunakan Google Compute Platform (GCP), namun platform lain seperti Amazon Web Services (AWS) atau Microsoft Azure akan menyediakan layanan yang relatif setara.
Sistem ini dihosting sebagai “fungsi cloud”, yaitu kode yang berdiri sendiri dan tanpa kewarganegaraan yang dapat dipanggil berulang kali tanpa menyebabkan kerusakan – sebuah pertimbangan utama untuk meningkatkan ketahanan fungsi tersebut. Proses burst harian dan “setiap 10 menit” diatur menggunakan Penjadwal GCP untuk memicu Topik Pub/Sub GCP sesuai dengan jadwal yang diinginkan. Fungsi cloud GCP didaftarkan berdasarkan topik dan dimulai setiap kali topik dipicu.
Pemrosesan gambar untuk mendeteksi kendaraan dan pejalan kaki menghasilkan jumlah objek yang ditulis ke dalam database untuk kemudian dianalisis sebagai rangkaian waktu. Basis data digunakan untuk berbagi data antara pengumpulan data dan analisis deret waktu, sehingga mengurangi penggandengan. Kami menggunakan BigQuery dalam GCP sebagai database kami karena dukungannya yang luas pada produk GCP lainnya, seperti Data Studio untuk visualisasi data; implementasi host lokal menyimpan CSV harian sebagai perbandingan, untuk menghilangkan ketergantungan pada database tertentu atau infrastruktur lainnya.
Kode sumber terkait GCP disimpan di folder cloud
; ini mengunduh citra, memprosesnya untuk menghitung objek, menyimpan jumlah tersebut dalam database dan (mingguan) menghasilkan analisis deret waktu. Semua dokumentasi dan kode sumber disimpan di folder cloud
; lihat Cloud README.md untuk ringkasan arsitektur dan cara menginstal instance Anda sendiri menggunakan skrip kami ke dalam ruang project GCP Anda. Proyek ini dapat diintegrasikan ke dalam GitHub, memungkinkan penerapan otomatis dan eksekusi pengujian secara otomatis dari komitmen ke proyek GitHub lokal; ini juga didokumentasikan di Cloud README.md. Kode dukungan cloud juga disimpan dalam modul chrono_lens.gcloud
, memungkinkan skrip baris perintah untuk mendukung GCP, bersama dengan kode Cloud Function di folder cloud
.
Kode mesin tunggal ("localhost") yang berdiri sendiri terdapat dalam modul chrono_lens.localhost
. Prosesnya mengikuti alur yang sama seperti varian GCP, meskipun menggunakan satu mesin dan setiap file python di chrono_lens.localhost
dipetakan ke Cloud Functions GCP. Lihat README-localhost.md untuk rincian lebih lanjut.
Kami sekarang menjelaskan berbagai langkah dan prasyarat untuk menginstal sistem, mengingat implementasi GCP & hos lokal setidaknya memerlukan beberapa instalasi lokal.
Penciptaan lingkungan virtual sangat disarankan untuk memungkinkan lingkungan kerja yang terisolasi. Contoh lingkungan kerja yang baik antara lain conda, pyenv, dan poerty.
Perhatikan bahwa dependensi sudah terdapat dalam requirements.txt
, jadi harap instal ini melalui pip:
pip install -r requirements.txt
Untuk mencegah memasukkan kata sandi secara tidak sengaja, disarankan untuk menggunakan kait pra-komit yang mencegah proses komit git sebelum informasi sensitif masuk ke dalam repositori. Kami telah menggunakan kait pra-komitmen dari https://github.com/ukgovdatascience/govcookiecutter
Menginstal persyaratan.txt akan menginstal alat pra-komit, yang sekarang harus terhubung ke git:
pre-commit install
...yang kemudian akan menarik konfigurasi dari .pre-commit-config.yaml
.
CATATAN check-added-large-files
memiliki ukuran kB maksimum di .pre-commit-config.yaml
untuk sementara ditingkatkan menjadi 60Mb saat menambahkan file model RCNN /tests/test_data/test_detector_data/fig_frcnn_rebuscov-3.pb
. Batas tersebut kemudian dikembalikan ke 5Mb sebagai batas atas "normal" yang masuk akal.
Dianjurkan untuk melakukan sapuan pada semua file sebelum melanjutkan, hanya untuk memastikan tidak ada yang salah:
pre-commit run --all-files
Ini akan melaporkan masalah apa pun yang ada - berguna karena hook hanya dijalankan pada file yang diedit.
Proyek ini dirancang untuk digunakan terutama melalui infrastruktur cloud, tetapi terdapat skrip utilitas untuk akses lokal dan pembaruan deret waktu di cloud. Skrip ini terletak di folder scripts/gcloud
, dan setiap skrip kini dijelaskan di bagian terpisah berikut ini. Informasi lebih lanjut dapat ditemukan di scripts/gcloud/README.md
, dan penggunaannya oleh mesin virtual opsional dijelaskan di cloud/README.md
.
Penggunaan non-cloud didukung oleh skrip di folder scripts/localhost
, dan detail cara menggunakan sistem chrono_lens
pada mesin yang berdiri sendiri dijelaskan di README-localhost.md
. Informasi lebih lanjut tentang penggunaan skrip dapat ditemukan di scripts/localhost/README.md
.
Perhatikan bahwa skrip menggunakan kode di folder chrono_lens
.
Versi | Tanggal | Catatan |
---|---|---|
1.0.0 | 08-06-2021 | Rilis pertama repositori publik |
1.0.1 | 21-09-2021 | Perbaikan bug untuk gambar yang terisolasi, versi tensorflow yang meningkat |
1.1.0 | ? | Menambahkan dukungan terbatas untuk satu mesin yang berdiri sendiri |
Bidang-bidang yang berpotensi untuk dikerjakan di masa depan disajikan di sini; perubahan ini mungkin tidak diselidiki, namun dilakukan untuk menyadarkan masyarakat akan potensi perbaikan yang telah kami pertimbangkan.
Saat ini, skrip bash shell digunakan untuk membuat infrastruktur GCP; perbaikannya adalah dengan menggunakan IaC, seperti Terraform. Hal ini menyederhanakan perubahan (misalnya) konfigurasi Cloud Function tanpa harus menghapus Cloud Build Trigger secara manual dan membuatnya kembali ketika lingkungan runtime atau batas memori diubah.
Desain saat ini berasal dari kasus penggunaan awal untuk memperoleh gambar sebelum model diselesaikan, sehingga semua gambar yang tersedia diunduh, bukan hanya gambar yang dianalisis. Untuk menghemat biaya penyerapan, kode penyerapan harus melakukan pemeriksaan silang terhadap file JSON analisis dan hanya mendownload file tersebut; peringatan harus dimunculkan ketika salah satu sumber ini tidak lagi tersedia, atau jika sumber baru tersedia.
Pengisian ulang gambar setiap malam untuk NETravelData tampaknya menyegarkan sekitar 40% gambar NETravelData; keuntungan dari penyegaran rutin akan berkurang jika angka tersebut hanya diperlukan setiap hari, dan oleh karena itu, distribute_ne_travel_data
Cloud Function dapat dihapus.
http async
ke PubSub Desain awal menggunakan skrip yang dioperasikan secara manual saat menguji model baru - yaitu batch_process_images.py
. Ini melaporkan keberhasilan (atau tidak) dan jumlah gambar yang diproses. Untuk melakukan hal ini, Cloud Function berfungsi dengan baik dan mengembalikan hasilnya. Namun, arsitektur yang lebih efisien adalah dengan menggunakan antrean PubSub secara internal dengan fungsi distribute_json_sources
dan processed_scheduled
yang menambahkan pekerjaan ke antrean PubSub yang digunakan oleh satu fungsi pekerja, daripada hierarki panggilan asinkron saat ini (menggunakan dua fungsi tambahan untuk memperluas skala ).
Observatorium Perkotaan Universitas Newcastle menyediakan Faster-RCNNN terlatih yang kami gunakan (salinan lokal disimpan di /tests/test_data/test_detector_data/fig_frcnn_rebuscov-3.pb
).
Data disediakan oleh Layanan Data Terbuka Manajemen dan Kontrol Lalu Lintas Perkotaan Timur Laut, yang dilisensikan di bawah Lisensi Open Government 3.0. Gambar dikaitkan dengan Manajemen dan Kontrol Lalu Lintas Perkotaan Tyne and Wear.
Data Timur Laut diproses lebih lanjut dan diselenggarakan oleh Urban Observatory di Universitas Newcastle, yang dukungan dan sarannya sangat kami hargai.
Data disediakan oleh TfL dan didukung oleh TfL Open Data. Data dilisensikan di bawah Lisensi Open Government versi 2.0. Data TfL berisi data OS © Hak cipta Crown dan hak basis data 2016 dan © data Peta Geomni UK dan hak basis data (2019).
Berbagai perpustakaan pihak ketiga digunakan dalam proyek ini; ini tercantum di halaman dependensi, yang kontribusinya kami hargai dengan penuh syukur.