Bilgisayarla görüş için iyi dil?


28

İçerik tabanlı bir görüntü alma sistemi uygulamaya çalışıyorum, ancak bunu yapmadan önce bu göreve uygun bazı programlama dilleri hakkında genel bir bilgi edinmek istiyorum (iyi lib'ler ve benzeri).

Bu tür bir görev için iyi dilleri ve libleri bilen var mı? Peki ya Python veya Java?

En iyi


Kapsam akademik bir projedir ;-) bunu söylemediğim için özür dilerim!
Şubat'ta jstr

1
Bir yazılım başlangıcında ~ 3 yıl boyunca bir bilgisayar vizyonu grubunda çalıştım. Hızlı prototipleme işleri için python + scipy / numpy, üretim kodu için C ++ kullandık. boost :: python sarmalayıcılar ağır C ++ için taşıma işlemine yardımcı oldu. BLAS ve LAPACK, ağır sayısal şeyler için kullanılır.
wim

2
@wim - Yorumlarınız, bu dilleri neden farklı gelişim aşamaları için kullandığınızla ilgili biraz daha ayrıntılı bir cevap verecektir.
Mark Booth,

1
Hızlı prototipleme için Matlab veya Octave'ı kullanabilir ve daha sonra Armadillo (doğrusal cebir için) ve MLPACK (makine öğrenmesi ve örüntü tanıma için) gibi araç setleriyle C ++ 'a dönüştürebilirsiniz . Armadillo, dahili olarak BLAS ve LAPACK kullanır (Matlab ile aynı). Ayrıca'n'match Matlab / Octave kodunu C ++ koduyla Armadillo'nun mex arabirimi üzerinden karıştırabilirsiniz.
mtall

Yanıtlar:


35

Belki çalışmanızın kapsamı ve ölçeği hakkında daha spesifik olabilirsiniz (akademik proje? Masaüstü veya Mobil ticari ürün? Web tabanlı ticari proje?).

Bazı öneri ve yorumlar:

  • Matlab akademik dünyada yaygındır ve fikir çizmek / doğrulamak için oldukça iyidir. Diğer araştırmacılardan geniş bir kod grubuna erişebileceksiniz (CV ve makine öğreniminde); prototip oluşturma ve hata ayıklama çok hızlı ve kolay olacaktır, ancak bu ortamda geliştirmiş olacağınız şeyleri üretmek zor olacaktır. Kodunuzun ne yaptığına bağlı olarak, bellek / performans sorunlarınız olabilir (Matlab'ın ilkelleri açısından ne yapmak istediğinizi tanımlayamadığınız durumlar olabilir ve pikseller üzerinde döngü oluşturmaya başlamalısınız ve Matlab'ın yorumlanmış bir dil olması değildir. bu bağlamda yardım). Veritabanları, web sunucuları vb. İle etkileşim kolay değildir, bazen imkansızdır (bir web ön uç tarafından adlandırılan bir Thrift sunucusu olmak için bir Matlab programı elde edemezsiniz). $$$ maliyeti.

  • C ++, birçok üretim sınıfı CV sistemi için kullanılan şeydir (Google’ın görsel arama veya Streetview veya birçok ticari robotik uygulama ölçeğinde bir şey düşünün). OpenCV gibi iyi kütüphaneler, mükemmel performans, üretim ortamına koymak kolaydır. Makine öğrenmesi yapmanız gerekiyorsa, dışarıda birçok kütüphane vardır (LibSVM / SVMlight, Torch). "Tüm piksellerde döngü" koduna başvurmanız gerekiyorsa, iyi performans gösterecektir. Büyük ölçekli bir geri alma sisteminde ihtiyaç duyulan sistemleri / depolama katmanlarını kodlamak için kullanımı kolaydır (örneğin: görüntülere ters bir dizin haritalama özelliği hash'leri depolamak için çok büyük bir disk üstü karma haritası). Thrift / Message Pack gibi şeyler, geri alma programınızı bir web ön uç tarafından çağrılabilen bir RPC sunucusuna dönüştürebilir. Ancak: prototip oluşturma konusunda çok çevik değil, yeni fikirler denemek için oldukça berbat, daha yavaş gelişme süresi; ve deneyimsiz kodlayıcıların ellerine verilmiş performansları ve / veya dengesizlik sorunlarını izlemek zor olabilir.

  • Python bir şekilde ikisi arasında bir orta yoldur. Matlab tarzı sayısal hesaplamalar için kullanabilirsiniz (numpy ve scipy ile) + OpenCV gibi kütüphanelere bağlanır. Bununla beraber sistemler / veri yapı işleri yapabilir ve kabul edilebilir performanslar elde edebilirsiniz. Orada Matlab veya C ++ 'dan daha az olsa da, birkaç tane makine öğrenme paketi var. "Tüm piksellerde döngü" koduna başvurmanız gerekmiyorsa, C ++ ile yapabileceğiniz her şeyi 1: 1.5 ila 1: 3 performans oranı ve 2: 1 ila 10: 1 oranla kodlayabilirsiniz. kaynak kodu boyutu (tartışmalı). Ancak projenizin başarısına bağlı olarak, performansın önemli olacağı bir nokta olacak ve C ++ 'a yeniden yazmak bir seçenek olmayacak.


4
Ayrıca, Matlab, Python'un aksine belgelerde çok güçlüdür.
Andrey Rubshtein

1
Peki ya C? Şüphe duyduğumda bu benim dilim.
Zetta Suro

10

Özellikle projeniz akademik olduğu için, Mathematica çok iyi ve uygun bir yazılım sistemidir. Mathematica 8, görüntü işleme, doğrusal cebir, sayısal, GPU, vb. İçin kapsamlı bir dizi özellik ile birlikte gelir. Aynı zamanda, birçok kez denklemler için kapalı form çözümleri türetebildiğim, bilgisayarla görme görevlerinde oldukça kullanışlı olan sembolik bir sistemdir. Mathematica ayrıca Python, C, C ++, Java, .NET, ..., kodu ile iletişim kurabilir.


5

Eğer bu bir akademik proje ise, kesinlikle Matlab'ı ve daha özel olarak Görüntü İşleme Araç Kutusu ile Bilgisayar Görme Sistemi Araç Kutusu'nu kullanmalısınız. Matlab'da algoritmaları prototip yapmak ve değerlendirmek için C ++ 'dan ziyade daha az zaman alır.

Python arayüzü ile bile OpenCV, Matlab'dan çok daha zordur ve gerçekten de zorundaysanız, Matlab'dan mex ile C veya C ++ kodlarını çağırabilirsiniz.


4

Bir görüntü alma sistemi için. İstemci tarafında ve sunucu tarafında kodunuz olurdu. Sunucu tarafı Python veya C / C ++ olabilir. OpenCV burada en iyi seçimdir. Her iki python ve C ++ arayüzüne sahiptir. Müşteri tarafı için Java kullanarak daha iyi olduğunu düşünüyorum.


3

Bilgisayarla görme için en iyi dil C ++. En büyük dezavantajı, istediğini elde etmenin daha zor olmasıdır. OpenCV orada bilgisayar görüşü için en iyi kütüphanedir, ancak aynı şeyleri matlab veya python kullanarak da yapabilirsiniz.

Buraya bir göz atın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.