public class InitializeCamera {
/*
Initilize the photo grabber
*/
static OpenCVFrameGrabber grabber;
CvCapture capture;
public static int CameraResolutionX;
public static int CameraResolutionY;
public static IplImage capturedStream=null;
public static FrameRecorder recorder=null;
public static int CameraId;
static{
CameraResolutionX=Integer.parseInt(ConfigXmlDTO1.getCameraResolutionX().trim());
CameraResolutionY=Integer.parseInt(ConfigXmlDTO1.getCameraResolutiony().trim());
CameraId=Integer.parseInt(ConfigXmlDTO1.getCameraId().trim());
grabber=new OpenCVFrameGrabber(CameraId);
grabber.setFrameRate(15);
grabber.setImageHeight(CameraResolutionY);
grabber.setImageWidth(CameraResolutionX);
try {
grabber.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public static int getGrabberImageWidth()
{
return grabber.getImageWidth();
}
public static int getGrabberImageHeight()
{
return grabber.getImageHeight();
}
public static IplImage getStream() {
try {
capturedStream=grabber.grab();
} catch (Exception e) {
e.printStackTrace();
}
return capturedStream.clone();
}
public static void flushGrbber()
{
try {
grabber.flush();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void restartGrabber()
{
try {
grabber.restart();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void stopGrabber(){
try {
grabber.flush();
grabber.stop();
grabber.release();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void releaseImage()
{
capturedStream.release();
}
public static void releaseGrabber()
{
try {
grabber.release();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
ObjectProperty<Image> imageProperty=new SimpleObjectProperty<Image>();
@FXML ImageView camerapreview;
public void showLiveStream() {
carryImagePreview=true;
Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
while (carryImagePreview) {
long start = System.nanoTime();
try {
if ((grabbedFrame = InitializeCamera.getStream()) != null) {
final BufferedImage bimage = grabbedFrame
.getBufferedImage();
imgCnt++;
long now = System.nanoTime();
if (lastReportTime != -1
&& now - lastReportTime >= ONE_SECOND_IN_NANOS) {
videoFps = ((double) imgCnt * ONE_SECOND_IN_NANOS)
/ (now - lastReportTime);
imgCnt = 0;
lastReportTime = now;
} else if (lastReportTime == -1) {
lastReportTime = now;
}
Platform.runLater(new Runnable() {
@Override
public void run() {
final Image mainiamge = SwingFXUtils
.toFXImage(bimage, null);
imageProperty.set(mainiamge);
}
});
bimage.flush();
}
} catch (Exception e) {
} finally {
long end = System.nanoTime();
long waitTime = interval - (end - start);
if (waitTime > 0) {
LockSupport.parkNanos(waitTime);
}
}
}
InitializeCamera.releaseImage();
grabbedFrame.release();
grabbedFrame=null;
return null;
}
};
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
camerapreview.imageProperty().bind(imageProperty);
}