반응형
자바로 웹캠 화면 출력하기!
예전에 했던 프로젝트에 필요해서 찾았었는데 저장 안해놨다가 지금에서야나마 기록하려고 한다.
일단 코드 분석 다시 해야지
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 |
---|