How to connect DVR camera in Java?

Asked

Viewed 1,928 times

6

I’m having a question, I’ve searched the internet but I can’t find anything consistent: how to connect with a DVR camera (not IP camera) using Java?

I already use Opencv and can connect on IP camera. It would be possible to connect Opencv with DVR?

Below is a code that I found in Stackoverflow in English and adapted. However, the line while((bytesRead = s_in.read()) > 0) does not print any response. Thus, I cannot render any image on the screen.

public class ConectaDVR {

    Socket s = new Socket();

    public void conecta() throws Exception {
        Authenticator.setDefault(new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                System.out.println("Authenticatting...");
                PasswordAuthentication p = new PasswordAuthentication("admin", "123456".toCharArray());
                return p;
            }
        });

        String host = "187.45.142.191"; //192.168.80.107
        PrintWriter s_out = null;
        BufferedReader s_in = null;

        try {
            s.connect(new InetSocketAddress(host, 9000));
            System.out.println("Is connected? : " + s.isConnected());

            s_out = new PrintWriter(s.getOutputStream(), true);
            s_in = new BufferedReader(new InputStreamReader(s.getInputStream()));

        } catch (UnknownHostException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }

        int bytesRead = 0;
        System.out.println("Reading... \n");
        System.out.println();
        while ((bytesRead = s_in.read()) > 0) {
            System.out.println(s_in.readLine());
        }
        System.out.println("Done");
    }

    public BufferedImage getBufferedImage() {

        BufferedImage bufImage = null;
        try {

            InputStream in = new ByteArrayInputStream(IOUtils.toByteArray(s.getInputStream()));
            bufImage = ImageIO.read(in);
        } catch (Exception ext) {
            ext.printStackTrace();;
        }
        BufferedImage bi = bufImage;
        ImageIcon ii = null;
        ii = new ImageIcon(bi);
        Image newimg = bi.getScaledInstance(320, 220, java.awt.Image.SCALE_SMOOTH);
        ii = new ImageIcon(newimg);
        Image i2 = ii.getImage();
        bufImage = new BufferedImage(i2.getWidth(null), i2.getHeight(null), BufferedImage.SCALE_SMOOTH);
        bufImage.getGraphics().drawImage(i2, 0, 0, null);
        return bufImage;
    }

}
  • 3

    You might want to provide technical input on the problem and share your research results. Otherwise, your chances of getting an answer here on the site will be limited to people who have done exactly the procedure you are looking for, that is, very limited chances of getting an answer. Enjoy and make a [tour] and check out the guide [Ask].

  • You have made progress in solving your problem?

  • Could you tell me the model of the camera? You can connect it with telnet?

  • The question is kind of old, but as it came up, it would be nice to define what it is you call "DVR Camera". DVR is usually the Digital Video Recorder, the recording device, not the camera itself. Which, by the way, are usually analog, as opposed to the IP cameras used in the NVR. There may still be an interesting answer if you have more details.

1 answer

-1

Yes you can connect Opencv with DVR camera in Java.

Here is an example code that is working to connect :

package opencvdemo;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.highgui.VideoCapture;
import org.opencv.imgproc.Imgproc;

public class VideoStream
{
    public static void main(String args[]) throws InterruptedException
    {
        System.out.println("opencv start..");

        // Load native library
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        VideoCapture camView=new VideoCapture();

        camView.open(0);

        if(!camView.isOpened())
        {
            System.out.println("Camera Error..");
        }
        else
        {
            System.out.println("Camera successfully opened");
        }

        videoCamera cam=new videoCamera(camView);

        //Initialize swing components
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        frame.add(cam);
        frame.setSize(1080,720);  
        frame.setVisible(true);

        while(camView.isOpened())
        {
            cam.repaint();
        }
    }        
}

@SuppressWarnings("serial")
        class videoCamera extends JPanel
{
    VideoCapture camera; 

    public videoCamera(VideoCapture cam) 
    {
        camera  = cam; 
    }

    public BufferedImage Mat2BufferedImage(Mat m)
    {
        int type = BufferedImage.TYPE_BYTE_GRAY;
        if (m.channels() > 1)
        {
            type = BufferedImage.TYPE_3BYTE_BGR;
        }
        int bufferSize = m.channels() * m.cols() * m.rows();
        byte[] b = new byte[bufferSize];
        m.get(0, 0, b); // get all the pixels
        BufferedImage img = new BufferedImage(m.cols(), m.rows(), type);
        final byte[] targetPixels = ((DataBufferByte) img.getRaster().getDataBuffer()).getData();
        System.arraycopy(b, 0, targetPixels, 0, b.length);
        return img;
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Mat mat = new Mat();

        if( camera.read(mat))
        {
            System.out.print("IMAGE");
        }

        BufferedImage image = Mat2BufferedImage(mat);

        g.drawImage(image,10,10,image.getWidth(),image.getHeight(), null);
    }
    public Mat turnGray( Mat img)
    {
        Mat mat1 = new Mat();
        Imgproc.cvtColor(img, mat1, Imgproc.COLOR_RGB2GRAY);
        return mat1;
    }
    public Mat threash(Mat img)
    {
        Mat threshed = new Mat();
        int SENSITIVITY_VALUE = 100;
        Imgproc.threshold(img, threshed, SENSITIVITY_VALUE,255,Imgproc.THRESH_BINARY);
        return threshed;
    }
}

In case of error "Camera error...",there is usually solution in these two options :

1º Download the Vlcj library in this link and put in your project and run.

2nd Interchange opencv_ffmpeg.dll in "c: opencv build x86 vc10 bin".

Also take a look at open-source DVR projects for Java in this link.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.