Bahasa yang bagus untuk visi komputer?

28

Saya mencoba menerapkan sistem pengambilan gambar berbasis konten tapi sebelum saya melakukannya saya ingin mendapatkan gambaran dari beberapa bahasa pemrograman yang cocok untuk tugas ini (memiliki lib yang baik dan semacamnya).

Adakah yang tahu beberapa bahasa dan lib yang baik untuk tugas semacam itu? Bagaimana dengan Python atau Java?

Terbaik

Jstr
sumber
Ruang lingkupnya adalah proyek akademis ;-) maaf karena tidak mengatakan itu!
jstr
1
Saya bekerja selama ~ 3 tahun dalam kelompok visi komputer untuk memulai perangkat lunak. Kami menggunakan python + scipy / numpy untuk membuat prototipe dengan cepat, dan C ++ untuk kode produksi. boost :: pembungkus python untuk C ++ yang berat membantu porting. BLAS dan LAPACK digunakan untuk hal-hal numerik yang berat.
wim
2
@wim - komentar Anda akan memberikan jawaban yang bagus, dengan sedikit lebih detail tentang mengapa Anda menggunakan bahasa-bahasa itu untuk berbagai fase perkembangan.
Mark Booth
1
Anda dapat menggunakan Matlab atau Oktaf untuk prototyping cepat, dan kemudian dikonversi menjadi C ++ dengan bantuan toolkit seperti Armadillo (untuk aljabar linier) dan MLPACK (untuk pembelajaran mesin & pengenalan pola). Armadillo menggunakan BLAS dan LAPACK secara internal (sama seperti Matlab). Anda juga dapat mencampur'n'match kode Matlab / Oktaf dengan kode C ++ melalui antarmuka mex Armadillo.
mtall

Jawaban:

35

Mungkin Anda bisa lebih spesifik tentang ruang lingkup dan skala pekerjaan Anda (proyek akademik? Desktop atau produk komersial Mobile? Proyek komersial berbasis web?).

Beberapa rekomendasi dan komentar:

  • Matlab adalah hal biasa di dunia akademik, dan cukup bagus untuk membuat sketsa / memvalidasi ide. Anda akan memiliki akses ke sejumlah besar kode dari peneliti lain (dalam CV dan pembelajaran mesin); prototyping dan debugging akan sangat cepat dan mudah, tetapi apa pun yang Anda kembangkan di lingkungan ini akan sulit untuk diproduksi. Tergantung pada apa kode Anda lakukan, Anda mungkin memiliki masalah memori / kinerja (ada situasi di mana Anda tidak dapat menggambarkan apa yang ingin Anda lakukan dalam hal primitif Matlab dan harus mulai mengulang pada piksel dan Matlab menjadi bahasa yang ditafsirkan bukan membantu dalam konteks ini). Berinteraksi dengan basis data, server web, dll. Tidak mudah, kadang-kadang tidak mungkin (Anda tidak akan mendapatkan program Matlab untuk menjadi server hemat yang disebut web-end). Biaya $$$.

  • C ++ adalah apa yang digunakan untuk banyak sistem CV tingkat produksi (pikirkan sesuatu pada skala pencarian gambar Google atau Streetview, atau banyak aplikasi robot komersial). Perpustakaan yang bagus seperti OpenCV, kinerja luar biasa, mudah dimasukkan ke dalam lingkungan produksi. Jika Anda perlu melakukan pembelajaran mesin, ada banyak perpustakaan di luar sana (LibSVM / SVMlight, Torch). Jika Anda harus menggunakan kode "loop pada semua piksel" itu akan bekerja dengan baik. Mudah digunakan untuk mengkode sistem / lapisan penyimpanan yang dibutuhkan dalam sistem pengambilan skala besar (misalnya: peta hash pada disk yang sangat besar untuk menyimpan hash fitur pemetaan indeks terbalik ke gambar). Hal-hal seperti Paket Hemat / Pesan dapat mengubah program pencarian Anda menjadi server RPC yang dapat dipanggil oleh front-end web. Namun: tidak terlalu gesit untuk membuat prototipe, cukup mengerikan untuk mencoba ide-ide baru, waktu pengembangan lebih lambat; dan menempatkan di tangan coders yang tidak berpengalaman mungkin sulit untuk melacak kinerja dan / atau masalah ketidakstabilan.

  • Python entah bagaimana merupakan jalan tengah di antara keduanya. Anda dapat menggunakannya untuk komputasi numerik gaya Matlab (dengan numpy dan scipy) + memiliki ikatan ke perpustakaan seperti OpenCV. Anda dapat melakukan hal-hal sistem / struktur data dengan itu dan mendapatkan kinerja yang dapat diterima. Ada beberapa paket pembelajaran mesin di luar sana meskipun kurang dari di Matlab atau C ++. Kecuali Anda harus menggunakan kode "loop on all pixel", Anda akan dapat mengkodekan hampir semua yang dapat Anda lakukan dengan C ++ dengan rasio kinerja 1: 1,5 hingga 1: 3 dan rasio 2: 1 hingga 10: 1 ukuran kode sumber (dapat diperdebatkan). Tetapi tergantung pada keberhasilan proyek Anda, akan ada titik di mana kinerja akan menjadi masalah dan ketika menulis ulang ke C ++ tidak akan menjadi pilihan.

pichenettes
sumber
4
Juga, Matlab sangat kuat dalam dokumentasi, tidak seperti Python.
Andrey Rubshtein
1
Bagaimana dengan C? Itu masuk ke bahasa saya ketika ragu-ragu.
Zetta Suro
10

Terutama karena proyek Anda bersifat akademis, Mathematica adalah sistem perangkat lunak yang sangat baik dan tepat. Mathematica 8 hadir dengan serangkaian fitur yang komprehensif untuk pemrosesan gambar, aljabar linier, angka, GPU, dll. Ini juga merupakan sistem simbolis sehingga berkali-kali saya dapat memperoleh solusi bentuk tertutup untuk persamaan --- cukup mudah untuk tugas penglihatan komputer. Mathematica juga dapat berkomunikasi dengan kode Python, C, C ++, Java, .NET, ...,.

Matthias Odisio
sumber
5

Jika ini adalah proyek akademis, maka Anda harus menggunakan Matlab, dan lebih khusus lagi Toolbox Pengolah Gambar dan Toolbox Sistem Visi Komputer. Ini akan membawa Anda pesanan besarnya lebih sedikit waktu untuk prototipe dan mengevaluasi algoritma di Matlab daripada di C ++.

Bahkan dengan antarmuka Python, OpenCV jauh lebih sulit digunakan daripada Matlab, dan jika Anda benar-benar harus melakukannya, Anda dapat memanggil kode C atau C ++ dari Matlab melalui mex.

Dima
sumber
4

Untuk sistem pengambilan gambar. Anda akan memiliki sisi klien dan kode sisi server. Sisi server dapat berupa Python atau C / C ++. OpenCV adalah pilihan terbaik Anda di sini. Ini memiliki kedua antarmuka python & C ++. Untuk sisi klien, saya pikir Anda lebih baik menggunakan java.

nav
sumber
3

Bahasa terbaik untuk visi komputer adalah C ++. Meskipun kelemahan utamanya adalah lebih sulit untuk mencapai apa yang Anda inginkan. OpenCV adalah perpustakaan terbaik untuk visi komputer di luar sana tetapi Anda dapat melakukan hal yang sama menggunakan matlab atau python.

Coba lihat di sini .

omg_img
sumber