提问人:F_hoff 提问时间:11/15/2023 最后编辑:nfnF_hoff 更新时间:11/16/2023 访问量:53
Pygame camera 流,同时接收关键输入
Pygame camera Stream with simultanious receiving of key inputs
问:
我正在为两个树莓派编写代码。一个有摄像头,另一个没有。我正在尝试让带有摄像头的 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()
在运行上面的代码时,我主要遇到了管道破裂的问题。
答: 暂无答案
评论