Java приложения для камеры

Using webcam with a Java application

Before getting struck in a restless time period I determine to put my second post about Java Media Framework. In my previous post I’ve showed how to play audio and video files using this framework.

In this post I’m going to show you how to capture an image and how to record a video using webcam.

Capturing an image

First you need to get a list of devices with the help of CaptureDeviceManager and filter out the first element of that list. Then you can get the visual component of it and use it as the video screen.

Then you have to place all those player control panel and video screen on a frame. After that you allow the program to capture image after a certain time.

After that as in many cases Java has to treat the buffered image. You can save the image in any format you wish, with the help of ImageIO.

Here’s an example code on how to do that.

import java.awt.BorderLayout; import java.awt.Component; import java.awt.Frame; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.io.File; import java.util.Vector; import javax.imageio.ImageIO; import javax.media.*; import javax.media.control.FrameGrabbingControl; import javax.media.format.RGBFormat; import javax.media.format.VideoFormat; import javax.media.util.BufferToImage; /** * * @author BUDDHIMA */ public class WebCam < CaptureDeviceInfo device; MediaLocator ml; Player player; Component videoScreen; public static void main(String args[]) < new WebCam();// create a new instance of WebCam in main function >WebCam() < try < //gets a list of devices how support the given videoformat Vector deviceList = CaptureDeviceManager.getDeviceList(new RGBFormat()); System.out.println(deviceList.toString()); //gets the first device in deviceList device = (CaptureDeviceInfo) deviceList.firstElement(); ml = device.getLocator(); player = Manager.createRealizedPlayer(ml); player.start(); videoScreen = player.getVisualComponent(); Frame frm = new Frame(); frm.setBounds(10, 10, 900, 700);//sets the size of the screen // setting close operation to the frame frm.addWindowListener(new WindowAdapter() < public void windowClosing(WindowEvent we) < System.exit(0); >>); //place player and video screen on the frame frm.add(videoScreen, BorderLayout.CENTER); frm.add(player.getControlPanelComponent(), BorderLayout.SOUTH); frm.setVisible(true); //capture image Thread.sleep(10000);//wait 10 seconds before capturing photo FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl"); Buffer buf = fgc.grabFrame();//grab the current frame on video screen BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat()); Image img = btoi.createImage(buf); saveImagetoFile(img, "MyPhoto.jpg");//save the captured image as MyPhoto.jpg > catch (Exception e) < System.out.println(e); >> private void saveImagetoFile(Image img, String string) < try < int w = img.getWidth(null); int h = img.getHeight(null); BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); g2.drawImage(img, 0, 0, null); g2.dispose(); String fileType = string.substring(string.indexOf('.') + 1); ImageIO.write(bi, fileType, new File(string)); >catch (Exception e) < >> >

Record a video

Although this code is not functioning too well, you can capture some small video clips using this. I’ve to mention that captureing a video is not that much easy as capturing an image. You have to study about Processors and ProcessorModels in JMF to get the clear idea about that.

import java.util.Vector; import javax.media.*; import javax.media.format.AudioFormat; import javax.media.format.VideoFormat; import javax.media.protocol.DataSource; import javax.media.CaptureDeviceInfo; import javax.media.format.YUVFormat; import javax.media.protocol.FileTypeDescriptor; /** * * @author BUDDHIMA */ public class CamRecorder < static VideoFormat videoFormat; static AudioFormat audioFormat; static CaptureDeviceInfo videoDevice; static CaptureDeviceInfo audioDevice; public static void main(String[] args) < try < Vector deviceList = CaptureDeviceManager.getDeviceList(new YUVFormat()); //get all media devices CaptureDeviceInfo device = (CaptureDeviceInfo) deviceList.firstElement(); //in this computer the only capture device is in=built webcam stays at 0th position Format[] formats = device.getFormats(); //get all formats for (int x = 0; x < formats.length; x++) < if (formats[x] != null && formats[x] instanceof VideoFormat) < videoFormat = (VideoFormat) formats[x]; //take the video format videoDevice = device; >if (formats[x] != null && formats[x] instanceof AudioFormat) < audioFormat = (AudioFormat) formats[x]; //take the audio format //audioDevice = device; >> //create data sources DataSource videoDataSource = Manager.createDataSource(device.getLocator()); deviceList = CaptureDeviceManager.getDeviceList(new AudioFormat(null)); //get all media devices device = (CaptureDeviceInfo) deviceList.firstElement(); DataSource audioDataSource=Manager.createDataSource(device.getLocator()); DataSource[] dArray=new DataSource[2]; dArray[0]=videoDataSource; dArray[1]=audioDataSource; DataSource mixedDataSource = Manager.createMergingDataSource(dArray); //format for output Format[] outputFormats=new Format[2]; outputFormats[0]=new VideoFormat(VideoFormat.YUV); outputFormats[1]=new AudioFormat(AudioFormat.LINEAR); //output type FileTypeDescriptor outputType=new FileTypeDescriptor(FileTypeDescriptor.MSVIDEO); //settingup Processor ProcessorModel processorModel=new ProcessorModel(mixedDataSource, outputFormats, outputType); Processor processor=Manager.createRealizedProcessor(processorModel); //settingup sink DataSource outputDataSource=processor.getDataOutput(); MediaLocator destination=new MediaLocator("file:.\\testcam.avi"); DataSink dataSink=Manager.createDataSink(outputDataSource, destination); dataSink.open(); //start sink + processor Thread.sleep(4000); dataSink.start(); processor.start(); Thread.sleep(4000); dataSink.close(); processor.stop(); processor.close(); > catch (Exception ex) < >> >

Источник

Захват изображения с веб-камеры в Java

Обычно Java не обеспечивает легкий доступ к компьютерному оборудованию. Вот почему нам может быть сложно получить доступ к веб-камере с помощью Java.

В этом руководстве мы рассмотрим несколько библиотек Java, которые позволяют нам захватывать изображения с помощью доступа к веб-камере.

2. JavaCV​

Сначала мы рассмотрим библиотеку javacv . Это Java реализация Bytedeco библиотеки компьютерного зрения OpenCV .

Давайте добавим последнюю зависимость Maven от javacv-платформы в наш pom.xml :

 dependency>   groupId>org.bytedeco/groupId>   artifactId>javacv-platform/artifactId>   version>1.5.5/version>   /dependency> 

Точно так же при использовании Gradle мы можем добавить зависимость от платформы javacv в файле build.gradle:

compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.5.5' 

Теперь, когда мы готовы к настройке, давайте воспользуемся классом OpenCVFrameGrabber для доступа к веб-камере и захвата кадра :

 FrameGrabber grabber = new OpenCVFrameGrabber(0);  grabber.start();   Frame frame = grabber.grab(); 

Здесь мы передали номер устройства как 0 , указав на веб-камеру системы по умолчанию . Однако, если у нас доступно более одной камеры, то вторая камера доступна с номером 1, третья с номером 2 и так далее.

Затем мы можем использовать OpenCVFrameConverter для преобразования захваченного кадра в изображение. Также сохраним изображение с помощью метода cvSaveImage класса opencv_imgcodecs :

 OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();   IplImage img = converter.convert(frame);  opencv_imgcodecs.cvSaveImage("selfie.jpg", img); 

Наконец, мы можем использовать класс CanvasFrame для отображения захваченного кадра:

 CanvasFrame canvas = new CanvasFrame("Web Cam");  canvas.showImage(frame); 

Давайте рассмотрим полное решение, которое обращается к веб-камере, захватывает изображение, отображает изображение в кадре и автоматически закрывает кадр через две секунды:

 CanvasFrame canvas = new CanvasFrame("Web Cam");  canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    FrameGrabber grabber = new OpenCVFrameGrabber(0);   OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();   grabber.start();   Frame frame = grabber.grab();    IplImage img = converter.convert(frame);   cvSaveImage("selfie.jpg", img);   canvas.showImage(frame);    Thread.sleep(2000);   canvas.dispatchEvent(new WindowEvent(canvas, WindowEvent.WINDOW_CLOSING)); 

3. веб-камера-захват ​

Далее мы рассмотрим библиотеку захвата веб-камеры , которая позволяет использовать веб-камеру за счет поддержки нескольких фреймворков захвата.

Во-первых, давайте добавим последнюю зависимость Maven для захвата веб-камеры в наш pom.xml :

 dependency>   groupId>com.github.sarxosgroupId>   artifactId>webcam-captureartifactId>   version>0.3.12version>   dependency> 

Или мы можем добавить захват веб-камеры в build.gradle для проекта Gradle:

compile group: 'com.github.sarxos', name: 'webcam-capture', version: '0.3.12' 

Затем давайте напишем простой пример для захвата изображения с помощью класса Webcam :

 Webcam webcam = Webcam.getDefault();  webcam.open();    BufferedImage image = webcam.getImage();    ImageIO.write(image, ImageUtils.FORMAT_JPG, new File("selfie.jpg")); 

Здесь мы получили доступ к веб-камере по умолчанию для захвата изображения, а затем сохранили изображение в файл.

В качестве альтернативы мы можем использовать класс WebcamUtils для захвата изображения:

 WebcamUtils.capture(webcam, "selfie.jpg"); 

Также мы можем использовать класс WebcamPanel для отображения захваченного изображения в кадре :

 Webcam webcam = Webcam.getDefault();  webcam.setViewSize(WebcamResolution.VGA.getSize());    WebcamPanel panel = new WebcamPanel(webcam);  panel.setImageSizeDisplayed(true);    JFrame window = new JFrame("Webcam");  window.add(panel);  window.setResizable(true);  window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  window.pack();  window.setVisible(true); 

Здесь мы установили VGA в качестве размера представления веб-камеры, создали объект JFrame и добавили в кадр компонент WebcamPanel .

4. Марвин Фреймворк​

Наконец, мы изучим структуру Marvin для доступа к веб-камере и захвата изображения.

Как обычно, мы добавим последнюю зависимость marvin в наш pom.xml :

 dependency>   groupId>com.github.downgoongroupId>   artifactId>marvinartifactId>   version>1.5.5version>   dependency> 

Или, для проекта Gradle, мы добавим зависимость marvin в файл build.gradle :

compile group: 'com.github.downgoon', name: 'marvin', version: '1.5.5' 

Теперь, когда настройка готова, давайте воспользуемся классом MarvinJavaCVAdapter для подключения к веб-камере по умолчанию, указав 0 в качестве номера устройства :

 MarvinVideoInterface videoAdapter = new MarvinJavaCVAdapter();  videoAdapter.connect(0); 

Далее мы можем использовать метод getFrame для захвата кадра, а затем сохраним изображение с помощью метода saveImage класса MarvinImageIO :

 MarvinImage image = videoAdapter.getFrame();   MarvinImageIO.saveImage(image, "selfie.jpg"); 

Также мы можем использовать класс MarvinImagePanel для отображения изображения во фрейме:

 MarvinImagePanel imagePanel = new MarvinImagePanel();  imagePanel.setImage(image);   imagePanel.setSize(800, 600);  imagePanel.setVisible(true); 

5. Вывод​

В этой небольшой статье мы рассмотрели несколько библиотек Java, обеспечивающих легкий доступ к веб-камере.

Сначала мы изучили библиотеку платформы javacv, которая обеспечивает реализацию проекта OpenCV на языке Java. Затем мы увидели пример реализации библиотеки захвата веб-камеры для захвата изображений с помощью веб-камеры. Наконец, мы рассмотрели простые примеры захвата изображений с использованием фреймворка Marvin.

Как обычно, все реализации кода доступны на GitHub .

Источник

Лучшие мобильные Вебкамеры приложения для Java

Первое приложение когда-либо поток шпионские камеры в режиме онлайн и камеры IP на iPhone или IPod Touch от разработчика IM +. Исследуйте ПЛЯЖИ, гаваней, курортам, Вулканы, городов и многие другие сайты! Основные преимущества Смотрите какие-либо публичные веб-камера потоковой.

IPCam Viewer

Позволяет вашему IP-камеры (независимо от производителя), просмотра, управления и записи функциональность для Java с поддержкой мобильных устройств. Вы можете выбрать камеру из списка камеры и нажмите ‘Select’ для просмотра живого корма из камеры. Если камера с PTZ признакам.

SmartCam

превращает мобильный телефон с Bluetooth и камерой в удобный веб-камера готова к использованию ПК Что нового в этой версии: & Мидот; Более высокая поддержка разрешения (320 х 240) на основе реализации Movino из libjpeg кодирования & Мидот; нет Java-версия (jSmartCam) больше не.

Phone BT Webcam

Телефон BT Веб-камера приложение поможет вам превращает ваш телефон Nokia в Bluetooth-компьютер webcam.Check его.

MyWebcam

Нужно ли вам следить за вещами? Настройте свой собственный домашний USB веб-камера с помощью программного обеспечения My WebCam Broadcast. Идеально подходит для домашней безопасности или просто глядя на семью. Вы можете удаленно управлять Logitech и творческих телеметрией.

Mobiscope (Java)

Монитор дома / офиса деятельности в режиме реального времени. Нет необходимости покупать дорогостоящее оборудование. Все что вам нужно это веб-камера на вашем компьютере, чтобы записывать все, что происходит, когда вы уезжаете. Mobiscope может контролировать зону для движения и.

Источник

Читайте также:  Customize select option in css
Оцените статью