Visi komputer pada server Intel OWT WebRTC dengan akselerasi perangkat keras


WebRTC telah menyederhanakan (sebagian besar) menerima dan mengirim streaming video secara real time. Jadi, Anda bisa bersenang-senang dengan mereka menggunakan pembelajaran mesin. Bulan lalu, saya menunjukkan cara menjalankan Computer Vision (CV) secara lokal di browser . Seperti yang saya sebutkan, secara lokal, tentu saja, bagus, tetapi kadang-kadang diperlukan kinerja yang lebih tinggi, dan untuk ini kita memerlukan server jarak jauh. Dalam posting ini, saya akan berbicara tentang cara menjalankan model server OpenCV dengan akselerasi perangkat keras pada chipset Intel menggunakan Open WebRTC Toolkit (OWT) dengan kode sumber terbuka.

Saya ingin bermain dengan server OWT karena Intel mendemonstrasikan fitur visi komputer dari Kranky Geek , dan sekarang saya cukup beruntung untuk bekerja dengan tim pengembangan mereka untuk menjelajahi kemampuan server. Di bawah ini saya akan berbicara tentang cara menginstal OWT secara lokal untuk pengujian cepat, serta menunjukkan beberapa model.

Buka WebRTC Toolkit (OWT)


Intel merilis Intel Collaboration Suite untuk WebRTC sekitar tahun 2014. Paket ini terdiri dari SDK server dan klien yang dirancang untuk menggunakan perangkat keras Intel. Perusahaan terus memperluas perangkat lunak ini, menambahkan fitur baru dan meningkatkan kemampuannya. Kemudian, pada tahun 2018, Intel membuka kode sumber untuk seluruh proyek di bawah merek Open WebRTC Toolkit (OWT). Mereka masih mengusulkan menggunakan Collaborate Suite untuk WebRTC, menurut mereka, satu-satunya perbedaan adalah dalam bundling dengan tambahan Intel QA (yang tidak begitu jarang dalam proyek-proyek open source yang didukung oleh perusahaan komersial). Dalam posting ini, kami akan fokus pada open source OWT.


Anda dapat membuka beranda OWT di: 01.org/open-webrtc-toolkit

Apa yang dilakukan oleh server media


Server media OWT dapat bertindak sebagai server Multipoint control unit (MCU), di mana file media didekodekan, diproses, dan ditranskode sebelum dikirim kembali ke klien sebagai tambahan metode Selective Forwarding Unit (SFU) yang lebih khas . OWT Intel dipandang sebagai prosesor media waktu nyata dengan fitur untuk aplikasi berikut:

  • Konferensi multipoint - SFU telah terbukti menjadi arsitektur utama untuk konferensi WebRTC, tetapi MCU masih diperlukan dalam skenario di mana pemrosesan sisi klien terbatas (misalnya, pada perangkat IoT), atau dalam kombinasi dengan salah satu poin di bawah ini.
  • – MCU , .
  • – -WebRTC , , RTSP, RTMP, HLS, MPEG-DASH.
  • – .
  • SIP-gateway – WebRTC , VoIP-.
  • – ( ).

Server dibangun di atas node.js dengan MongoDB untuk database dan RabbitMQ sebagai pialang pesan. Fungsi-fungsi yang tercantum dalam daftar di atas, serta yang tidak termasuk dalam daftar, diimplementasikan sebagai berbagai Agen yang terhubung ke arsitektur OWT.

Selain itu, OWT memiliki SDK klien untuk berinteraksi dengan server media. Itu juga dapat digunakan dalam mode P2P.

Percepatan


Arsitekturnya dirancang untuk menggunakan perangkat keras Intel. Ini termasuk sebagian besar prosesor Intel modern dan prosesor yang bahkan lebih dipercepat dengan grafik terintegrasi, CPLD (FPGAs) dan prosesor khusus mesin vision Intel (Vision Processing Unit - VPU) . (Inilah yang proyek saya buat menggunakan salah satu chip Movidius mereka dengan Google Vision Kit).


Analisis dan Visi Komputer (CV)


Siapa pun yang telah bekerja dengan serius dengan visi komputer telah menemukan OpenCV . OpenCV awalnya merupakan proyek Intel dan masih tetap demikian. Intel memiliki seperangkat alat yang disebut OpenVINO (Open Visual Inference dan Neural Network Optimization) untuk mengoptimalkan model pembelajaran mendalam pada perangkat kerasnya. Ini adalah bagian dari repositori OpenCV . OpenCV mencakup lusinan model pra-terlatih, dari pengenalan teks dasar hingga aplikasi self-driving.

OWT Analytics Agent adalah modul untuk menerima prediksi waktu-nyata pada model OpenVINO. Agen Analystics dapat mengirim metadata keluaran ke cloud, atau Anda sendiri dapat mengirimkannya kembali ke server media untuk membuat, misalnya, anotasi untuk video real-time (saya akan menunjukkannya sedikit nanti). Pustaka GStreamer yang terkenal digunakan untuk mengelola pipa multimedia.

Arsitektur



Diagram di atas diambil dari panduan analisis server . Tampaknya rumit, tetapi di sini Anda hanya perlu mengingat bahwa Agen Analytics bertindak sebagai peserta konferensi lain yang dapat berlangganan saluran video dalam konferensi ini. Setelah menerima aliran video, Anda dapat mengarahkan pemrosesan aliran ke berbagai tahap menggunakan pipa GStreamer. Dalam kebanyakan kasus, Anda ingin melakukan prediksi dan klasifikasi sebelum mengembalikan aliran video kembali ke MCU, tetapi Anda juga dapat mengirim aliran dan / atau data keluaran di tempat lain.

Instalasi Docker


Instalasi akan memakan waktu sedikit, karena Anda harus menginstal server OWT dan Agen Analytics. Untungnya, mereka memiliki petunjuk pembuatan Docker untuk kemudahan pemasangan. Jika mau, Anda dapat menjalankan OWT + Analytics Agent sebagai 4 wadah terpisah untuk lingkungan terdistribusi. Saya memutuskan untuk meninggalkan semua barang saya secara lokal dalam satu wadah untuk mempermudah evaluasi.

Bahkan, Intel awalnya memberi saya gambar gst-owt-all:rununtuk bekerja, karena pada saat menulis artikel saya mereka memperbarui dokumentasi untuk menginstal Agen Analytics. Set baru jauh lebih mudah dimengerti. Saya masih menyarankan agar Anda membiasakan diri dengan instalasi OWT standar untuk memahami komponen dan opsinya.

Selain itu, Anda perlu mengkompilasi banyak dengan gcc. Pastikan Anda memiliki versi terbaru dengan menjalankan perintah berikut: brew install gcc

Pada awalnya, tidak ada yang dikompilasi, tetapi setelah menjalankan perintah ini semuanya berfungsi.
Pada akhirnya, saya mulai membangun semuanya sendiri. Untuk membuat server OWT dengan Analytics, jalankan perintah berikut:

git clone https://github.com/open-webrtc-toolkit/owt-server.git
 
cd owt-server
git branch gst-analytics
cd /owt-server/docker/gst
curl -o l_openvino_toolkit_p_2019.3.334.tgz http://registrationcenter-download.intel.com/akdlm/irc_nas/15944/l_openvino_toolkit_p_2019.3.334.tgz
http://registrationcenter-download.intel.com/akdlm/irc_nas/15944/l_openvino_toolkit_p_2019.3.334.tgz
docker build --target owt-run-all -t gst-owt-all:run \
  --build-arg http_proxy=${HTTP_PROXY} \
  --build-arg https_proxy=${HTTPS_PROXY} \
  .

Setelah menyiapkan server OWT utama dan layanan Analytics, Anda harus mengunduh model-model yang diperlukan dari OpenCV Open Model Zoo dan membangun pipa analitik untuk penggunaannya. Untuk contoh terlampir, semua ini termasuk hanya menjalankan perintah collector di bash dan menyalin beberapa file.

Pemeriksaan Kesehatan pada MacOS


Konfigurasikan port buruh pelabuhan


Opsi buruh pelabuhan --net=hosttidak berfungsi pada macOS, jadi untuk peluncuran lokal Anda perlu membuka port yang sesuai:
PelabuhanLayanan
8080Port sinyal soket web untuk WebRTC
3004Server web untuk mengunduh halaman demo
30000-30050Port UDP untuk WebRTC

Luncurkan buruh pelabuhan


Saya memasang wadah saya seperti ini:

docker run -p 8080:8080 -p 3004:3004  -p 30000-30050:30000-30050/udp --name owtwebrtchacks --privileged -tid gst-owt-all:run bash

Mengedit pengaturan OWT default untuk berjalan secara lokal di MacOS


Di sini Anda harus mengedit file webrtc_agent/agent.tomluntuk mengenali port-port ini.

docker start owtwebrtchacks
docker exec -it owtwebrtchacks bash
vi /home/owt/webrtc_agent/agent.toml

Dan kemudian ganti 0acf7c0560d8dengan nama atau id wadah. Dan ubah yang berikut:


Selanjutnya, Anda perlu memberi tahu sumber daya web sehingga browser menampilkan "localhost" alih-alih jembatan IP internal docker (172.17.0.2):

vi /home/owt/portal/portal.toml


Sekali lagi, pada platform lain, Anda dapat menggunakan konfigurasi default jika Anda menjalankan wadah Anda dengan opsi tersebut --net=host.

Mulai server


Sekarang Anda dapat memulai server:

./home/start.sh

Anda mungkin menerima kesalahan ini:

2020-03-31T01:47:20.814+0000 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:251:13
@(connect):1:21
exception: connect failed

Ini normal saat server terhubung. Anda akan mengerti bahwa semuanya berfungsi jika Anda melihat sesuatu seperti:

starting app, stdout -> /home/owt/logs/app.stdout
0 rooms in this service.
Created room: 5e82a13b402df00313685e3a
sampleRoom Id: 5e82a13b402df00313685e3a

Tes di browser


Buka https: // localhost: 3004 / di browser di mesin lokal. Anda harus mengaktifkan sertifikat, karena peramban akan mengalami masalah dengannya.


Dan selain itu, Anda harus mengaktifkan server websocket di localhost: 8080 . Anda dapat melakukan ini dengan mengklik tautan " Klik ini untuk menguji sertifikat dan menyegarkan ". Atau, Anda juga dapat mengatur #allow-insecure-localhostchrome: // flags untuk menghindari masalah flag di Chrome.


Setelah Anda melakukan ini, kembali ke https: // localhost: 3004 / dan terima resolusi kamera. Segera pilih pengenal saluran video Anda di daftar turun bawah “video dari” dan klik “startAnalytics”.


Terakhir, buka daftar drop-down “subsribe video”, pilih jalur pipa panjang + ID video dan klik berlangganan:


Pada gambar yang diterima dari server, Anda akan melihat bahwa wajah dikenali.


Menambahkan Model OpenCV


Agen Analytics berisi arsitektur plugin OpenCV GStreamer Video Analytics (GVA) . GVA mencakup berbagai modul yang memungkinkan Anda menggunakan berbagai skema prediksi, seperti deteksi, klasifikasi dan identifikasi, serta modul input dan output untuk mengirim video ke pengguna (dalam hal ini, kembali ke OWT), menyediakan overlay gambar atau streaming data melalui mqtt.

Pipelining


Dalam prakteknya, pipa-pipa ini diimplementasikan dengan mengubah beberapa kode C ++. Sebagai contoh, jika kita melihatnya /home/owt/analytics_agent/plugins/samples/cpu_pipeline/mypipeline.cc, kita akan melihat berbagai elemen pipa:

 source = gst_element_factory_make("appsrc", "appsource");
 h264parse = gst_element_factory_make("h264parse","parse");
 decodebin = gst_element_factory_make("avdec_h264","decode");
 postproc = gst_element_factory_make("videoconvert","postproc");
 detect = gst_element_factory_make("gvadetect","detect");
 classify = gst_element_factory_make("gvaclassify","classify");
 watermark = gst_element_factory_make("gvawatermark","rate");
 converter = gst_element_factory_make("videoconvert","convert");
 encoder = gst_element_factory_make("x264enc","encoder");
 outsink = gst_element_factory_make("appsink","appsink");x

Dan jaringan pipa ini berada dalam urutan tertentu:

gst_bin_add_many(GST_BIN (pipeline), source,decodebin,watermark,postproc,h264parse,detect,classify,converter, encoder,outsink, NULL);

Jika Anda ingin mengubah salah satu elemennya, Anda perlu mengkompilasi ulang pipeline menggunakan perintah:

./home/owt/analytics_agent/plugins/samples/build_samples.sh

Kemudian cukup salin pustaka yang dikompilasi di atas yang saat ini digunakan di /home/owt/analytics_agent/lib/.

Mendapatkan model lain


Ada serangkaian besar model yang diselenggarakan di bawah OpenCV Open Model Zoo di GitHub . Selain semua model CV publik yang populer , seperti mobilenet, resnet, squeezenet, vgg dan banyak lainnya, Intel juga mendukung rangkaian yang mencakup berbagai model yang berguna untuk mendeteksi objek, untuk kendaraan tak berawak dan untuk memproses tindakan manusia:
pengakuan tindakanhead-pose-estimasiorang-deteksi-tindakan-pengakuan-gurusegmentasi semantik
pengakuan usia-genderestimasi pose manusiadeteksi orangresolusi gambar tunggal
asl-recognitionpengambilan gambarorang-deteksi-mengangkat tangan-pengakuandeteksi teks
driver-action-recognitioninstance-segmentation-securitydeteksi orangteks-gambar-super-resolusi
pengakuan emositengara-regresiidentifikasi ulang orangpengenalan teks
deteksi wajahplat-pengakuan-penghalangorang-kendaraan-sepeda-deteksi-perempatanbercak teks
identifikasi ulang wajahdetektor pejalan kaki dan kendaraandeteksi produkatribut kendaraan penghalang
facial-landmark-35deteksi pejalan kakiresnet18-xnor-binary-onnxdeteksi kendaraan
estimasi tatapanorang-atribut-pengakuan-perempatanresnet50-binarybiner deteksi kendaraan
tulisan tangan-skor-pengakuanorang-deteksi-aksi-pengakuansegmentasi jalanplat-deteksi-penghalang kendaraan

Intel memiliki informasi lebih lanjut tentang ini di sini .

Menambahkan Model ke OWT Analytics Agent


Untuk menambahkan model, Anda harus mengkloning repositori, dan kemudian mendapatkan yang sesuai menggunakan alat Open Model Zoo Downloader . Setelah ini, Anda perlu memastikan bahwa pipa Anda mengandung elemen yang sesuai (klasifikasi, deteksi, identifikasi) dan mengkonfigurasi file /home/owt/analytics_agent/plugin.cfgmenggunakan parameter yang sesuai.

Pengujian plugin


Saya mencoba beberapa model pengenalan wajah dan emosi.

Poin referensi wajah


Karena saya sudah bermain dengan deteksi sentuhan pada wajah , saya memutuskan untuk memeriksa model facial-landmark-35-adas-0002 . Model ini mendeteksi 35 titik referensi wajah.


Dalam aplikasi pemantauan sentuh wajah saya, saya bisa menambahkan streaming MQTT ke pipa menggunakan penerbit metadata generik gstreamer untuk menangkap dan memproses titik jangkar. Sebagai contoh, saya dapat melihat apakah titik-titik di sekitar mata, hidung dan mulut menjadi gelap, atau bahkan menggabungkan semua ini dengan model untuk mengevaluasi postur seseorang .

Pengakuan Emosi


Ini adalah hal keren lainnya. Model emotion-recognition-retail-0003 menggunakan jaringan konvolusional untuk mengenali ekspresi netral, bahagia, sedih, terkejut, dan geram.


Tampaknya ekspresi wajah saya tidak dianggap netral, tetapi menyedihkan - mungkin tinggal lama di isolasi mulai membuat saya :(

Optimasi Akselerasi


Untuk memanfaatkan kapabilitas akselerasi perangkat keras OWT, pastikan untuk menginstal perangkat yang sesuai /home/owt/analytics_agent/plugin.cfg- yaitu, tulis:

device = "MULTI:HDDL,GPU,CPU"

Sayangnya, saya tidak punya cukup waktu untuk menguji ini, tetapi selain akselerasi CPU dan GPU, Anda juga dapat memanfaatkan berbagai perangkat keras prosesor penglihatan mesin (VPU). Ini adalah chip khusus untuk operasi jaringan saraf yang efisien. Saya membeli Intel Neural Computing Card (NCS) beberapa tahun yang lalu untuk meluncurkan model CV yang lebih canggih di Raspberry Pi 3.

Tentu saja, Anda selalu dapat menemukan kompromi antara kekuatan pemrosesan dan kecepatan / resolusi bingkai.

Rekomendasi


OpenCV memiliki sejarah panjang dengan komunitas besar pengembang, menempati peringkat ke-4 di antara semua proyek open source Machine Learning pada saat analisis popularitas saya pada pertengahan 2018 . Demikian pula, gstreamer adalah proyek lain yang telah ada sejak lama. Agen Intel OWT Analytics ditempatkan secara ideal untuk membantu komunitas ini menambahkan analisis streaming real-time ke proyek mereka melalui WebRTC. Mereka harus dapat mengambil model GST yang ada dan menjalankannya dalam streaming waktu nyata menggunakan OWT.

Jika Anda baru mulai bereksperimen dengan visi komputer dan ingin menjalankan model pada server OWT, saya sarankan memulai dengan tutorial OpenCV yang lebih mendasar. Kemudian Anda bisa masuk ke plugin GVA.. Mereka akan membutuhkan banyak upaya jika Anda baru mulai bekerja dengan OpenCV, tetapi nantinya Anda tidak akan kesulitan mengubah Agen Analytics untuk meluncurkannya. Anda dapat mengoptimalkan tumpukan agar bekerja dengan platform target Anda dan menggunakan berbagai opsi akselerasi perangkat keras Intel untuk meningkatkan kinerja.

All Articles