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
Jawaban:
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.
sumber
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, ...,.
sumber
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.
sumber
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.
sumber
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 .
sumber