Isi kandungan:
- Langkah 1: Bahan
- Langkah 2: OUTPUT - Pengawal VGA Bahagian 1
- Langkah 3: OUTPUT - Pengawal VGA Bahagian 2
- Langkah 4: OUTPUT - Pengawal HDMI Bahagian 1
- Langkah 5: OUTPUT - Pengawal HDMI Bahagian 2
- Langkah 6: Memaparkan Imej Dari RAM
- Langkah 7: OUTPUT - SDK TAMAT
Video: Sistem Peningkatan Imej Zynq: 7 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:11
Seperti yang mungkin anda ketahui dari tajuknya, tujuan projek ini adalah membuat Sistem Peningkatan Imej menggunakan ZYNQ ApSOC. Lebih khusus lagi, kami ingin membina sistem yang dapat menghilangkan kabut dari gambar atau video. Sistem ini akan menggunakan data visual dalam keadaan buruk sebagai input, memprosesnya menggunakan teknik peningkatan gambar dan kemudian mengeluarkan hasilnya.
Projek ini dibina dan diuji di Digilent Zybo Board tetapi peranti ZYNQ lain juga harus berfungsi.
Kami akan membahagikan projek ini dalam 3 bahagian:
1) INPUT = Gambar Input melalui Ethernet dari Komputer / Kamera
2) PROSES = Memproses Gambar
3) OUTPUT = Keluarkan Gambar melalui antara muka HDMI
Dengan cara yang sangat berlawanan, kita akan memulakan dengan bahagian output projek (ini akan memberi kita kemungkinan penyahpepijatan yang lebih baik) teruskan dengan input dan selesaikan dengan bahagian pemprosesan.
Langkah 1: Bahan
Untuk menyelesaikan projek ini, anda memerlukan:
PERKAKASAN
- mana-mana Papan ZYNQ dengan HDMI dan Ethernet harus berfungsi / Saya menggunakan Digilent Zybo
- Kabel USB A ke mikro B
- Kabel HDMI
- Kabel Ethernet
- Paparan dengan input HDMI
PERISIAN
- Xilinx Vivado
- Xilinx SDK
Langkah 2: OUTPUT - Pengawal VGA Bahagian 1
Kami akan mengeluarkan data visual kami menggunakan port HDMI yang terdapat di papan tulis. Port HDMI disambungkan ke sebelah sisi PL (Logic yang Dapat Diprogramkan = FPGA) ZYNQ dan kami perlu merancang pengawal di VHDL untuknya. Sekiranya anda pernah merancang pengawal VGA, anda akan mendapati ini sangat serupa. Masa untuk HDMI dan VGA sebenarnya sama, sebenarnya anda boleh menggunakan pengawal VGA yang ada untuk mendapatkan pengawal HDMI.
Untuk pemahaman yang lebih baik mengenai apa yang sebenarnya berlaku, pertama-tama kita akan merancang pengawal VGA
Kami mahu memaparkan pada resolusi 1920x1080.
Pengawal VGA bertanggungjawab untuk mengirimkan data piksel (dalam format RGB) secara berurutan, piksel demi piksel ke paparan. Di luar kawasan paparan sebenar 1920x1080 terdapat juga beberapa kawasan "sempadan", iaitu: beranda depan, beranda belakang dan mengundur. Ukuran dalam piksel kawasan ini adalah standard dan khusus untuk setiap resolusi. Kawasan ini TIDAK benar-benar muncul di skrin tetapi wajib dan warna piksel di kawasan ini mestilah hitam. Soalan yang sah ialah mengapa kawasan tambahan ini diperlukan. Soalan ini bertentangan dengan tujuan ini, tetapi jika anda ingin tahu, saya akan mendorong anda untuk membuat kajian lebih lanjut dalam talian.
Ini adalah video yang baik yang menerangkan antara muka VGA
Sekiranya kami mahu paparan pada resolusi 1920 * 1080, dan ini adalah masanya:
Kawasan Paparan Mendatar = 1920 piksel
Serambi Fron Mendatar = 88 piksel
Serambi Belakang Mendatar = 148 piksel
Latar Belakang Mendatar = 44 piksel
Kawasan Paparan Vertikal = 1080 piksel
Serambi Depan Vertikal = 4 piksel
Serambi Belakang Vertikal = 36 piksel
Retrace Vertikal = 5 piksel
(Di sini anda dapat mencari masa untuk penyelesaian lain
Jadi resolusi sebenar kami adalah 2200 x 1125. Kami mahukan 60 fps (bingkai sesaat) jadi jam piksel kami akan menjadi 60 * 2200 * 1125 = 148.5 MHz. Di Papan Zybo disediakan jam 125 Mhz. Kami akan menggunakan IP MMCM untuk menghasilkan Jam Pixel 148.5 MHz yang kami perlukan.
Langkah 3: OUTPUT - Pengawal VGA Bahagian 2
Dengan latar belakang teori dari langkah sebelumnya, anda seharusnya dapat merancang pengawal VGA anda sendiri. Saya akan memberikan anda projek Vivado yang melakukannya tetapi saya menasihati anda sekurang-kurangnya mencuba membuatnya sendiri terlebih dahulu.
Sebilangan besar port VGA tidak memberi anda 8 bit per saluran warna per piksel (lihat gambar di atas) jadi anda perlu menyesuaikan reka bentuk dengan jumlah pin per warna yang disediakan oleh Papan (ini bukan masalah untuk HDMI).
Reka bentuk akan melukis seluruh skrin biru, kecuali piksel kiri atas yang akan berwarna merah. Perlu diingatkan bahawa projek ini menggunakan kekangan untuk ZYBO Board. Oleh itu, jika anda ingin menjalankan projek ini di Papan yang lain, anda harus mengemas kini fail kekangan dan menyesuaikan bilangan pin setiap warna.
Lihat gambar nr. 2. Ingat bahawa sementara Pengawal VGA kami mengeluarkan 5/6 bit per warna, bit tersebut akan ditukar menjadi satu isyarat analog untuk setiap saluran warna (Merah, Hijau dan Biru) sebelum melalui kabel.
Langkah 4: OUTPUT - Pengawal HDMI Bahagian 1
Setelah kita mengetahui bagaimana pengawal VGA berfungsi dan kita mempunyai reka bentuk yang berfungsi, kita dapat meneruskan pengawal HDMI. Pengawal HDMI sebenarnya akan menggunakan semua kod yang kami kembangkan dalam pengawal VGA. HDMI dan VGA menggunakan pemasa yang sama dan isyarat yang sama. Perbezaannya muncul pada pin ouput.
Walaupun VGA menggunakan satu wayar untuk setiap warna dan mengirimkan isyarat analog di seberang, HDMI menghantar data secara digital 1 bit pada satu masa untuk setiap warna dan menggunakan isyarat pembezaan. Isyarat pembezaan bermaksud bahawa untuk setiap bit HDMI mempunyai 2 pin dengan satu yang berlawanan dengan yang lain. Oleh itu, jika kita ingin menghantar isyarat '1', kita akan menghantar '1' pada wayar dan '1' ditolak pada wayar yang lain. Ini memastikan integriti isyarat dan anda boleh membaca lebih lanjut mengenainya di sini https://goo.gl/6CPCzB. Kami mempunyai salah satu saluran ini untuk setiap warna, MERAH, HIJAU dan BIRU dan satu untuk jam. Oleh kerana spesifik pembezaan isyarat, isyarat yang kita hantar melalui HDMI mestilah seimbang DC yang bermaksud bahawa bilangan 1 dan 0 mesti kira-kira sama dalam jangka masa tertentu. Untuk mencapai ini, kami akan menggunakan pengekodan 8b / 10b. Anda boleh belajar banyak mengenai bagaimana isyarat berbeza dan pengekodan 8b / 10b berfungsi dari spesifikasi DVI di sini https://goo.gl/hhh8Ge (DVI dan HDMI menggunakan isyarat video yang sama).
Langkah 5: OUTPUT - Pengawal HDMI Bahagian 2
Cukup teori, mari masuk ke projek kami. Semasa di Pengawal VGA, kita berjaya mendapatkan jam 148.5 MHz, di sini kita harus memberikan frekuensi 10 kali ganda kerana kita ingin menghantar 8 bit untuk setiap warna dan menggunakan pengekodan 8b / 10b yang diterjemahkan menjadi 10 bit per piksel dan 10 * 148.5MHz = 1485MHz. Itu adalah frekuensi yang besar yang tidak dapat diperoleh di Papan Zybo. Nasib baik kami mendapat beberapa helah. Kita dapat mengurus 5 * 148.5MHz = 742.5MHz dan kita akan menggunakan IP OSERDES (serializer) untuk menghantar data pada sisi naik dan turun jam 742.5Mhz, jadi kita akan benar-benar mendapatkan data yang dihantar pada 1485MHz. Vivado akan memberi kami beberapa amaran masa dan anda selalu boleh mendapatkan resolusi yang lebih rendah dengan jam yang lebih kecil, tetapi kerana ia berfungsi, kami tidak keberatan buat masa ini (amaran berkaitan dengan fakta bahawa penyangga jam tidak secara rasmi frekuensi sokongan lebih tinggi daripada 464MHz).
Jadi apa yang perlu kita lakukan adalah menyandikan data dari output Pengawal VGA kami dalam format 8b / 10b dan kemudian menyusunnya seperti yang disebutkan di atas. Kita juga perlu menambahkan MMCM lain ke projek untuk menghasilkan jam 742.5MHz untuk bersiri.
Saya melampirkan di bawah fail vhdl untuk encoder dan serializer. Anda mesti mengekod saluran RGB terlebih dahulu dan kemudian menyusunnya.
Contoh untuk saluran merah:
TMDS_encoder_RED: TMDS_encoder
peta port (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);
Serialiser_RED: Serialiser10_1
peta port (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);
Input "c" ke TMDS_encoder adalah "00" untuk merah dan hijau dan "vsync & hsync" untuk biru (ini adalah sebahagian daripada spesifikasi DVI
Langkah 6: Memaparkan Imej Dari RAM
Tujuan pengawal HDMI adalah untuk memaparkan gambar yang diproses. Sekarang, dengan pengawal yang dilaksanakan dan siap digunakan, kita harus memikirkan untuk memberi makan pengawal ini dengan data. Memandangkan banyak proses peningkatan gambar akan berlaku di PS (Processing System = ARM Processor) dan gambar yang dihasilkan akan berada di DDR RAM. Oleh itu, kita memerlukan kaedah untuk mendapatkan data dari RAM ke pengawal HDMI.
Untuk mencapai ini, anda memerlukan 3 IP:
1) VDMA (Akses Memori Langsung Video)
2) VTC (Pengawal masa video)
3) Streaming ke Video Out (kami akan memanggilnya S2VO mulai sekarang)
S2VO sebenarnya akan memberikan isyarat RGB 24BIT ke output dan isyarat HSYNC dan VSYNC yang diperlukan. Oleh itu, kita boleh membiarkan bahagian pengawal HDMI itu keluar.
Anda harus menambahkan IP ini ke reka bentuk anda, mengkonfigurasinya dan membuat sambungan yang betul.
Akhirnya anda harus mendapatkan sesuatu yang menyerupai skema di atas.
Langkah 7: OUTPUT - SDK TAMAT
Dengan semua perkakasan yang telah siap dan siap untuk digunakan, kita sekarang mesti membina perisian di PS. Kami akan mengeksport perkakasan dan aliran bit dan melancarkan SDK.
1) Fail -> Eksport -> Eksport Perkakasan -> Periksa Sertakan Bitstream dan Tekan OK
2) Fail -> Lancarkan SDK
Di SDK buat projek aplikasi baru.
3) Fail -> Baru -> Projek Aplikasi
4) Pilih nama untuk projek anda dan tekan Next
5) Pilih templat "Hello World" dan tekan Selesai
Aplikasi dalam SDK perlu memprogram VDMA. Terdapat beberapa fungsi standard yang digunakan untuk menyelesaikannya (saya akan melihat secara terperinci apabila saya mempunyai masa).
Untuk menguji reka bentuk kami, kami akan menggunakan ciri Pemulihan SDK (Alat Xilinx -> Dump / Restore) untuk memasukkan gambar ke dalam memori DDR RAM dan memaparkannya menggunakan Pengawal HDMI kami. Anda boleh memuatkan gambar di mana sahaja yang anda mahukan (kecuali beberapa kawasan kecil yang terhad di awal memori). Sebagai contoh kami memilih alamat 16777216 dan ukuran fail 8294400 = 1920 * 1080 * 4 (4 saluran = RGB + alpha).
Ianya berfungsi !
Akan bersambung
Disyorkan:
Cara: Memasang Raspberry PI 4 Tanpa Kepala (VNC) Dengan Imej dan Gambar Rpi: 7 Langkah (dengan Gambar)
Howto: Memasang Raspberry PI 4 Headless (VNC) Dengan Imej dan Gambar Rpi: Saya merancang untuk menggunakan Rapsberry PI ini dalam sekumpulan projek yang menyeronokkan di blog saya. Jangan ragu untuk melihatnya. Saya ingin kembali menggunakan Raspberry PI saya tetapi saya tidak mempunyai Papan Kekunci atau Tetikus di lokasi baru saya. Sudah lama saya menyediakan Raspberry
Kecerdasan Buatan dan Pengecaman Imej Menggunakan HuskyLens: 6 Langkah (dengan Gambar)
Kecerdasan Buatan dan Pengecaman Imej Menggunakan HuskyLens: Hei, ada apa, Guys! Akarsh di sini dari CETech. Dalam projek ini, kita akan melihat HuskyLens dari DFRobot. Ia adalah modul kamera berkuasa AI yang mampu melakukan beberapa operasi Kecerdasan Buatan seperti Face Recognitio
Pengecaman Imej Dengan Papan K210 dan Arduino IDE / Micropython: 6 Langkah (dengan Gambar)
Pengecaman Imej Dengan Papan K210 dan Arduino IDE / Micropython: Saya sudah menulis satu artikel mengenai cara menjalankan demo OpenMV di Sipeed Maix Bit dan juga membuat video demo pengesanan objek dengan papan ini. Salah satu daripada banyak pertanyaan yang diajukan oleh orang adalah - bagaimana saya dapat mengenali objek yang rangkaian sarafnya tidak
Sistem Pengecam dan Pemadam Kebakaran Berdasarkan Pemprosesan Imej: 3 Langkah
Sistem Pengecaman dan Pemadam Kebakaran Berdasarkan Pemprosesan Imej: Halo kawan-kawan ini adalah sistem pengesanan dan pemadam api berasaskan pemprosesan imej menggunakan Arduino
Pemprosesan Imej Dengan Raspberry Pi: Memasang OpenCV & Pemisahan Warna Imej: 4 Langkah
Pemprosesan Imej Dengan Raspberry Pi: Memasang OpenCV & Pemisahan Warna Imej: Catatan ini adalah yang pertama dari beberapa tutorial pemprosesan gambar yang akan diikuti. Kami melihat lebih dekat piksel yang membentuk gambar, belajar bagaimana memasang OpenCV pada Raspberry Pi dan kami juga menulis skrip ujian untuk menangkap gambar dan juga