我正在用Raspberry制作机器人。 我的目标是:
所以我可以实时看到Raspberry Camera看到的东西。
这是在作为服务器的Raspberry上运行的Python代码
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 PC上运行的代码,它是客户端。
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和其他解决方案的信息,但似乎没人适应。
或者,我也可以在Raspberry上使用Java,但是我需要一个库来管理摄像机。我使用
为服务器编写了类似的代码“ 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窗口上显示视频,手动刷新,或者如果这个想法不好,请随时向我建议。
非常感谢。