Zapis do obiektu i obsługa wielowątkowości

0

Chciałbym pobierać obrazki z kam internetowej i zapisywac na dysku jęsli tylko różnice zdjecia obecnego i poprzedniego są większe niż określony próg

Nie wiem jak zapisać każdy obraz z kamery do osobnego obiektu i obsługiwac je w osobnych wątkach?

kod: http://wklej.org/id/1994775/

0

Chciałbym pobierać obrazki z kam internetowej i zapisywac na dysku jęsli tylko różnice zdjecia obecnego i poprzedniego są większe niż określony próg

Nie wiem jak zapisać każdy obraz z kamery do osobnego obiektu i obsługiwac je w osobnych wątkach?

To jest jakas appka webowa ? wielu userow, wiele kamer na raz ? bo jak jestes jedna kamera to gdzie ty tu widzisz problem ?

0

nie odpowiadaj w komentarzach ... chcesz porownywać obraz z wielu kamer (a, b, c, d) z jakims (jednym) zdjęciem ?

0

Z każdej kamery pobierany jest zrzut co 10s, i jesli różnica obrazka pobranego jest większa o określony próg od zdjęcia zapisanego poprzednio to zapisuje to zdjęcie również do zadanej ściezki a jesli mniejsza to nie zapisuje. Do każdej kamery osobno, zapis jest w róznych folderach

0

Czyli nie ma żadnego problemu z jakimś udostępnianiem danych między wątkami. Jaki masz w takimi razie problem ? czego nie wiesz ?

0

Jak już pisałem dopiero sie ucze ...

Nie wiem jak zapisać każdy obraz z kamery do osobnego obiektu i obsługiwac je w osobnych wątkach?

1

Jedną z opcji może być rozszerzenie klasy Camera, aby można było dla każdego obiektu tego typu ustawić skąd ma pobierać obraz (z której kamery).
Następnie tworzysz 4 obiekty tej klasy, każdemu ustawiasz źródło obrazu i odpalasz. Coś w tym stylu:

 
void main(...) {
Camera cam1 = new Camera();
cam1.setSource(/*tu podajemy info skąd ma brać obraz*/);

Camera cam2 = new Camera();
cam2.setSource(/*tu podajemy info skąd ma brać obraz*/);

Camera cam3 = new Camera();
cam3.setSource(/*tu podajemy info skąd ma brać obraz*/);

Camera cam4 = new Camera();
cam4.setSource(/*tu podajemy info skąd ma brać obraz*/);

cam1.start();
cam2.start();
cam3.start();
cam4.start();

To tylko idea. Przy większej ilości obiektów Camera można je trzymać w jakimś kontenerze.
Można też rozdzielić wątki pobierające obrazy z kamery i te analizujące i zapisujące każdy obraz.

0

W moim przykładzie stworzone są 4 obiekty w metodzie main(). Ty zrobiłeś to w run(). Czyli w każdym przebiegu pętli w metodzie run tworzysz nowy wątek. Moją propozycją było utworzenie 4 obiektów Camera w main(). Metodę run() zmieniłbym tak, aby każda pobierała plik z jednego źródła co dany odstęp czasu, analizowała obraz i go zapisywała. Wtedy nie tworzysz nowych wątków tylko jeden wątek jest odpowiedzialny za pracę z jednym źródłem.

0

Jak porównać dwa obrazy za pomoca funkcji :

boolean bufferedImagesEqual(BufferedImage img1, BufferedImage img2)

0

tzn. miałbym utworzyć przykładowo dla 3 obiektów 3 metody run

Nie. Robisz np. tak (pisane bez IDE, więc pewnie się nie kompiluje, ale chodzi o ideę):

class Camera extends Thread {
private String source;
private boolean isRunning = true;

public Camera( String source) {
    this.source = source;
}

public void stop() {
    isRunning = false;
}

public void run() {
    while(isRunning) {
        //pobranie obrazka ze ścieżki podanej w "source"
        //porównianie go z poprzednim
        //ewentualne zapisanie obrazka    
}

public static void Main() {
Camera cam1 = new Camera("http://kamery.topr.pl/moko/moko_01.jpg"); 
Camera cam2 = new Camera("http://kamery.topr.pl/moko_TPN/moko_02.jpg"); 
Camera cam3 = new Camera("http://kamery.topr.pl/stawy2/stawy2.jpg");
 
cam1.start();
cam2.start();
cam3.start();

//tu czekamy na np. naciśnięcie Enter, żeby zakończyć program
cam1.stop();
cam2.stop();
cam3.stop();

cam1.join();
cam2.join();
cam3.join();
} //end of class Camera
 

Jak porównać dwa obrazy za pomoca funkcji

Nie mam pojęcia. Nigdy nie bawiłem się w porównywanie obrazów, ale przypuszczam, że cywilacja znalazła już i na to sposób :) Uncle G pewnie pomoże.

1 użytkowników online, w tym zalogowanych: 0, gości: 1