Wpis z mikrobloga

Potrzebuję napisać program (najlepiej w #java), który analizuje zapis wideo i reaguje na jego zmiany.
Dla przykładu: Przypuśćmy, że mam plik wideo, na którym nagrana jest sygnalizacja świetlna. I teraz program ma analizować zapis wideo i zareagować na zmianę światła z zielonego na czerwone. Dla ułatwienia kamera jest statyczna.
Proszę abyście mi napisali jakieś słowa klucze, jakiś punkt zaczepienia jak to można zrobić, tak abym mógł poszukać w necie więcej informacji.
#programowanie
  • 22
@LazyInitializationException: nie nadaje się bo nie umie w AVX i akcelerację na GPU, a hotspot Javy ma siłę optymalizacji kodu na poziomie GCC z okolic roku 2000. Java, w przeciwieństwie do C#, nie umie nawet nadal w struktury i tablice struktur bez narzutu obiektowego, więc jak zrobisz klasę reprezentującą piksel i wrzucisz do tablicy aby zrobić bitmapę to zajmie to 10x więcej RAMu i iterowanie po tym będzie 10x powolniejsze niż
@LazyInitializationException: nie, nie wszystko, ale akurat przetwarzanie grafiki i w ogóle wykonywanie jakiegokolwiek kodu obliczeniowego to nie jest mocna strona Javy. To jest język dobry do pisania niewymagających apek biznesowych / crudów, takie trochę lepsze VB / PHP.
@horus666: Nie no masz, rację, myliłem się. Java jest dobra w grafice i kodzie obliczeniowym, więc od 20 lat pisze się w niej wszystkie gry AAA. Np. taki CyberPunk czy Wiedźmin, wszystko napisano w Javie... a nie czekaj....
@Krolik: Chyba nie wiesz jakie możliwości daje pakiet nio i korzystanie z bibliotek implementowanych jako rozszerzenia natywne (takich jak choćby LWJGL, w którym przecież pisany był Minercraft). Poza tym wiem jaka jest wydajność Javy bo sam trochę w niej pisałem i napisałem grę z rzutem izometrycznym, która chodziła płynnie bez praktycznie żadnych optymalizacji, co w porównaniu np z Pythonem było poprawą rzędu tysięcy. Może i Java je więcej pamięci ale nie
będzie 10x dłuższa też jest nieprawdziwy ponieważ wielkość struktury nie ma związku z czasem iteracji (w Javie wszystkie prawie obiekty są implementowane jako wskaźniki i tak też się odbywa iteracja po nich - iterator jest wspólnym interfejsem kolekcji w Javie).


@horus666: dostęp do N obiektów za pomocą wskaźników będzie zawsze wielokrotnie wolniejszy niż dostęp do obiektów ułożonych w jednej płaskiej tablicy. Oczywiście sama iteracja może i będzie szybka, ale to był
@Krolik: Ale co z tego? OpenCV dla Javy jest rozszerzeniem natywnym pisanym w C. A OP wyraźnie zaznaczył, że potrzebuje czegoś, co będzie działać i nie musi działać "w czasie rzeczywistym", bo światła nie zmieniają się co 16milisekund. Poza tym widziałem, że nawet w Pythonie OpenCV przy rozpoznawaniu twarzy działa całkiem sprawnie. O czym Ty w ogóle piszesz? Bo naprawdę, jak mam się kłócić z kimś o zawartości cukru w cukrze
@horus666: ok, skoro OP chce korzystać tylko z bibliotek natywnych jak OpenCV to po cholerę robić to w Javie? To nie żadna Java wtedy przetwarza obrazy a kod natywny napisany w C++, więc twierdzenie ze Java się nie nadaje do przetwarzania obrazów nadal pozostaje prawdziwe. Jako glue language do bibliotek natywnych też nadaje się słabo, są języki w których kod natywny wywołuje się dużo łatwiej i szybciej. Zdecydowanie łatwiej i lepiej
@Krolik: nie zgadzam się z Tobą. Java jest bardzo wydajnym językiem (wiem to z własnego doświadczenia) i przede wszystkim znacznie prostszym językiem niż C++. Nie każdy musi znać C++. Więc ani lepiej, ani łatwiej.
i przede wszystkim znacznie prostszym językiem niż C++.


@horus666: to stereotyp, tak było kiedyś, ale teraz Java jest bardzo skomplikowanym językiem, bo z każdą wersją dodają do niej nowe rzeczy. Java jest już bardziej skomplikowana niż Scala.

Praca z bibliotekami natywnymi w Javie jest trudniejsza niż z tymi samymi bibliotekami z C++, bo Java nie ma automatycznego zarządzania zasobami, więc pamięć zaalokowaną natywnie musisz sprzątać ręcznie, a w C++ miałbyś automatycznie.