Pygame camera 流,同时接收关键输入

Pygame camera Stream with simultanious receiving of key inputs

提问人:F_hoff 提问时间:11/15/2023 最后编辑:nfnF_hoff 更新时间:11/16/2023 访问量:53

问:

我正在为两个树莓派编写代码。一个有摄像头,另一个没有。我正在尝试让带有摄像头的 raspi 在接收键盘输入的同时将摄像头馈送发送到另一个摄像头。没有摄像头的 Raspi 需要接收图像,并能够在接收时发送键盘输入。如果 Camera raspi 收到密钥输入,它还需要发送回复。

Raspis 通过 A 网线连接。

该相机是一个简单的 raspi 凸轮,通过板载相机端口连接,用于带状电缆。

我编写了可以将关键输入从一个 pi 发送到另一个 pi 的代码,以及可以接收相机数据的代码。不过,我不确定如何将它们结合起来。:(

我非常感谢有关如何完成我的程序的一些意见或指示。提前致谢:)

这是我到目前为止的代码:

接收 Pi 的代码是(不带摄像头的 PI):

import socket
import pygame import camera
import pygame
import pygame.image
import sys
from pygame locals import *
import pygame.freetype

host = ""
port = 6001

s = socket.socket(socket.AF.INET, socket_SOCK_STREAM)
s.bind((host,port))
s.listen(1)

pygame.init()
screen = pygame.display.set_mode((640,480))

def input():
   for event in pygame.event.get():
      if event.type == KEYDOWN:
         print("key_down")
         s.send(str.encode("KEYDOWN"))

while 1:
   conn, adress = s.accept()
   message = []
   while True:
      d = conn.recv(1024*1024)
      if not d: break
      else: message.append(d)
   data = b"".join((message))
   image = pygame.image.fromstring(data,(640,480), "RGBX")
   screen.blit(image,(0,0))
   input()


pygame.quit()
server_socket.close() 

发送 pi(带摄像头)的代码为:

import pygame
import pygame.camera
import pygame.image
import sys
from pygame.locals import *
import socket


import pygame.freetype

host = "IP.ADRESS"
port = 6001

pygame.init()
pygame.camera.init()
cameras = pygame.camera.list_cameras()
webcam = pygame.camera.Camera(cameras[0])
webcam.start()
image = webcam.get_image()

def dataTransfer(conn):
    # A big loop that sends/receives data until told not to.
    while True:
        # Receive the data
        data = conn.recv(1024) # receive the data
        data = data.decode('utf-8')
        # Split the data such that you separate the command
        # from the rest of the data.
        dataMessage = data.split(' ', 1)
        command = dataMessage[0]
    
        if command == "KEYDOWN":
            reply = "RECIEVED: KEYDOWN"
            conn.sendall(str.encode(reply))
            print("Data has been sent!")
            conn.close()
            break


while 1:
    image = webcam.get_image()
    data = pygame.image.tostring(image, "RGBX")
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))        
    s.sendall(data)
    dataTransfer(conn)
    s.close()

在运行上面的代码时,我主要遇到了管道破裂的问题。

python 套接字 pygame 树莓派 相机

评论


答: 暂无答案