Bagaimana kami mengembangkan perangkat untuk memonitor perhatian pengemudi. Pengalaman Yandex.Taxi



Taksi harus nyaman dan aman. Dan ini tidak hanya tergantung pada kualitas mobil dan layanan, tetapi juga pada konsentrasi perhatian pengemudi, yang jatuh selama kerja berlebihan. Oleh karena itu, pada tingkat layanan, kami membatasi waktu yang dihabiskan pengemudi di belakang kemudi.

Tetapi kadang-kadang pengemudi sudah bosan, misalnya, seseorang sibuk dengan pekerjaan lain sepanjang hari, dan pada malam hari memutuskan untuk "menyetir". Apa yang harus dilakukan? Bagaimana memahami bahwa pengemudi mengintervensi tanpa mengubah tidur? Anda dapat, misalnya, mencoba menilai seberapa dekat ia memantau jalan, dan menentukan tanda-tanda kelelahan, misalnya, karena sifat kedipannya. Apakah itu terdengar sederhana? Semuanya lebih rumit dari yang terlihat.

Hari ini pertama-tama kita akan memberi tahu pembaca Habr bagaimana kita membuat dan mengembangkan kamera yang bisa melakukan ini.

Jadi, itu diberikan: frekuensi dan durasi kedipan tergantung pada tingkat kelelahan. Ketika kita lelah, kepala kurang bergerak, arah pandangan kita berubah lebih jarang, kita lebih sering berkedip dan mata kita tertutup untuk jangka waktu yang lama - perbedaannya dapat diukur dalam fraksi putaran kedua atau beberapa derajat, tetapi memang ada. Tugas kami adalah merancang perangkat yang memungkinkan kami menganalisis kedipan, serta arah pandangan, menguap, dan gerakan kepala kami, untuk menilai tingkat perhatian dan kelelahan pengemudi.

Pertama, kami memutuskan: mari membuat aplikasi laptop, meletakkannya di atas relawan dari antara karyawan, dan apakah itu akan menggunakan kamera bawaan untuk melacak tanda-tanda yang kita butuhkan? Jadi kami akan segera mengumpulkan banyak informasi untuk dianalisis dan dengan cepat menguji hipotesis kami.

Spoiler: tidak ada yang terjadi! Cukup cepat menjadi jelas bahwa kebanyakan orang ketika bekerja di komputer terus-menerus melihat keyboard dan memiringkan kepala mereka. Artinya, mata tidak terlihat, dan bahkan tidak jelas apakah mata tertutup atau terbuka, seseorang berkedip atau hanya melihat dari layar ke keyboard dan sebaliknya.



Kemudian kami menyadari bahwa bahkan untuk membuat prototipe, kami memerlukan beberapa jenis perangkat. Kami membeli model kamera IP pertama yang tersedia, yang berfungsi dalam rentang inframerah.

Mengapa kita membutuhkan inframerah? Pencahayaan bisa berbeda, kadang-kadang pengguna berada di tempat teduh, kadang-kadang cahaya dari belakang, dari atas, atau tidak ada sama sekali. Jika kita membuat alat pengukur, maka itu harus bekerja sama dalam kondisi apa pun.

Untuk percobaan, muncul kamera yang cukup populer dari Xiaomi - CHUANGMI.



Ternyata dia memotret pada frekuensi 15 frame per detik, dan kita membutuhkan dua kali lebih banyak: berkedip berlangsung dari 30 hingga 150 ms, pada 15 frame per detik kita berisiko "tidak melihat" berkedip lebih pendek dari 60-70 ms. Oleh karena itu, kami harus memodifikasi firmware-nya untuk secara paksa menyalakan iluminasi IR, mendapatkan akses langsung ke aliran video dan mengambil 30 frame yang diperlukan per detik. Setelah menghubungkan kamera ke laptop dan dikonfigurasi untuk menerima aliran video melalui protokol RTSP, kami mulai merekam video pertama. Kamera ditempatkan 15 cm di bawah kamera laptop, dan ini memungkinkan untuk lebih "melihat" mata pengguna.

Sukses Dan lagi, tidak. Setelah mengumpulkan beberapa ratus video, kami menyadari bahwa tidak ada yang terjadi. Perilaku pengguna laptop pada siang hari berbeda dari perilaku pengemudi: seseorang dapat bangun kapan saja, pergi untuk menggigit, berjalan dan melakukan pemanasan, sementara pengemudi menghabiskan lebih banyak waktu dalam posisi duduk. Karena itu, data seperti itu tidak cocok untuk kita.

Menjadi jelas bahwa satu-satunya cara adalah membuat atau membeli kamera yang cocok dan memasangnya di mobil.

Tampaknya semuanya adalah dasar: kita membeli DVR, kita berbalik ke arah pengemudi, mengencangkannya di mobil dan sekali seminggu kita mengambil kartu SD dengan rekaman video. Tapi di sini, pada kenyataannya, semuanya ternyata tidak sesederhana itu.

Pertama, sangat sulit untuk menemukan DVR dengan pencahayaan IR, dan kita perlu melihat wajahnya dengan baik, terutama di malam hari.

Kedua, semua DVR memiliki lensa sudut lebar, sehingga area dengan wajah pengemudi menjadi sangat kecil dan Anda tidak dapat melihat apa pun dalam catatan. Ya, dan distorsi dari lensa cukup banyak merusak analisis posisi kepala dan arah pandang.

Ketiga, usaha ini tidak skala baik pada sepuluh, seratus atau lebih mesin. Kami perlu mengumpulkan banyak data dari driver yang berbeda untuk menganalisisnya dan menarik kesimpulan. Mengubah kartu memori secara manual pada seratus mesin setiap minggu atau setiap hari adalah buang-buang waktu. Kami bahkan mencoba menemukan kamera yang akan mengunggah video ke cloud, tetapi tidak ada yang serupa di pasaran.

Bahkan ada ide untuk membuat "DVR Anda sendiri" dari Raspberry Pi, kamera dengan penerangan dan pemasangan IR.



Hasilnya tidak seperti yang kami harapkan: rumit, tidak mungkin untuk menginstal kamera secara terpisah dari komputer. Faktanya adalah bahwa dengan panjang kabel lebih dari 50 cm, masalah dengan sinyal dimulai, dan kabel CSI itu sendiri sangat rapuh, terlalu lebar dan karenanya tidak cocok untuk pemasangan di mesin.

Kami harus pergi ke Hong Kong, kami memutuskan. Tujuan perjalanan itu cukup abstrak: untuk melihat apa yang dilakukan pabrikan berbeda di bidang menganalisis perilaku pengemudi, membeli sampel produk jika kami temukan, dan mencari solusi / komponen teknis yang sesuai yang dapat kami pasang di mobil.

Kami segera pergi ke dua pameran elektronik dan komponen yang populer. Di paviliun elektronik otomotif, kami melihat dominasi perekam video, kamera spion dan sistem ADAS yang belum pernah terjadi sebelumnya, tetapi hampir tidak ada yang terlibat dalam menganalisis perilaku pengemudi. Prototipe beberapa pabrikan bertekad untuk tertidur, terganggu, merokok dan berbicara di telepon, tetapi tidak ada yang memikirkan kelelahan.

Sebagai hasilnya, kami membeli beberapa sampel kamera dan komputer papan tunggal. Menjadi jelas bahwa 1) tidak ada produk jadi yang cocok untuk kita; 2) perlu untuk memisahkan komputer dan kamera agar tidak mengaburkan pandangan pengemudi. Oleh karena itu, kami mengambil papan kamera dengan antarmuka USB dan, sebagai unit komputasi, komputer Banana Pi papan tunggal, dan pada saat yang sama beberapa pemain Android berdasarkan prosesor Amlogic.



"Kenapa para pemain?" - kamu bertanya. Bahkan, S912 dan bahkan S905 cukup kuat dalam hal kinerja dan mereka dapat dengan mudah menarik rekaman video untuk keperluan kita bahkan dengan analisis gambar langsung di tempat. Analisis gambar di tempat diperlukan agar tidak mengirim seluruh aliran video ke server.

Mari kita hitung: satu menit video terkompresi dengan baik dalam resolusi H.264 dari 640 Γ— 480 (30 FPS) membutuhkan setidaknya 5 megabyte. Jadi, dalam satu jam akan ada 300 megabyte, dan untuk shift 8 jam standar - sekitar 2-3 gigabytes.

Mengunggah video 3 gigabytes setiap hari dengan bantuan modem LTE sangat β€œmahal”. Oleh karena itu, kami memutuskan untuk merekam video 5 menit secara berkala, dan menganalisis semua yang terjadi di mobil di sana dan mengunggahnya ke server kami dalam bentuk aliran peristiwa yang diuraikan: serangkaian titik wajah, arah tampilan, putaran kepala, dll.

Kami kembali dari pameran dalam suasana hati yang baik, membawa banyak sampah yang diperlukan (dan tidak perlu) dan menyadari bagaimana kami akan terus membuat prototipe.

Kamera USB yang kami temukan di Hong Kong hampir sempurna untuk kami: ukuran 38x38 mm, lensa standar (12 mm), kemampuan menyolder iluminator IR langsung ke papan.



Karena itu, kami segera meminta pabrikan untuk membuat kami prototipe dengan komponen yang diperlukan. Sekarang kami mengerti: kami membutuhkan kamera USB dengan lampu latar dan PC papan tunggal untuk pemrosesan video. Kami memutuskan untuk mencoba semua yang disajikan di pasar, dan mengatur sesi belanja di AliExpress. Kami membeli empat lusin kamera yang berbeda, selusin PC papan tunggal, pemain Android, koleksi lensa 12mm dan banyak perangkat aneh lainnya.



Masalah dengan perangkat keras telah diatasi. Dan bagaimana dengan perangkat lunak?

Cukup cepat, kami bisa mendapatkan prototipe sederhana berdasarkan OpenCV , yang menulis video, menemukan wajah pengemudi, menganalisanya, menandai 68 poin kunci di wajah, mengenali kedipan, menguap, memutar kepala, dll.

Tugas selanjutnya adalah membuat prototipe kami berfungsi pada PC papan tunggal. Raspberry PI langsung jatuh: beberapa core, prosesor lemah, lebih dari tujuh frame per detik tidak dapat ditarik darinya. Dan tentang bagaimana secara bersamaan menulis video, mengenali wajah dan menganalisisnya, tidak ada pertanyaan. Untuk alasan yang sama, set-top box dan komputer papan tunggal di Allwinner (H2, H3, H5), Amlogic S905 dan Rockchip RK3328 tidak cocok dengan kami, meskipun yang terakhir sangat dekat dengan kinerja yang diinginkan. Akibatnya, kami masih memiliki dua SoC potensial: Amlogic S912 dan Rockchip RK3399.

Di Amlogic, pilihan perangkatnya kecil: kotak TV atau Khadas VIM2. Semuanya bekerja sama pada kotak TV dan Khadas, tetapi pendinginan set-top box meninggalkan banyak yang harus diinginkan, dan mengkonfigurasi Linux pada mereka sering kali bukan untuk menjadi lemah hati: mendapatkan Wi-Fi, BT untuk bekerja, membuat OS melihat semua memori, - Itu panjang, sulit dan tidak dapat diprediksi. Alhasil, kami memilih Khadas VIM2: ia memiliki radiator pendingin standar, dan papannya cukup kompak untuk menyembunyikannya di balik dashboard mesin.



Pada saat ini, pabrikan papan kamera telah mengirimi kami setumpuk uji sebanyak seratus buah, dan kami ingin sekali bertempur: membuat prototipe, memasukkannya ke dalam mobil, dan mengumpulkan data.

Kami memiliki kamera, ada perangkat lunak, ada PC papan tunggal, tetapi tidak ada ide sedikit pun bagaimana memasukkan semua ini ke dalam mobil dan menghubungkannya ke catu daya on-board.

Jelas, kamera membutuhkan tubuh dan mount. Kami membeli dua printer 3D sekaligus untuk mencetak komponen, dan kontraktor membuat kami menjadi model primitif pertama dari kasing ini.



Sekarang tugas sulit pilihan telah muncul: di mana memasang kamera di mobil untuk mendapatkan gambar yang baik, tetapi tidak untuk mengaburkan visi pengemudi. Tepatnya ada tiga opsi:

  1. Di tengah kaca depan.
  2. Di rak kiri.
  3. Di kaca spion.



Pada saat itu, tampak bagi kami bahwa yang terbaik adalah memasang kamera langsung ke kaca spion: selalu diarahkan ke wajah pengemudi, sehingga kamera akan memotret tepat seperti yang kita butuhkan. Sayangnya, produsen kaca spion tidak memastikan bahwa sesuatu dapat dengan mudah dan andal melekat padanya. Kamera tidak tahan, jatuh dan menutup ulasan.



Meskipun demikian, kami melengkapi beberapa mesin dan mulai mengumpulkan data dari mereka. Menjadi jelas bahwa desainnya tidak sempurna, dan masalah yang berkaitan dengan kinerja dan pemanasan naik sementara secara bersamaan merekam dan menganalisis wajah.

Kemudian kami memutuskan untuk memasang kamera setinggi mata di rak kiri: kami menutup ulasan lebih sedikit dan memiliki sudut pandang yang baik untuk kamera sehingga pengemudi dapat terlihat. Kasing harus diulang, karena pengencang dengan engsel terbukti sangat tidak dapat diandalkan: mereka pecah ketika bergetar, pecah, dan cangkir hisap terlepas dari gelas.



Kami memutuskan bahwa untuk prototipe dan pengumpulan data, lebih baik menempelkan kamera pada kaca dengan kuat sehingga tidak ada guncangan dan pengaruh eksternal dapat mengubah posisi mereka. Kami sedikit memodifikasi kasing dan pada saat yang sama melakukan pengujian beban pemasangan menggunakan pita dua sisi khusus. Untuk pengujian, peralatan kompleks dan presisi tinggi digunakan.



Karena masalah kinerja, kami memutuskan untuk mengubah SoC ke yang lebih kuat, jadi kami memilih PC single-board NanoPI M4 pada prosesor Rockchip RK3399.

Dibandingkan dengan Khadas VIM2, ini sekitar sepertiga lebih produktif, memiliki kompresi perangkat keras dan decoding video, dan berperilaku jauh lebih stabil dalam kondisi suhu yang sulit. Ya, kami mencoba menjalankan kamera dan papan sirkuit di dalam freezer, memanaskannya dalam oven dan melakukan banyak tes tidak manusiawi lainnya.



Karena kami merekam video tidak hanya seperti itu, tetapi dalam dinamika sepanjang hari, penting bahwa waktu sistem pada perangkat akurat. Sayangnya, sebagian besar komputer papan tunggal tidak dilengkapi dengan jam berdaya sendiri. Kami beruntung bahwa NanoPI kami memiliki konektor baterai.

Saya harus merancang case untuk komputer yang secara fisik akan melindunginya dan bertindak sebagai dudukan untuk WiFi dan antena BT. Di sana kami juga menyediakan tempat untuk memasang baterai arloji dengan dudukan.



Selanjutnya, kami berencana untuk melengkapi seratus mesin dengan prototipe yang akan merekam video dan mengirimkan semua telemetri ke cloud online: apakah ada driver, seberapa sering dan untuk waktu yang lama ia berkedip, menguap, terganggu dari jalan, memutar kepalanya, dll. Semua ini ( dan tidak hanya) parameter memungkinkan kita untuk melatih model yang mengevaluasi seberapa terkonsentrasi pengemudi di jalan, apakah dia terganggu atau lelah. Untuk melakukan semua ini langsung pada perangkat di mobil, kami harus menulis ulang kode sepenuhnya, melakukan kompresi video perangkat keras, memutar log dan rekaman video, secara teratur mengirimkannya ke server, memperbarui perangkat lunak jarak jauh, dan banyak lagi.

Pada saat yang sama, menjadi jelas bagi kami bahwa perhitungan dan algoritma kami akan bekerja lebih baik dengan analisis wajah dasar yang lebih akurat. Dalam prototipe pertama, kami menggunakan detektor wajah yang dibangun ke dalam OpenCV berdasarkan model cascading haar dan model untuk menandai 68 titik wajah berdasarkan perpustakaan dlib . Kami menghitung posisi kepala sendiri dengan menghitung proyeksi titik wajah pada bidang fokus. Solusi open-source untuk pengenalan dan penandaan wajah bekerja dengan baik pada bingkai di mana wajah ditembak di depan atau profil, tetapi dalam kondisi menengah sering keliru.

Oleh karena itu, kami memutuskan untuk melisensikan solusi pengenal wajah dan penandaan pihak ketiga yang baik - VisionLabs SDK. Dibandingkan dengan algoritma sebelumnya, ini lebih intensif sumber daya, tetapi memberikan peningkatan nyata dalam kualitas pengenalan wajah dan penandaan, yang mengarah pada ekstraksi faktor yang lebih akurat untuk pembelajaran mesin. Dengan bantuan rekan-rekan dari VisionLabs, kami dapat dengan cepat beralih ke SDK mereka dan mendapatkan kinerja yang kami butuhkan: 30 frame / detik. pada resolusi 640x480.

VisionLabs SDK menggunakan jaringan saraf untuk pengenalan wajah. Teknologi ini memproses setiap bingkai, menemukan wajah pengemudi di atasnya dan memberikan koordinat mata, hidung, mulut dan poin-poin penting lainnya. Data yang diperoleh digunakan untuk membuat bingkai yang dinormalisasi dengan ukuran 250x250, di mana wajah terletak secara ketat di tengah. Bingkai ini sudah dapat digunakan untuk menghitung posisi kepala dalam derajat sepanjang tiga sumbu: yaw, pitch and roll. Untuk melacak status mata pengemudi, sistem menganalisis gambar mata dan untuk setiap mata memutuskan apakah mata itu tertutup atau terbuka. Sistem ini dapat menentukan dengan menggunakan teknologi IR Liveness apakah orang yang hidup ada di depan kamera atau pengemudi telah memasang foto. Untuk analisis, frame yang dinormalisasi digunakan, dan pada output kita mendapatkan hasilnya hidup atau notalive.

Kesimpulan


Sementara kami menulis ulang dan men-debug perangkat lunak, printer 3D kami mencetak case untuk kamera dan PC papan tunggal siang dan malam. Mencetak kit (badan kamera + kasing PC) memakan waktu sekitar 3-4 jam operasi printer, jadi kami harus memperluas kapasitas produksi: kami menggunakan empat printer. Tapi kami berhasil melakukan semua sesuai jadwal.



Dalam dua minggu, kami telah melengkapi seratus mobil pertama di beberapa armada taksi - mitra Yandex.Taxi. Sekarang dengan bantuan mereka, kami mengumpulkan video, menganalisis perilaku pengemudi, tanda-tanda kelelahan, meningkatkan algoritme, dan melatih model yang mengevaluasi tingkat perhatian dan kelelahan. Dan hanya setelah itu (dengan mempertimbangkan semua data, umpan balik dari pengemudi dan penumpang) kami akan siap untuk melanjutkan ke tahap berikutnya - produksi dan implementasi massal.

Sayangnya, untuk skala ke beberapa ribu atau puluhan ribu instalasi, solusi teknis saat ini sangat tidak cocok karena sejumlah alasan. Semua yang kita bicarakan dalam artikel ini adalah percobaan cepat, yang tujuannya adalah untuk dengan cepat mempelajari cara mengumpulkan data langsung dari mesin untuk melatih model. Tahap besar berikutnya bagi kami adalah mengembangkan dan mulai memproduksi perangkat dengan dimensi yang sama, tetapi terdiri dari satu unit: kamera, sensor, dan modem akan ditempatkan dalam satu wadah yang kompak, yang akan kami pasang secara massal di mesin.

Source: https://habr.com/ru/post/id461137/


All Articles