Отображение видеопотока с Raspberry Camera на Java-клиент - PullRequest
0 голосов
/ 11 мая 2019

Я делаю робота с малиной.Моя цель:

  1. Кодирование сервера в Rasbperry с использованием Python, который захватывает изображение с камеры и отправляет данные через сокет
  2. Кодирует клиент на ПК с использованием Java, который считывает данные из сокета ипоказать его в окне JavaSwing

Так что я могу видеть в режиме реального времени, что видит Raspberry Camera.

Это код Python, работающий на Raspberry, то есть на Сервере

import socket
from time import sleep
import picamera

ADDRESS = '192.168.1.XXX'  # My Address - SERVER
PORT = YYYY        # Port to listen on (non-privileged ports are > 1023)

camera = picamera.PiCamera()
camera.resolution = (640, 480)
camera.framerate = 24

server = socket.socket()  
server.bind((ADDRESS, PORT)) 
print("In attesa di connessioni...")
server.listen(0)   

connection, addr = server.accept() 
client = connection.makefile('wb') 
print('Connected to', addr)

try:

   camera.start_recording(client, format='h264')
   print("Recording started...")
   camera.wait_recording(30)
   camera.stop_recording()
   print("Recording stopped...")

finally:
   client.close()
   server.close()
   camera.stop_preview()
   print("Connection closed")

Это код, выполняющийся на моем компьютере в Java и являющийся клиентом.

public class ConnectionRaspberry {

static String serverAddress = "192.168.1.XXX";  //Raspberry
static String clientAddress = "192.168.1.ZZZ"; //PC
static int serverPort = YYYY;
static int clientPort = YYYY;
static Socket socket;

public static void main(String[] args) {

    String msg = null;

    try{
        socket = new Socket( InetAddress.getByName(serverAddress), serverPort );
        System.out.println("Connesso al Server: "+socket.getInetAddress()+":"+socket.getPort() );

        InputStream in = socket.getInputStream();
        PrintWriter out = new PrintWriter( socket.getOutputStream(), true );

        while(true) {
              byte[] data = new byte[1024];
                int count = in.read(data);
                ByteBuffer bb = ByteBuffer.allocate(data.length);
                bb.put(data);
                System.out.println("RECEIVED: "+Arrays.toString(data));
                if( count == 0 ) break;             
        }
        System.out.println("READED");
        out.close();
        socket.close();

    } catch( IOException ioe ){ System.out.println(ioe); }

}

Я могу получать данные из Raspberry, но не знаю, как отобразить полученные данные.Я нахожу в Интернете информацию о JCodec, Grab и других решениях, но никто не может адаптироваться.

В качестве альтернативы я мог бы использовать Java также на Raspberry, но мне нужна библиотека для управления камерой.Я написал аналогичный код для сервера, используя

"com.hopding.jrpicamera.RPiCamera".

Файл "Test.java".Я использую Geany как JavaIDE.

public static void main(String... args){
    System.out.println("Avvio Applicazione");
    //new Test().avvia();

    try{
        RPiCamera camera = new RPiCamera();
        camera.setToDefaults();
        camera.takeStill("EST_IMAGE.jpeg");
        BufferedImage image = camera.takeBufferedStill();
        ImageIO.write(image, "jpg", new File("out.jpg") );
    }catch(Exception e){};
}

К сожалению, этот код не работает: камера все равно не делает снимок.

Я хотел бы показать видео в окне JavaSwing, обновленное вручную илиесли эта идея не подходит, не стесняйтесь предлагать мне.

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...