Soru İstemci tarafı görüntü işleme


Ağır görüntü işleme gerektiren web tabanlı bir uygulama oluşturuyoruz. Bu işlem yükünün müşteri üzerinde olabildiğince çok olmasını istiyoruz ve mümkün olduğunca çok sayıda platformu (cep telefonları bile) desteklemek istiyoruz.

Evet biliyorum, hüsnükuruntu

İşte bilgi:

  1. Görüntü işleme, bazı verilerden rasterleştirmedir. PDF dosyasından bir PNG görüntüsü oluşturmayı düşünün.

  2. Çok fazla sunucu gücümüz yok. Yani istemci tarafı işlem biraz zorunluluktur.

Yani, biz düşünüyoruz:

  1. Flash - en yaygın, ama okuduğum şeylerden eksik geliştirme araçları var. (ve şimdilik iPhone / iPad desteği yok).

  2. Silverlight - .NET CLR kullanmamıza izin verir, bu yüzden büyük bir ++ (çok fazla kod .NET'dir). Ancak çoğu cep telefonu için desteklenmez (gelecekte android desteği duyulur)

  3. HTML5 + Javascript - muhtemelen en "taşınabilir" seçenek. Sorun, Javascript'teki tüm görüntü işleme kodlarını yeniden yazmak zorunda kalıyor.

Yardımcı olabilecek herhangi bir düşünce veya mimarlık var mı? Açıklama: Silverlight ve Javascript için kütüphanelerin neler olduğu konusunda daha fazla fikre ihtiyacım yok. Benim ikilemim

  • Silverlight'ı seçmek çoğu cep telefonu için destek anlamına gelir
  • Flash'ı seçmek, kodumuzun çoğunu yeniden geliştirmemiz gerektiği anlamına gelir VE iPhone / iPad desteği yok
  • HTML5 + Javascript kodumuzu çoğaltmalı ve tüm tarayıcılarda tam olarak desteklenmemeliyiz.
  • İki (Silverlight + Flash) seçmek çok maliyetli olacak

Eksik olabilecek herhangi bir kutu veya parlak fikir / alternatif var mı?


32
2018-02-01 03:27


Menşei


güzel soru + 1, cevapları beklemek için bekliyorum :) - George Profenza
Cep telefonları görüntü işleme ile ne kadar iyi başa çıkacak? Kullanıcıların mobil cihazlarının uygun olup olmadığını görebilmesi için bir çeşit hız testi kullanmam gerekir. - Richard Garside
Joa Ebert ve back2dos'un cevapları oldukça iyi. - George Profenza
iş mantığının çoğu (şeylerden okuma ve görüntü oluşturma) zaten .NET'te. cevapları "kodumuzun çoğunu yeniden geliştir" sorununa gider. - moogs


Cevaplar:


Bu, yazılım mimarlarının her zaman karşı karşıya kaldığı bir sorundur. Her zamanki gibi, ideal bir çözüm yoktur. Hangi uzlaşmanın işletmeniz için kabul edilebilir olduğunu seçmeniz gerekir.

Sorununuzu özetlemek için, görüntü işleme yazılımınızın çoğu .NET'te yazılmıştır. İstemci tarafını mobil cihazlarda çalıştırmak istersiniz, ancak mobil cihazlarda sınırlı .NET penetrasyonu vardır. Daha yüksek penetrasyona sahip alternatifler (örn. Flash), kodunuzu yeniden yazmanızı gerektirmez, ki bunu yapmaya gücünüz yetmez. Ayrıca, bu alternatifler iPhone / iPad'de desteklenmemektedir.

İdeal olarak istediğiniz şey, tüm .NET kodunuzu iPhone / iPad dahil olmak üzere mevcut birçok platformda çalıştırmanın bir yoludur. Şu anda böyle bir çözümün bulunmadığına dair bir güvenle söyleyebilirim - gözden kaçırdığınız bir "gümüş kurşun" cevabı yoktur.

Peki, üzerinde uzlaşmaya ne gerek var? Bana öyle geliyor ki, flaşta yeniden geliştirseniz bile, büyük bir pazarda (iPhone) hala kaçıracaksınız. Ve yazılımı yeniden geliştirme yazılımı oldukça pahalıdır.

İşte probleminiz için en iyi çözüm - "müşteri tarafında yürütme" kısıtlamanızdan ödün vermeniz gerekiyor. Sunucu tarafı çalıştırırsanız, mevcut kodunuzu saklayın ve iPhone da dahil olmak üzere hemen hemen her mobil istemciye dağıtın.

Sunucu gücünüzün sınırlı olduğunu, ancak yazılım geliştirme maliyetleriyle karşılaştırıldığında sunucu işlem gücünün ucuz olduğunu söylediniz. Gerçekten de, sunucu bileşeninizin dış kaynak kullanımı için pahalı değildir ve sadece kullandığınız şeyi ödersiniz. Büyük olasılıkla uygulamanızın başlamak için düşük penetrasyona sahip olması muhtemeldir. İş büyüdükçe, sunucu kapasitenizi yükseltmeyi göze alabileceksiniz.

Bu sorunun sizin için en iyi çözüm olduğuna inanıyorum.


28
2018-02-04 04:25



Teşekkürler! iyi yazılmış cevap :). Bu, geçen hafta aradığımız alternatif. Bu cevabı vereceğim ..... bir gümüş büyülü mermi gelmiyorsa;) - moogs
+1, evet cevabımı da gör. Donanım ucuzdur, programcılar değildir. - Paolo
Teşekkürler Moogs, bu yardımcı oldu sevindim - Craig Schwarze
Novell'den MonoTouch, iPhone / iPad'i hedeflemek için C # kodunun AOT özelliğini kullanır. Kütüphane desteği, Moonlight kod tabanına dayanır. Açıktaki grafik kütüphaneleri, yerel CocoaTouch'ların klonlarıdır ve birkaç sınırlama vardır, ancak bu size uzun bir yol katetmelidir. - David Cuccia
Sadece iPhone / iPad'i hedeflemek isteseydiniz, MonoTouch kesinlikle kontrol edilmeye değerdi. Ancak, geniş çaplı web tabanlı uygulamalarla ilgilendiğiniz için, bunun sizin için ideal bir çözüm olacağından emin değilim. - Craig Schwarze


Amazon E2C, Azure veya Google'da görüntü işleme işlemlerinizi gerçekleştirin. IIRC E2C, paketlenmiş ve hepsi kullanıma hazır birçok yaygın görüntü işleme sorununa sahiptir.

Azure muhtemelen bir web hizmeti olarak kod paylaşımı açısından daha tanıdık bir zemin

Sadece CPU döngüleri ve transferleri / depolama vb. İçin ödeme yaparsınız.


7
2018-02-05 00:50



Bulutta bilgisayar vizyonu üzerine uygulamalar yapabilir miyiz? - coder9


Eminim, Silverlight ve JS kişileri gönderen örnekler olacak. ActionScript'te yazılan bazı görüntü editörleri:

  1. Anka kuşu
  2. PhotoshopExpress

Bir var ImageProcessing kütüphanesi ile başlamak için. Artı PixelBender Flash Player 10'da mevcut, hızlı, ayrı bir iş parçacığında çalışıyor ve insanlar onunla bazı oldukça çılgın şeyler yapmak.

HTH


4
2018-02-01 04:03



Bu flashlite ile çalışır mı? - moogs
Flash Player 10.1 cep telefonlarına ulaşıyorlabs.adobe.com/technologies/flashplayer10, blogs.adobe.com/flashplatform/2010/01/... ). Ayrıca Elips Studioopenplug.com/resources/gallery) flash içeriği mobil pazara itmek için harika bir seçenek gibi görünüyor. - George Profenza


Silverlight bölümü için bazı yardımlar:

Adında bir Silverlight görüntü düzenleyici var Thumba. Ve Nokola kısa süre önce bir tane yaptı EasyPainter ve ayrıca kaynak kodunu furure'de sağlayacak.

Görüntü dönüştürme için açık kaynak kütüphanesini öneriyorum ImageTools Bu da bazı temel etkileri içerir. Silverlight'ın, WriteableBitmap adlı bitmaplerin piksel manipülasyonu için bir sınıfı vardır. Açık kaynak kütüphanesi WriteableBitmapEx Silverlight WriteableBitmap için uzantı yöntemleri topluluğudur. WriteableBitmap API'si çok minimalist ve bu tür işlemler için sadece ham Piksel dizisi var. WriteableBitmapEx kitaplığı, yerleşik yöntemler gibi kullanımı kolay uzantı yöntemleri ile bunu telafi etmeye çalışır. Pixel Shaders, bazı hızlı ve gelişmiş efektler yapmak için de kullanılabilir. Shader Model 2 ile sınırlı olsalar bile, hızlı blürasyon, renklendirme ve bu gibi şeyler için gölgelendiriciler kullanılabilir.


4
2018-02-01 10:02



Evet, ancak sorun Silverlight ile cep telefonlarını destekleyemeyiz. - moogs
Tabii, şimdi değil, ama sen istedin. :) BTW, sadece cevabı güncelledim ve Nokola'nın EasyPainter uygulamasını ekledim. Sen de kontrol etmelisin. - Rene Schulte


Sorununuz için mükemmel bir hedef haXe Programlama dili. haXe web için yazılmıştır ve JavaScript, Flash ve Objective-C'ye (muhtemelen Java / .NET) derlenebilir. Yani hangi platforma yatırım yapacağınızı değil, hangi dilde yapacağınızı seçersiniz. haXe, bir AcitonScript programcısı için kolayca benimsenebilir.

Flash kullanılabilir olduğunda çok daha hızlı olacağından, JavaScript işleme alanında görüntü işleme algoritmalarınızı çalıştırmanın bir anlamı yoktur. Ayrıca, JavaScript gibi bir iPhone gibi bir mobil cihazda ağır görüntü işleme algoritmalarını çalıştırmanın da bir anlamı kalmaz. JavaScript'i yalnızca en kötü geri dönüş çözümü olarak destekleyeceğim.

Eğer haXe kullanmak istemiyorsanız, Flash ile giderdim. Sorununuz buysa, Flash uygulamanızı iPhone için de kullanabilirsiniz. Bu da çok harika çünkü yerli ARM kodunu aldınız. Profesyonel Flash geliştirme için uygun araçlar vardır. FDT ve IntelliJ IDEA bunlardan ikisi. En iyi haXe IDE muhtemelen FlashDevelop yazı anında.

Bu yüzden kesinlikle JavaScript'i tek çözüm olarak kullanmam. haXe, elde etmeye çalıştığınız şey için mükemmeldir. Güvenmiyorsanız veya haXe'ye yatırım yapmak istemiyorsanız Flash'ı kullanabilirsiniz. iPhone / iPad dışa aktarma.

Usecase'inize bağlı olarak, örneğin Amazon EC2 ve Google AppEngine gibi barındırma bulutlarına bakmanızı da öneririz. Hosting maliyetleri ucuz ve sizin göreviniz için ölçeklendirme kolay olacaktır. Bir masaüstü sistemde çok fazla zaman alabilen karmaşık işlemler söz konusu olduğunda bu deneyim çok daha iyi olacaktır.


3
2018-02-10 17:31





YASAL UYARI: Kendimi Flash platformunun savunucusu olarak görüyorum. Silverlights'ın tarayıcıya hemen hemen her .NET içeriğini dağıtmak için bir teknoloji olarak büyük bir potansiyele hayranlık duyuyorum, ancak düşük penetrasyonu var, korkunç bir şekilde pazarlanıyor ve birçok kişi tarafından algılanıyorsa (çoğunlukla Flash ya da Silverlight'ı bilmeyen insanlar) Flash, Sliverlight'ın rakibi olmadığı kadar Flash'ın rakibi değildir. İçimdeki idealist, üçüncü taraflara ait tescilli yazılımlara güvenmek yerine, bir standardı kullanarak HTML + JS'de her şeyi yapma fikrini çok seviyor. Ama gerçek şu ki, JS yavaş ve API sınırlıdır ve JS, HTML ve CSS uygulamaları tarayıcılar arasında son derece tutarsızdır.

Eğer gerçekten .NET'e bağlı kalmak istiyorsanız ve iPhone'u ve kardeşlerini hedeflemekle çok ilgileniyorsanız, o zaman kontrol etmek isteyebilirsiniz. MonoTouch.

Yine de, bu sizi şaşırtabilir olsa bile, size Flash kullanacağını söyleyeceğim. :)

Niye ya? Görüntü işleme biti, uygulamanızın en küçük kısmıdır. Yazdığın her ne ise, bundan çok eminim. Silverlight'ı bilmiyorum ama Flash'ta "Thumba" ve "EasyPainter" tarafından kullanılan filtreler bir gün içinde oluşturulabilir. ConvolutionFilter, ColorMatrixFilter, DisplacementMapFilter ve BitmapData :: paletteMap hatta basitçe diğer filtreler Flash kutudan çıktı. George tarafından işaret edilen PixelBender kullanılarak herhangi bir ek şey oluşturulabilir. Çekirdek dili C'nin bir alt kümesidir, bu nedenle klasik filtreleri taşımak çok zaman alıcı olmamalıdır. Ayrıca simya (Henüz Flash Player 10'u hedefleyen bir LLVM arka planı) henüz kararlı olmasa da araştırmaya değer bir seçenek olacaktır.

Uygulamanızın en büyük kısmı çok sayıda GUI tasarımı, GUI uygulaması, İş Mantığı vb. Olacak. Flash, basit ancak makul derecede hızlı görüntü manipülasyonu olduğunda ve Flex framework ve MXML ile verimli bir şekilde güçlü bir araca sahip olduğunuzda gerçekten harika Hemen hemen her platform için çok sayıda sunucu çözümü ile çok iyi bir şekilde çalışabilen uygulamanızın GUI'sini oluşturun.

Ayrıca Flash'ın, Flash platformunu diğer platformlara sunmak için çapraz derleme araçlarıyla birlikte tonlarca öğretici, kod pasajı, kütüphane ve çerçeve ve büyük bir ekosistem sunan harika ve aktif bir topluluğu var. Flash CS5ya da belirtilen Elips). Anlayamıyorum, izlenimin olduğu yerde, Flash platformunun geliştirme araçları yok. .NET paketindeki fark, çok sayıda satıcı tarafından sağlanmış olmasıdır. Yaklaşan Flash Player 10.1 zaten George tarafından işaret edilmişti, ama asla daha az değil, stresten geçmek istedim, ki bu da plattformun birçoğunun eskimiş olmasını sağladı.

Son ama en az değil, belirtmek isterim haXe. Tarafından sağlanan aynı API'yi kullanarak SWF'ye, ancak C ++'ya derlemeyi sağlar. NME, için iPhone'u hedefle. Ayrıca bir android arka ucunda devam eden çalışmalar var. Önümüzdeki 4-5 ay içinde lanse etmek için oynamayacaksanız, bu kesinlikle bir seçenektir.


3
2018-02-10 15:06



Üzgünüm - burada MonoTouch'ın sözünü görmedim. Harika nokta! ;) - David Cuccia


Diğer cevaplara ek olarak, başka bir seçenek de karma bir çözüm olabilir. Örneğin, hedef kitlenizin çoğunluğu için Flash / Silverlight kullanın ve desteklemeyenler için sunucu tarafı işlemeyi kullanın (veya iP [hone | ad] için yerel bir uygulama oluşturabilirsiniz)

Hedeflediğiniz cep telefonlarının görüntü işleminizin ne kadar karmaşık hale geldiğine bağlı olarak yetersiz işlem gücüne sahip olabileceği için böyle bir şey yapmanız gerekebilir.

Tabii ki hala sunucunuzu yükseltme seçeneğiniz var, ancak şu anda indirimli iseniz, muhtemelen çok daha ucuz Bir istemci tarafı çözümü oluşturma / dağıtma / test etme geliştirme süresini harcamadan daha fazla.


2
2018-02-04 10:17





Tüm Silverlight etkin istemciler ve Silverlight olmayan istemciler için Silverlight'ı kullanabilirsiniz, görüntü işleme sunucusu tarafı. Silverlight kodu C # olduğu için, (çoğunlukla) aynı kodun Silverlight ve Silverlight olmayan (yani sunucu) çalışması için derlemesini ikiye katlayabilirsiniz. Bu size her iki dünyanın en iyisini sağlar.


2
2018-02-10 17:16





Yeniden yazmanız gereken "tüm bu kod" hangi dilde olduğunu söylemezsiniz. Javascript için yarı otomatik çeviri pratik olabilir mi?

Belki de CraigS'nin önerdiği gibi sunucu tarafında başlayabilir ve daha sonra işlevleri bir kerede yeniden yazmak yerine zaman içinde istemciye taşıyabilirsiniz.


1
2018-02-04 06:13



Bahsedildi. "çok fazla kod .NET'te" (C # veya başka bir şey olsun, küçük bir nokta). Yeniden yazımlar, büyük olasılıkla, .NET Temel Sınıf Kitaplıklarındaki öğeler için yeni kod gerektirecektir. Javascript'te mevcut değil - moogs


Kontrol ettin mi editör arasında Pixlr.com ?
Onların bir göz atın API de ..


1
2018-02-10 17:06