반응형

자바로 웹캠 화면 출력하기!


예전에 했던 프로젝트에 필요해서 찾았었는데 저장 안해놨다가 지금에서야나마 기록하려고 한다.

일단 코드 분석 다시 해야지

Sarxos 라이브러리를 사용했던 것 같은데 아직은 좀 더 찾아봐야겟다.



소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
package webCam;
 
import java.awt.BorderLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.lang.Thread.UncaughtExceptionHandler;
 
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
 
import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamDiscoveryEvent;
import com.github.sarxos.webcam.WebcamDiscoveryListener;
import com.github.sarxos.webcam.WebcamEvent;
import com.github.sarxos.webcam.WebcamListener;
import com.github.sarxos.webcam.WebcamPanel;
import com.github.sarxos.webcam.WebcamPicker;
import com.github.sarxos.webcam.WebcamResolution;
 
/**
 * Proof of concept of how to handle webcam video stream from Java
 * 
 * @author Bartosz Firyn (SarXos)
 */
public class WebcamViewerExample extends JFrame implements Runnable, WebcamListener, WindowListener,
        UncaughtExceptionHandler, ItemListener, WebcamDiscoveryListener {
 
    private Webcam webcam = null;
    private WebcamPanel panel = null;
    private WebcamPicker picker = null;
 
    @Override
    public void run() {
 
        Webcam.addDiscoveryListener(this);
        setTitle("Java Webcam Capture POC");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
 
        addWindowListener(this);
 
        picker = new WebcamPicker();
        picker.addItemListener(this);
 
        webcam = picker.getSelectedWebcam();
 
        if (webcam == null) {
            System.out.println("No webcams found...");
            System.exit(1);
        }
 
        webcam.setViewSize(WebcamResolution.VGA.getSize());
        webcam.addWebcamListener(WebcamViewerExample.this);
 
        panel = new WebcamPanel(webcam, false);
        panel.setFPSDisplayed(true);
 
        add(picker, BorderLayout.NORTH);
        add(panel, BorderLayout.CENTER);
 
        pack();
        setVisible(true);
 
        Thread t = new Thread() {
 
            @Override
            public void run() {
                panel.start();
            }
        };
        t.setName("example-starter");
        t.setDaemon(true);
        t.setUncaughtExceptionHandler(this);
        t.start();
    }
 
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new WebcamViewerExample());
    }
 
    @Override
    public void webcamOpen(WebcamEvent we) {
        System.out.println("webcam open");
    }
 
    @Override
    public void webcamClosed(WebcamEvent we) {
        System.out.println("webcam closed");
    }
 
    @Override
    public void webcamDisposed(WebcamEvent we) {
        System.out.println("webcam disposed");
    }
 
    @Override
    public void webcamImageObtained(WebcamEvent we) {
        // do nothing
    }
 
    @Override
    public void windowActivated(WindowEvent e) {
    }
 
    @Override
    public void windowClosed(WindowEvent e) {
        webcam.close();
    }
 
    @Override
    public void windowClosing(WindowEvent e) {
    }
 
    @Override
    public void windowOpened(WindowEvent e) {
    }
 
    @Override
    public void windowDeactivated(WindowEvent e) {
    }
 
    @Override
    public void windowDeiconified(WindowEvent e) {
        System.out.println("webcam viewer resumed");
        panel.resume();
    }
 
    @Override
    public void windowIconified(WindowEvent e) {
        System.out.println("webcam viewer paused");
        panel.pause();
    }
 
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        System.err.println(String.format("Exception in thread %s", t.getName()));
        e.printStackTrace();
    }
 
    @Override
    public void itemStateChanged(ItemEvent e) {
        if (e.getItem() != webcam) {
            if (webcam != null) {
 
                panel.stop();
 
                remove(panel);
 
                webcam.removeWebcamListener(this);
                webcam.close();
 
                webcam = (Webcam) e.getItem();
                webcam.setViewSize(WebcamResolution.VGA.getSize());
                webcam.addWebcamListener(this);
 
                System.out.println("selected " + webcam.getName());
 
                panel = new WebcamPanel(webcam, false);
                panel.setFPSDisplayed(true);
 
                add(panel, BorderLayout.CENTER);
                pack();
 
                Thread t = new Thread() {
 
                    @Override
                    public void run() {
                        panel.start();
                    }
                };
                t.setName("example-stoper");
                t.setDaemon(true);
                t.setUncaughtExceptionHandler(this);
                t.start();
            }
        }
    }
 
    @Override
    public void webcamFound(WebcamDiscoveryEvent event) {
        if (picker != null) {
            picker.addItem(event.getWebcam());
        }
    }
 
    @Override
    public void webcamGone(WebcamDiscoveryEvent event) {
        if (picker != null) {
            picker.removeItem(event.getWebcam());
        }
    }
}
cs

필요한 라이브러리




캡쳐후 나오는 사진

여러개의 카메라 포트를 가져오고 그 중에서 선택한 카메라를 가져와 화면에 출력해준다.

반응형

'나는요 공부가 좋....은걸... > etc..' 카테고리의 다른 글

자바 웹캠 연동하기 2  (0) 2018.03.22

+ Recent posts