Isi kandungan:

Pengiktirafan Bintang Menggunakan Penglihatan Komputer (OpenCV): 11 Langkah (dengan Gambar)
Pengiktirafan Bintang Menggunakan Penglihatan Komputer (OpenCV): 11 Langkah (dengan Gambar)

Video: Pengiktirafan Bintang Menggunakan Penglihatan Komputer (OpenCV): 11 Langkah (dengan Gambar)

Video: Pengiktirafan Bintang Menggunakan Penglihatan Komputer (OpenCV): 11 Langkah (dengan Gambar)
Video: Python Project - Face Detection | Deteksi Wajah dengan Python 2024, Julai
Anonim
Pengiktirafan Bintang Menggunakan Penglihatan Komputer (OpenCV)
Pengiktirafan Bintang Menggunakan Penglihatan Komputer (OpenCV)

Instruksional ini akan menerangkan kepada anda bagaimana membuat program penglihatan komputer untuk secara automatik mengenal pasti corak bintang dalam gambar. Kaedah menggunakan perpustakaan OpenCV (Open-Source Computer Vision) untuk membuat satu set lata HAAR terlatih yang dapat digunakan untuk mengenali corak bintang tertentu. Walaupun panduan ini berada dalam konteks pengecaman corak bintang, proses OpenCV yang saya jelaskan juga dapat digunakan untuk aplikasi lain - jadi semoga ia berguna!

Projek ini diringkaskan dalam video ini:

Mengapa saya menulis arahan ini?

  1. Kaedah pengenalan corak bintang yang saya kembangkan Saya percaya berpotensi untuk diterapkan pada pelbagai projek astronomi amatur - sama ada itu orientasi teleskop, klasifikasi gambar automatik, atau bahkan akhirnya sensor bintang pada sumber terbuka atau amatur CubeSat.
  2. Terdapat banyak arahan OpenCV yang baik di sini, tetapi walaupun pada awalnya saya merasakan proses yang sangat sukar untuk dipelajari, jadi saya harap panduan ini akan menjadi rujukan yang baik bagi orang lain yang ingin melatih pengkelasan HAAR untuk OpenCV (tidak semestinya berkaitan dengan astronomi mungkin!).
  3. Saya bukan pengaturcara terlatih, jadi projek ini benar-benar mendorong pemahaman saya. Mudah-mudahan dengan menulis Instructable ini, pembuat yang lain yang lebih berpengalaman akan diberi inspirasi untuk menggarap konsep ini dan menyumbang kepada GitHub dan arahan ini melalui komen di halaman ini.
  4. Kaedah astronomi dan orientasi amatur adalah minat besar saya, lihat arahan saya sebelumnya yang menampilkan Arduino Star-Finder untuk Teleskop.

Foto sampul Instructable ini adalah reka bentuk konsep 3U CubeSat yang saya sertai dalam reka bentuk. Saya menggunakannya untuk menggambarkan petunjuk ini kerana aplikasi asli sistem pengenalan bintang penglihatan komputer adalah untuk sensor orientasi untuk CubeSats buatan amatur, menggunakan Kamera Raspberry Pi V2. Terdapat banyak aplikasi lain yang mungkin saya yakini sebagai pengiktirafan bintang penglihatan komputer, tetapi saya rasa ini adalah yang paling hebat!

Glosari Kecil:

Belajar mengenai penglihatan komputer dibuat lebih perlahan dengan sebilangan istilah istilah pakar yang digunakan, jadi saya akan menentukan beberapa perkara untuk kami di sini:

Cascade - Pengelas yang dilatih untuk mengenal pasti objek sasaran tertentu.

Fiducial Marker - Penanda yang menambahkan titik rujukan visual pada gambar.

HAAR - Ciri seperti Haar adalah sejenis ciri gambar yang digunakan untuk latihan pengelasan.

OpenCV - Open Source Computer Vision, perpustakaan alat penglihatan komputer.

Stellarium - perisian astronomi Sumber Terbuka.

Langkah 1: Keperluan

OpenCV adalah pustaka berasaskan Linux, jadi walaupun seharusnya dapat mengoperasikannya dengan baik pada Windows, anda akan mempunyai masa yang lebih mudah untuk menjalankannya di persekitaran Linux (ambil ini dari saya dan banyak hari berusaha untuk membuatnya berfungsi sepenuhnya Windows!). Sebagai percubaan, saya memuat turun dan menjalankan OpenCV pada Raspberry Pi 3B + saya, yang berjaya, walaupun latihan pengkelasan adalah proses intensif RAM, jadi jika anda ingin melakukannya dengan pantas, laluan yang disyorkan adalah dengan menyewa Linux Virtual Server (yang sebenarnya sangat murah) selama beberapa hari / minggu / bulan dan menggunakannya sebagai persekitaran khusus untuk menjalankan latihan pengkelasan. Anda akan dapat mengawal pelayan dari PC Windows menggunakan klien SSH seperti Putty. Setelah kaskade dilatih menggunakan VPS, mereka boleh dimuat turun ke PC Windows anda, dan Python dapat digunakan untuk menjalankan program pengenalan gambar dalam lingkungan Windows.

Pelayan Maya Linux:

Pelayan Maya Linux (VPS) diperlukan untuk melakukan proses latihan lata HAAR. Pada mulanya saya menyewa pelayan dengan RAM 8GB dan Ubuntu 16.04.6 (LTS) x64, dan kemudian yang kedua untuk menggandakan kadar di mana saya dapat melatih lata, walaupun anda hanya memerlukan minimum satu

Perisian:

  • Stellarium - ini adalah perisian planetarium / astronomi maya, tersedia secara percuma. Ia akan digunakan untuk mengumpulkan gambar bintang yang disimulasikan untuk digunakan dalam ujian.
  • Putty - Ini adalah pelanggan SSH yang digunakan untuk mengawal VPS melalui baris perintah.
  • WinSCP - ini digunakan untuk melakukan pemindahan fail dari PC Windows.

Langkah 2: Persediaan VPS

Terdapat proses penyediaan kecil untuk menghidupkan dan menjalankan VPS. Kali pertama mungkin memerlukan sedikit masa untuk anda, tetapi tidak terlalu sukar jika anda mengikuti langkah-langkahnya dengan teliti. Tutorial ini adalah rujukan yang bagus untuk saya, saya mengesyorkan anda membaca ini juga semasa menjalani arahan ini. Ini merangkumi spesifik perintah linux baris demi baris, yang perlu diikuti dengan huruf tersebut.

Secara kasar, proses ini melibatkan:

  1. Pembuatan pelayan Linux dengan versi Ubuntu yang betul.
  2. Meningkatkan dan Mengemas kini pelayan.
  3. Pembuatan direktori ruang kerja, di mana OpenCV dipasang.
  4. Pemasangan beberapa perkara penting, iaitu penyusun, pelbagai perpustakaan, dan pengikatan Python.

Selepas peringkat ini, anda sudah bersedia untuk memulakan persiapan untuk proses latihan.

Langkah 3: Prosesnya

Keseluruhan proses penglihatan komputer menggunakan lata HAAR agak membingungkan pada awalnya, jadi Langkah ini menerangkan logiknya dengan lebih terperinci:

Proses Asas

  1. Set data gambar negatif ada, terdiri daripada beberapa ribu gambar yang tidak mengandungi objek menarik. Perkara ini perlu dimuat naik ke VPS.
  2. Satu gambar positif dibuat yang mengandungi objek menarik. Ini juga perlu dimuat naik ke VPS.
  3. Gambar positif tunggal diputarbelitkan, dipusingkan, diputar, dan lain-lain, oleh sekumpulan parameter yang dipilih dan dilapisi pada pemilihan gambar negatif. Ini adalah kaedah buatan untuk membuat set data positif yang besar daripada satu gambar. (Untuk aplikasi dunia nyata lain, seperti mengenal pasti kucing, anda hanya boleh menggunakan beberapa ribu gambar kucing, tetapi kaedah ini tidak selalu sesuai jika anda tidak mempunyai sekumpulan gambar positif yang banyak. Pendekatan buatan yang digunakan di sini akan kurang berkesan, tetapi itu adalah satu-satunya pilihan untuk kes penggunaan seperti ini).
  4. Proses latihan dijalankan, yang berjalan secara berperingkat. Setiap peringkat akan melatih lata untuk mengenal pasti ciri-ciri jenis HAAR yang berbeza di dalam kumpulan gambar. Setiap peringkat memerlukan waktu lebih lama untuk diselesaikan, dan keberkesanan pengkelasan meningkat setiap kali (mungkin juga untuk melatih secara berlebihan sehingga anda tahu!).
  5. Satu kaskade terlatih akan dapat mencari objek sasaran tunggal. Sekiranya anda ingin mengenal pasti pelbagai objek unik, anda memerlukan kaskade terlatih untuk setiap objek tersebut. Dalam kes ini, saya melatih kira-kira 50 lata berlainan untuk mencari bintang yang unik, untuk membuat satu set yang dapat meliputi hemisfera langit utara.
  6. Terakhir, program pengesanan digunakan yang menjalankan setiap lata satu set terhadap gambar input. Kaskade akan mencari objek sasaran yang diberikan dalam gambar input.
  7. Sekiranya berjaya, objek sasaran akan dikenali dalam gambar input.

n.b. jika digunakan dalam konteks orientasi satelit misalnya, gambar akan diambil menggunakan kamera onboard. Bintang-bintang yang paling terang dalam gambar itu akan dikenal pasti, dan penanda bertindih pada kedudukan tersebut. Gambar ini kemudian disajikan kepada sekumpulan lata terlatih, yang akan menguji untuk melihat apakah gambar input berisi objek sasaran. Sekiranya positif positif dikesan, maka kedudukan sudut bagi buruj yang diketahui dijumpai berbanding dengan paksi badan satelit.

Langkah 4: Negatif dan Positif

Negatif

Aspek yang sangat penting dalam latihan lata adalah dengan memiliki set data gambar negatif sebanyak mungkin. Kami bercakap beribu-ribu, idealnya puluhan ribu gambar. Tidak peduli apa isi kandungannya, tujuannya hanyalah untuk memberikan pelbagai maklumat visual. Folder Latihan Pengelas mengandungi pelbagai set data gambar negatif yang berbeza yang saya kumpulkan. Pada mulanya, ini hanya terdiri daripada gambar medan bintang simulasi yang dikumpulkan dari Stellarium, tetapi kemudian saya menambah kumpulan data dengan sebilangan besar gambar rawak yang saya dapat (ya, termasuk gambar percutian saya…). Set data terbesar di sana merangkumi hampir 9000 gambar, yang merupakan yang terbesar yang saya buat setakat ini. Dengan menggunakan ini akan menjimatkan penyusunan anda sendiri.

Positif

Imej positif (itulah corak bintang sasaran yang akan dilatih oleh kaskade) bermula sebagai tangkapan skrin corak bintang di Stellarium. Program python kemudian mengenal pasti bintang yang paling terang dalam gambar, dan meletakkan penanda (dijelaskan kemudian dalam arahan ini) ke kedudukan bintang ini. Gambar ini kemudian dikecilkan menjadi 50x50 piksel. Ini kecil, tetapi masa latihan yang diperlukan untuk lata akan meningkat secara eksponen apabila ukuran ini meningkat, dan ini adalah kompromi yang baik antara kualiti dan waktu.

Langkah 5: Kawalan Stellarium

Kawalan Stellarium
Kawalan Stellarium
Kawalan Stellarium
Kawalan Stellarium

Folder Stellarium Skrip repositori GitHub mengandungi tiga program yang saya tulis untuk mengawal penggunaan Stellarium. Untuk menggunakannya, letakkan di folder skrip folder pemasangan Stellarium anda. Untuk menjalankannya, anda dapat membuka tetingkap skrip dari dalam menu Stellarium, atau hanya dengan mengklik dua kali pada program di folder skrip, yang akan melancarkan Stellarium dan segera menjalankan program yang dipilih.

thesis_4 dan thesis_5 menangkap kira-kira 2000 gambar masing-masing di utara dan selatan, hemisfera langit. Ini digunakan untuk membentuk pangkalan data gambar negatif, untuk melatih gambar positif melawan. Perbezaan antara utara dan selatan adalah cara mudah untuk memastikan bahawa corak bintang sasaran (positif) tidak akan ada dalam set data negatif dengan melatih corak bintang hemisfera utara terhadap set data gambar hemisfera langit selatan dan sebaliknya. (Sekiranya gambar positif juga terdapat dalam set data gambar negatif, ia akan mempengaruhi kualiti pengklasifikasi).

thesis_setup juga berguna - ini menyiapkan Stellarium agar sesuai untuk menangkap gambar - gambar yang digunakan untuk mensimulasikan pemandangan dari Space. Ia melakukan tindakan seperti menyembunyikan menu, garis grid, label dll secara automatik untuk menjimatkan anda setiap kali anda mahu mengambil gambar.

Langkah 6: Manusia Roket

Manusia Roket
Manusia Roket

Lata pertama yang saya latih tidak dapat mengenal pasti corak bintang dengan betul. Mereka sangat tidak boleh dipercayai dan sangat terdedah kepada positif palsu. Anggapan saya adalah bahawa gambar medan bintang dari Stellarium secara berkesan (pada dasarnya hanya titik putih pada latar belakang hitam) tidak mengandungi maklumat visual yang mencukupi untuk mengandungi ciri jenis HAAR yang cukup untuk latihan pengelasan yang berjaya. Saya rasa sudah larut malam, tetapi saya memutuskan untuk mencuba idea menulis program untuk meletakkan gambar kecil kecil secara automatik di atas lokasi setiap bintang terang dalam gambar bidang bintang.

Elton

Ini adalah ujian yang konyol, tetapi dengan menambahkan gambar kecil wajah Elton John ke setiap lokasi bintang yang terang, melatih pengkelasan terhadap imej positif ini, dan kemudian menjalankan lata dengan gambar asal, jauh lebih berkesan untuk mencari corak yang betul. Saya tahu saya menginginkan sesuatu!

Langkah 7: Penanda Fiducial

Penanda Fiducial
Penanda Fiducial

Walaupun 'Eltons' membuktikan teorinya, saya memerlukan penanda yang mempunyai simetri putaran penuh, supaya corak bintang kelihatan sama tidak kira pada orientasi apa yang dikemukakan. Saya menguji pelbagai jenis penanda, dan mendapati bahawa jenis di bahagian bawah kanan paling berkesan, dengan cincin hitam dan putih yang berbeza. Program python yang disajikan dalam folder positif repo GitHub menunjukkan bagaimana bintang paling terang dalam gambar tertentu dikenal pasti, dan penanda ini secara automatik bertindih pada kedudukan tersebut. Kami kini telah membuat gambaran mengenai corak bintang utama yang dapat dilatih.

Langkah 8: Menggunakan lata

Menggunakan lata
Menggunakan lata

Apabila anda telah melatih sekumpulan lata, anda perlu tahu bagaimana menggunakannya untuk mengenal pasti objek dalam gambar!

Lihat folder Pengenalan Bintang GitHub, di mana anda akan menemui program cascade_test19.py. Program bernama mudah ini mengambil satu set lata dari folder yang diberikan, dan menjalankan semuanya terhadap gambar input, dan laporan mengenai pengesanan yang dibuat. Fungsi 'detectMultiScale' adalah inti dari ini, dan memerlukan pelbagai argumen yang menentukan proses pengesanan. Mengubah ini sangat penting untuk prestasi pengklasifikasi lata, dan lebih banyak perbincangan mengenai perkara ini dapat dijumpai pada langkah berikut, di mana kita melihat bagaimana menghilangkan positif palsu.

Ini dapat diterapkan dalam sistem orientasi satelit dengan menghubungkan nilai piksel di tengah kotak pengikat dengan koordinat langit / Ra dari bintang pelindung yang dikenal pasti, dan kemudian menghubungkannya dengan perpindahan sudut dari pusat gambar (kamera paksi). Dari ini, dengan menggunakan pemahaman mengenai distorsi lensa (hampir dengan unjuran gnomonik), sudut satelit dapat dijumpai hanya dengan dua pengenalan positif.

Langkah 9: Cara Tetap Positif Mengenai Positif Palsu

Cara Tetap Positif Mengenai Positif Palsu
Cara Tetap Positif Mengenai Positif Palsu
Cara Tetap Positif Mengenai Positif Palsu
Cara Tetap Positif Mengenai Positif Palsu

Kedua gambar ini menunjukkan hasil pengujian set kaskade terhadap gambar yang serupa, tetapi dengan parameter yang berbeza. Jelas, gambar pertama mengandungi pengenalan yang benar, tetapi juga sejumlah besar positif palsu, sedangkan gambar kedua hanya mengandungi pengenalan yang betul.

Program cascade_test19.py dalam folder Pengenalan Bintang repo GitHub menggunakan dua kaedah untuk menyusun hasilnya. Pertama, functon DetectMultiScale menetapkan ukuran hasil Miminum dan Maksimum yang dapat dijumpai, yang masuk akal, sebagai ukuran anggaran corak bintang sasaran di dalam tetingkap (untuk lensa dan pembesaran yang diberikan - gambar Stellarium yang saya simulasi menggunakan sifat Kamera Raspberry Pi V2) dikenali. Kedua, kod akan memilih hasilnya dengan kotak pengikat terbesar (dalam had sebelumnya). Dalam ujian, ini didapati positif positif. Ketiga, program menetapkan 'levelWeights' minimum (berkesan 'nilai keyakinan') yang diperlukan untuk menganggap ID ini sebagai positif yang benar. Dengan kaedah ini, lata berkesan mencari hasil yang betul.

Seperti juga gambar medan bintang, saya juga menguji ini dengan gambar meja saya misalnya, melatih lata untuk mengenal pasti buku nota saya, cawan dll, untuk berlatih menghilangkan positif palsu. Kaedah di atas berfungsi dengan baik dalam semua keadaan yang menggembirakan.

Langkah 10: Perbincangan

Perbincangan
Perbincangan
Perbincangan
Perbincangan
Perbincangan
Perbincangan

Kawasan untuk Penambahbaikan

Ini merupakan projek yang kompleks bagi saya, dan benar-benar mendorong pemahaman saya mengenai topik ini. Ia memerlukan beberapa bulan kerja hampir sepenuh masa untuk mendapatkan projek ini sehingga saya dapat membagikannya kepada anda, tetapi masih ada banyak kerja yang perlu dilakukan untuk meningkatkan prestasi kaedah ini. Seperti berdiri, ia dapat berfungsi dengan baik dalam batasan tertentu. Saya telah berusaha untuk mengenal pasti kawasan mana yang memerlukan pekerjaan tambahan, dan semoga dapat meluangkan masa untuk menangani masalah ini pada bulan-bulan yang akan datang. Mereka adalah:

Sudut - Ini adalah kawasan yang kompleks, idea bahawa hasil pengklasifikasi mestilah tidak berubah secara bergilir, iaitu, kebolehpercayaan harus mengenal pasti corak bintang sasaran tanpa mengira sudut di mana ia disajikan gambar yang mengandungi bintang sasaran. Kaskade yang dilatih menggunakan gambar input pada orientasi tunggal tidak akan dapat mengenal pasti gambar tersebut pada orientasi rawak, jadi variasi sudut gambar positif mesti diperkenalkan ke dalam proses latihan untuk melatih lata yang dapat menerima jarak dari sudut input. Parameter 'maxzangle' dalam perintah latihan kaskade mengambil argumen dalam radian, yang mengendalikan had sudut bahawa gambar positif input akan dilapisi pada gambar negatif yang disediakan, sehingga set gambar positif yang dihasilkan akan berisi berbagai orientasi imej positif. Namun, apabila ruas maksimum ini meningkat, nisbah penerimaan (secara umum, kualiti) lata akan berkurang dengan mendadak. Saya percaya jalan keluarnya adalah untuk melatih lata menggunakan pangkalan data gambar negatif yang jauh lebih besar daripada yang saya gunakan untuk memastikan bahawa pengklasifikasi lata berkualiti baik dapat dibuat walaupun menggabungkan penyebaran orientasi yang besar.

Penyelesaian berpotensi lain adalah dengan melatih sejumlah lata untuk sasaran tertentu, setiap kaskade mengatur bahagian tertentu dari putaran 360 darjah penuh. Dengan cara itu, kualiti setiap kaskade dapat dijaga pada tingkat tinggi, tetapi di sisi lain ini akan menghasilkan lebih banyak lata, dan oleh itu proses pengenalan akan lebih lambat.

Parameter 'levelWeight', yang merupakan nilai yang diberikan oleh fungsi 'DeteksiMultiScale', adalah analog dengan nilai kepercayaan dalam pengesanan yang telah dibuat. Mempelajari ini, grafik di atas dibuat, yang menunjukkan bagaimana keyakinan terhadap pengenalpastian positif menurun dengan tajam ketika orientasi gambar meningkat ke kedua arah, mengesahkan pemikiran bahawa ini adalah titik lemah.

Penempatan Piksel - Titik yang jauh lebih sederhana, tetapi juga bermasalah ialah penempatan piksel, yang digambarkan oleh dua gambar berikut, yang menunjukkan pemandangan gambar bintang yang diperbesar, sehingga setiap piksel dua bintang dapat dilihat dengan jelas. Proses hakisan yang digunakan dalam program untuk menggosok semua kecuali bintang yang paling terang dari gambar akan mengekalkan bintang pertama, dan membuang yang kedua, walaupun kecerahannya sama. Sebabnya ialah bintang pertama berpusat pada piksel, sedangkan bintang kedua tidak seperti itu. Fungsi hakisan melucutkan cincin sepusat piksel dari sekitar piksel tengah kumpulan, dan oleh itu bintang pertama akan mempunyai piksel pusat yang bertahan dari fungsi hakisan, tetapi bintang kedua akan dikeluarkan sepenuhnya dari gambar. Oleh itu, penanda fiducial hanya akan diletakkan pada bintang pertama, dan bukan yang kedua. Ini akan menyebabkan ketidakkonsistenan berkaitan dengan bintang terang di medan bintang tertentu yang akan menerima penanda (dan oleh itu dibandingkan dengan pengklasifikasi terlatih) - oleh itu kemungkinan pemerhatian positif yang betul tidak mungkin dilakukan.

Langkah 11: Kata Terakhir

Perkataan terakhir
Perkataan terakhir

Terima kasih kerana membaca arahan saya, saya harap projek ini menarik. Ini adalah proses yang sangat menarik untuk mengusahakannya, sudah lebih dari setahun sejak saya mula mengusahakan konsep ini, dan saya didorong oleh hasilnya hingga saat ini. Dari literatur yang saya baca, ini adalah konsep yang cukup asli, dan dengan lebih banyak pengembangan pasti dapat diterapkan dalam pelbagai aplikasi untuk astronomi amatur atau lebih.

Projek ini merupakan kurva pembelajaran yang curam bagi saya, dan oleh itu saya berharap sebilangan pembaca dengan lebih banyak pengalaman pengaturcaraan dapat diilhamkan untuk menyumbang kepada kelanjutan projek melalui halaman GitHub, dan kami dapat terus mengembangkan alat sumber terbuka ini. Saya tidak sabar untuk membaca sebarang komen yang anda ada, tetapi jangan terlalu banyak bertanya!

Cabaran Angkasa
Cabaran Angkasa
Cabaran Angkasa
Cabaran Angkasa

Naib Johan dalam Cabaran Angkasa

Disyorkan: