我正在python上编写一个Frame服务器程序,它从java客户端接收帧信息。它实际上是手机上的一个Android代码,它将相机帧流式传输到python服务器。
然后python服务器处理框架,这要归功于opencv,它应该通常显示一个窗口,其中包含手机摄像头所看到的灰度表示。
就这样吧 手机摄像头=>手机上的java-android代码(使用java套接字)=> python socket receiver => opencv窗口显示相机正在看什么。
但是,这不显示任何opencv窗口并返回init done opengl support available
。
我的帧是176x144(像素总数是25344)。这些像素从Java发送到python。
我的java套接字在与(android)UI线程相同的线程上发送此信息我应该为此实现异步代码,但我是一个菜鸟。
我怀疑性能可能是一个问题,但我不知道该怎么做,因为没有明显的错误。
但是,我真的想要一种方法来查看相机从opencv窗口看到的内容。
我的代码如下。谢谢你的帮助。
import socket
import time
import cv2
import numpy as np
from struct import unpack
def showImage(windowName,array):
cv2.imshow(windowName,array)
def server(host,port):
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(5)
c,addr=s.accept()
while(1):
data=c.recv(4)
width=unpack('>I', data[0:4])[0]
data2=c.recv(4)
height=unpack('>I', data2[0:4])[0]
totalpixels=width*height
data3=recvall(c,totalpixels)
frame=np.fromstring(data3,dtype=np.uint8)
frame=frame.reshape(height,width)
cv2.setUseOptimized(True)
cv2.namedWindow("Driver", cv2.WINDOW_NORMAL)
cv2.imshow("Driver",frame)
cv2.waitKey(0)
cv2.destroyAllWindows()
return data
def recvall(sock,n):
data=''
while len(data)<n:
chunk=sock.recv(n-len(data))
if not chunk:
return None
data+=chunk
return data
if __name__=="__main__":
server('localhost',9999)