Python PubSub-发布视频帧的最有效方法?
我有一个从视频源生成多个帧的服务(使用OpenCV) 接下来,我将把这些帧编码为字节字符串,并通过Pub/Sub将它们作为一个批发布Python PubSub-发布视频帧的最有效方法?,python,google-cloud-pubsub,Python,Google Cloud Pubsub,我有一个从视频源生成多个帧的服务(使用OpenCV) 接下来,我将把这些帧编码为字节字符串,并通过Pub/Sub将它们作为一个批发布 # Encoding each (opencv) frame _, buffer = cv2.imencode('.jpg', frame) pub_sub.publish(buffer.tobytes()) # PubSub class class PubSub(object): def __init__(self, project_i
# Encoding each (opencv) frame
_, buffer = cv2.imencode('.jpg', frame)
pub_sub.publish(buffer.tobytes())
# PubSub class
class PubSub(object):
def __init__(self, project_id='xxx', topic_name='xxx'):
self.publisher = pubsub_v1.PublisherClient(
pubsub_v1.types.BatchSettings(max_latency=1)
)
self.topic_path = self.publisher.topic_path(project_id, topic_name)
def publish(self, frame_as_bytes):
future = self.publisher.publish(self.topic_path, data=frame_as_bytes)
print(future.result())
print('Published messages with batch settings.')
我的字节帧=大约300kb的数据
但是这里的延迟非常大,如何改进这些操作
更新:
看来opencv编码操作的成本很高:
_, buffer = cv2.imencode('.jpg', frame, encode_param)
我正在我的笔记本电脑上运行这个程序,所以我相信这不会是一个有更多CPU的虚拟机的问题
我添加了以下几行以在编码前减少图像重量:
frame = frame_helper.rescale_frame(frame, scale_percent=40)
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 80]
这比现在快多了
我要用一台更大的机器再做一次测试 您是否确定延迟的来源?是编码吗?发送编辑:延迟来自通过OpenCV进行的帧编码。所以我相信这是因为我在笔记本电脑上运行它。我要用更高的配置来检查。