Cara Membuat Kesan Webcam Menakjubkan Menggunakan Java dan Pemprosesan

Cara Membuat Kesan Webcam Menakjubkan Menggunakan Java dan Pemprosesan

Pemprosesan adalah alat yang kuat yang memungkinkan penciptaan seni melalui kod. Ini adalah gabungan perpustakaan Java untuk bekerja dengan grafik, dan persekitaran pengembangan bersepadu (IDE) yang membolehkan anda menulis dan menjalankan kod dengan mudah.





Terdapat banyak projek pemula grafik dan animasi yang menggunakan Pemprosesan, tetapi juga mampu memanipulasi video langsung.





Hari ini anda akan membuat tayangan video langsung dari pelbagai kesan yang dikendalikan oleh tetikus, menggunakan pustaka video Pemprosesan. Serta membalik video langsung, anda akan belajar mengubah ukuran dan mewarnainya, dan cara membuatnya mengikut kursor tetikus.





Penyediaan Projek

Untuk memulakan, muat turun Memproses dan buka lakaran kosong. Tutorial ini didasarkan pada sistem Windows, tetapi harus berfungsi pada komputer mana pun dengan kamera web.

Anda mungkin perlu memasang pustaka Video Pemprosesan, yang dapat diakses di bawah Sketsa> Import Perpustakaan> Tambah Pustaka . Carian untuk Video di kotak carian, dan pasang perpustakaan dari Yayasan Pemprosesan .



Setelah dipasang, anda sudah bersedia untuk pergi. Sekiranya anda mahu melangkau pengekodan, anda boleh memuat turun lakaran yang lengkap . Lebih baik membuatnya sendiri dari awal, namun!

Menggunakan Kamera Web Dengan Pemprosesan

Mari kita mulakan dengan mengimport perpustakaan, dan membuat a persediaan fungsi. Masukkan yang berikut ke dalam lakaran Pemprosesan kosong:





import processing.video.*;
Capture cam;
void setup(){
size(640,480);
cam = new Capture(this, 640, 480);
cam.start();
}

Setelah mengimport pustaka video, anda membuat a Menangkap contoh disebut Jingga untuk menyimpan data dari kamera web. Dalam persediaan , ukuran fungsi menyusun a 640x480 tetingkap bersaiz piksel untuk berfungsi.

Baris seterusnya memberikan Jingga ke contoh baru dari Menangkap , untuk ini lakaran, yang berukuran sama dengan tingkap, sebelum memberitahu kamera untuk dihidupkan cam. mulakan () .





Jangan bimbang jika anda tidak memahami setiap bahagian ini buat masa ini. Singkatnya, kami telah memberitahu Processing untuk membuat tetingkap, mencari kamera kami, dan menyalakannya! Untuk memaparkannya, kita memerlukan menarik fungsi. Masukkan ini di bawah kod di atas, di luar kurungan keriting.

void draw(){
if (cam.available()){
cam.read();
}
image(cam,0,0);
}

The menarik fungsi dipanggil setiap bingkai. Ini bermaksud bahawa berkali-kali setiap saat, sekiranya kamera mempunyai data ada awak membaca data daripadanya.

Data ini kemudian dipaparkan sebagai imej , pada kedudukan 0, 0 , yang merupakan kiri atas tetingkap.

Simpan lakaran anda, dan tekan butang main di bahagian atas skrin.

Berjaya! Data yang disimpan oleh Jingga dicetak dengan betul ke skrin setiap bingkai. Sekiranya anda menghadapi masalah, periksa kod anda dengan teliti. Java memerlukan setiap kurungan dan titik koma di tempat yang betul! Pemprosesan juga memerlukan beberapa saat untuk mengakses kamera web, jadi jika anda merasa tidak berfungsi tunggu beberapa saat setelah melancarkan skrip.

Membalikkan Gambar

Sekarang setelah anda mendapat gambar kamera web langsung, mari memanipulasikannya. Dalam fungsi cabutan, ganti gambar (cam, 0,0); dengan dua baris kod ini.

scale(-1,1);
image(cam,-width,0);

Simpan dan jalankan semula lakaran. Bolehkah anda melihat perbezaannya? Dengan menggunakan negatif skala nilai, semua x nilai (piksel mendatar) kini diterbalikkan. Oleh kerana itu, kita perlu menggunakan nilai negatif tetingkap lebar untuk meletakkan gambar dengan betul.

Membalikkan gambar terbalik hanya memerlukan beberapa perubahan kecil.

scale(-1,-1);
image(cam,-width,-height);

Kali ini, kedua-duanya x dan dan nilai dibalik, menjadikan gambar kamera langsung terbalik. Sejauh ini anda telah mengekodkan gambar biasa, gambar terbalik secara mendatar, dan gambar terbalik secara menegak. Mari kita atur cara untuk berpusing di antara mereka.

Menjadikannya Berkitar

Daripada menulis semula kod anda setiap kali, kami boleh menggunakan nombor untuk membalikkannya. Buat yang baru bilangan bulat di bahagian atas kod anda yang dipanggil penukar .

import processing.video.*;
int switcher = 0;
Capture cam;

Kita boleh menggunakan nilai pengalih untuk menentukan apa yang berlaku pada gambar kamera. Apabila lakaran dimulakan, anda memberikannya nilai 0 . Sekarang kita dapat menggunakan logik untuk mengubah apa yang berlaku pada gambar. Kemas kini menarik kaedah untuk kelihatan seperti ini:

void draw(){
if (cam.available()){
cam.read();
}
if(switcher==0){
image(cam,0,0);
}
else if(switcher == 1){
scale(-1,1);
image(cam,-width,0);
}
else if(switcher == 2){
scale(-1,-1);
image(cam,-width,-height);
}
else{
println('Switcher = 0 again');
switcher = 0;
}
}

Sekarang, ketiga-tiga variasi kod akan dicetuskan bergantung pada nilai pengalih. Sekiranya tidak sesuai dengan salah satu dari kami sekiranya atau jika tidak pernyataan, yang yang lain klausa diset semula ke 0. Logik adalah kemahiran pemula yang penting untuk dipelajari, dan anda boleh mengetahui tentangnya dan banyak lagi dengan Tutorial Pengaturcaraan YouTube yang sangat baik!

Menggunakan Tetikus

Pemprosesan mempunyai kaedah bawaan untuk mengakses tetikus. Untuk mengesan bila pengguna mengklik tetikus, tambahkan tetikus ditekan berfungsi di bahagian bawah skrip anda.

cara terpantas untuk memindahkan fail antara komputer
void mousePressed(){
switcher++;
}

Pemprosesan mendengar sebarang klik tetikus dan mengganggu program untuk menjalankan kaedah ini apabila ia mengesannya. Setiap kali kaedah dipanggil, nilai pengalih bertambah satu per satu. Simpan dan jalankan skrip anda.

Sekarang, apabila anda menekan butang tetikus, ia memutar arah video yang berbeza, sebelum kembali ke asalnya. Sejauh ini anda hanya membalik video, sekarang mari kita buat sesuatu yang lebih menarik.

Menambah Lebih Banyak Kesan

Sekarang, anda akan membuat kod kesan gambar langsung empat warna yang serupa dengan karya seni Andy Warhol yang terkenal. Menambah lebih banyak kesan semudah menambahkan klausa lain pada logik. Tambahkan ini ke skrip anda antara yang terakhir lain jika penyataan, dan yang lain .

else if(switcher == 3){
tint(256, 0, 0);
image(cam, 0, 0, width/2, height/2);
tint(0, 256, 0);
image(cam, width/2, 0, width/2, height/2);
tint(0, 0, 256);
image(cam, 0, height/2, width/2, height/2);
tint(256, 0, 256);
image(cam, width/2, height/2, width/2, height/2);
}

Kod ini menggunakan imej berfungsi untuk membuat empat gambar kamera yang berasingan di setiap sudut skrin dan menjadikan semuanya berukuran separuh.

The warna fungsi menambah warna pada setiap gambar kamera. Nombor tanda kurung adalah merah, hijau, dan biru (RGB) nilai. Warnakan warna semua kod berikut dengan warna yang dipilih.

Simpan dan mainkan untuk melihat hasilnya. Cuba ubah nombor RGB di setiap nombor warna berfungsi menukar warna!

Membuatnya Ikut Tetikus

Akhirnya, mari kita membuat gambar langsung mengikuti kedudukan tetikus menggunakan fungsi yang berguna dari perpustakaan Pemprosesan. Tambahkan ini di atas yang lain sebahagian daripada logik anda.

else if(switcher==4 ){
image(cam, mouseX, mouseY, width/2, height/2);
}

Di sini, anda meletakkan gambar dari kamera anda di tetikusX dan tetikus . Ini dibina dalam nilai Pemprosesan yang mengembalikan piksel yang ditunjuk oleh tetikus.

Itu sahaja! Lima variasi video langsung melalui kod. Walau bagaimanapun, semasa anda menjalankan kod, anda akan melihat beberapa masalah.

Menyelesaikan Kod

Kod yang anda buat setakat ini berfungsi, tetapi anda akan melihat dua masalah. Pertama, apabila variasi empat warna ditunjukkan, semuanya selepas itu berwarna ungu. Kedua, apabila anda menggerakkan video dengan tetikus, ia meninggalkan jejak. Anda boleh memperbaikinya dengan menambahkan beberapa baris ke bahagian atas fungsi undian.

void draw(){
tint(256,256,256);
background(0);
//draw function continues normally here!

Pada permulaan setiap bingkai, kod ini menetapkan semula warna warna menjadi putih, dan menambahkan warna latar belakang hitam untuk menghentikan jejak video. Sekarang semasa anda menguji program, semuanya berfungsi dengan sempurna!

Kesan Webcame: Seni Dari Kod

Pemprosesan sangat kuat, dan anda boleh menggunakannya untuk melakukan banyak perkara. Ini adalah platform yang sangat baik untuk membuat seni dengan kod, tetapi ia juga sesuai untuk mengendalikan robot!

Sekiranya Java bukan perkara anda, ada perpustakaan JavaScript berdasarkan Pemprosesan yang disebut p5.js. Ini berasaskan penyemak imbas, dan bahkan pemula dapat menggunakannya untuk membuat animasi reaktif yang hebat!

Kredit Gambar: Syda_Productions / Depositphotos

Berkongsi Berkongsi Tweet E-mel 3 Cara Memeriksa sama ada E-mel Nyata atau Palsu

Sekiranya anda menerima e-mel yang kelihatan agak meragukan, sebaiknya periksa kesahihannya. Berikut adalah tiga cara untuk mengetahui sama ada e-mel itu nyata.

Baca Seterusnya
Topik-topik yang berkaitan
  • Pengaturcaraan
  • Jawa
  • Kamera Web
  • Memproses
  • Tutorial Pengekodan
Mengenai Pengarang Ian Buckley(216 Artikel Diterbitkan)

Ian Buckley adalah wartawan bebas, pemuzik, pemain dan penerbit video yang tinggal di Berlin, Jerman. Ketika dia tidak menulis atau di atas pentas, dia bermain-main dengan elektronik DIY atau kod dengan harapan menjadi saintis gila.

Lagi Dari Ian Buckley

Langgan buletin kami

Sertailah buletin kami untuk mendapatkan petua, ulasan, ebook percuma, dan tawaran eksklusif!

Klik di sini untuk melanggan