(atau Proyek yang Sebelumnya Dikenal Sebagai DeepBackSub)
(Kredit untuk latar belakang yang bagus untuk Mary Sabell dan PhotoFunia)
backscrub dilisensikan di bawah Lisensi Apache 2.0. Lihat file LISENSI untuk detailnya.
Instal dependensi ( sudo apt install libopencv-dev build-essential v4l2loopback-dkms curl
).
Kloning repositori ini dengan git clone --recursive https://github.com/floe/backscrub.git
. Untuk mempercepat proses checkout, Anda juga dapat meneruskan --depth=1
ke git clone
. Tidak apa-apa, jika Anda hanya ingin mendownload dan membuat kodenya saja, namun untuk pengembangan tidak disarankan.
Gunakan cmake
untuk membangun proyek: buat subfolder (misalnya build
), ubah ke folder itu dan jalankan: cmake .. && make -j $(nproc || echo 4)
.
Tidak digunakan lagi : Pilihan lain untuk membangun semuanya adalah dengan menjalankan make
di direktori root repositori. Meskipun ini akan mengunduh dan membangun semua dependensi, ini memiliki beberapa kelemahan seperti tidak adanya dukungan untuk XNNPACK. Hal ini juga mungkin rusak pada versi Tensorflow Lite yang lebih baru karena dukungan upstream untuk opsi ini telah dihapus. Gunakan risiko Anda sendiri.
Pertama, muat modul v4l2loopback (pengaturan tambahan diperlukan agar Chrome berfungsi):
sudo modprobe v4l2loopback devices=1 max_buffers=2 exclusive_caps=1 card_label="VirtualCam" video_nr=10
Kemudian, jalankan backscrub (-d -d untuk debug penuh, -c untuk perangkat pengambilan, -v untuk perangkat virtual, -b untuk wallpaper):
./backscrub -d -d -c /dev/video0 -v /dev/video10 -b ~/wallpapers/forest.jpg
Beberapa kamera (seperti Logitec Brio
) perlu mengalihkan sumber video ke MJPG
dengan meneruskan -f MJPG
agar resolusi yang lebih tinggi tersedia untuk digunakan.
Untuk penggunaan reguler, siapkan file konfigurasi /etc/modprobe.d/v4l2loopback.conf
:
# V4L loopback driver
options v4l2loopback max_buffers=2
options v4l2loopback exclusive_caps=1
options v4l2loopback video_nr=10
options v4l2loopback card_label="VirtualCam"
Untuk memuat driver secara otomatis saat startup, buat /etc/modules-load.d/v4l2loopback.conf
dengan konten berikut:
v4l2loopback
Diuji dengan dependensi berikut:
Diuji dengan perangkat lunak berikut:
-c read
)-c read
)Di zaman modern ini di mana semua orang duduk di rumah dan melakukan skype-ing/zoom-ing/webrtc-ing sepanjang waktu, saya agak kesal karena selalu menunjukkan kantor rumah saya yang berantakan kepada dunia. Skype memiliki fitur "latar belakang buram", tetapi fitur itu mulai membosankan setelah beberapa saat (dan ini kurang privat dibandingkan yang saya pribadi inginkan). Zoom memiliki beberapa substitusi latar belakang bawaan, tapi saya tidak menyentuh perangkat lunak itu dengan tongkang (dan fitur itu tidak tersedia di Linux). Jadi saya memutuskan untuk mencari cara untuk menjalankan implementasi saya sendiri tanpa bergantung pada perangkat lunak konferensi video tertentu untuk mendukung hal ini.
Keseluruhan shebang ini melibatkan tiga langkah utama dengan tingkat kesulitan yang berbeda-beda:
Saya telah banyak bekerja dengan kamera kedalaman sebelumnya, juga untuk segmentasi latar belakang (lihat SurfaceStreams), jadi saya hanya mengambil sisa kamera RealSense dari lab dan mencobanya. Namun, data kedalaman di lingkungan kantor yang berantakan cukup berisik, dan tidak peduli bagaimana saya mengubah pengaturan kamera, data kedalaman apa pun tidak dapat dihasilkan untuk rambut saya...? Saya terlihat seperti biksu abad pertengahan yang bagian atas kepalanya dipotong, jadi... selanjutnya.
Lihat https://docs.opencv.org/3.4/d1/dc5/tutorial_background_subtraction.html untuk tutorialnya. Seharusnya berfungsi dengan baik untuk sebagian besar latar belakang statis dan objek bergerak kecil, tetapi tidak berfungsi untuk sebagian besar orang statis di depan latar belakang statis. Berikutnya.
Lihat https://docs.opencv.org/3.4/db/d28/tutorial_cascade_classifier.html untuk tutorial. Berfungsi baik-baik saja, tetapi jelas hanya mendeteksi wajah, dan bukan orang lain. Selain itu, hanya secara kasar cocok dengan elips yang pada akhirnya terlihat aneh. Berikutnya.
Saya telah mendengar hal-hal baik tentang pembelajaran mendalam ini, jadi mari kita mencobanya. Pertama-tama saya harus mencari jalan melalui tumpukan kerangka kerja (Keras, Tensorflow, PyTorch, dll.), tetapi setelah saya menemukan model siap pakai untuk segmentasi semantik berdasarkan Tensorflow Lite (DeepLab v3+), saya memutuskannya.
Saya telah melihat contoh Python yang sesuai, contoh C++, dan contoh Android, dan berdasarkan itu, pertama-tama saya membuat demo Python. Itu berjalan pada sekitar 2,5 FPS, yang sangat lambat, jadi saya membuat versi C++ yang mengelola 10 FPS tanpa terlalu banyak optimasi tangan. Cukup bagus.
Saya juga telah menguji versi model Body-Pix yang dikonversi TFLite, tetapi hasilnya tidak jauh berbeda dengan DeepLab untuk kasus penggunaan ini.
Baru-baru ini, Google telah merilis model yang dilatih khusus untuk segmentasi orang yang digunakan di Google Meet. Ini memiliki kinerja yang jauh lebih baik daripada DeepLab, baik dalam hal kecepatan dan akurasi, jadi ini sekarang menjadi default. Dibutuhkan satu operasi khusus dari kerangka MediaPipe, tapi itu cukup mudah untuk diintegrasikan. Terima kasih kepada @jiangjianping karena telah menunjukkan hal ini dalam terbitan terkait.
Ini pada dasarnya adalah satu baris kode dengan OpenCV: bg.copyTo(raw,mask);
Sudah kubilang itu bagian yang mudah.
Saya menggunakan v4l2loopback untuk menyalurkan data dari alat userspace saya ke perangkat lunak apa pun yang dapat membuka perangkat V4L2. Ini tidak terlalu sulit karena contohnya yang bagus, tetapi ada beberapa kendala, terutama ruang warna. Butuh beberapa kali percobaan dan kesalahan untuk menemukan format piksel umum yang diterima oleh Firefox, Skype, dan guvcview, dan itu adalah YUYV. Cukup bagus, webcam saya dapat menampilkan YUYV secara langsung sebagai data mentah, sehingga menghemat beberapa konversi ruang warna.
Aliran data melalui keseluruhan program kira-kira sebagai berikut:
write()
data ke perangkat video virtual(*) ini adalah parameter masukan yang diperlukan untuk model ini
Seperti biasa: permintaan tarik diterima.
Lihat Masalah dan Permintaan Tarik untuk ekstensi yang sedang dibahas/sedang berlangsung, dan lihat juga cabang experimental
.
Format pilihan Firefox: https://searchfox.org/mozilla-central/source/third_party/libwebrtc/webrtc/modules/video_capture/linux/video_capture_linux.cc#142-159
Kami telah diberitahu bahwa beberapa versi obs-studio
paket snap tidak dapat mendeteksi/menggunakan kamera virtual seperti yang disediakan oleh backscrub
. Silakan periksa detailnya untuk mengetahui solusinya jika ini berlaku untuk Anda.