使用python在视频流上绘制边界框

时间:2019-08-09 03:33:59

标签: python amazon-web-services video-streaming amazon-kinesis

我正在使用AWS Kinesis Video Streams将相机流式传输到云上。然后,我使用Sagemaker使用AWS Lambda对其进行分析,该工具会在视频流中返回对象的名称及其坐标。

现在,我想改进自己的Lambda代码(python),以便在运动学视频流上创建边界框。

我的问题是: 1.如何获取视频流? 2.如何使用坐标重叠边界框?我会使用cv2吗? 3.如何将流上传到新流?

我看到一个用Java编写的代码。这是link

1 个答案:

答案 0 :(得分:0)

这是我解决您问题的方法。

1。如何获取视频流?

您可以使用aws boto3库使用GET_MEDIA api来获取视频帧,或者使用KinesisVideoArchivedmedia来获取HLS或DASH流url的流,这似乎可以解决您的问题,但是GET_MEDIA api的开销较小。 boto3 documentation

2。如何使用坐标重叠边界框? 我要使用cv2吗?

您可以使用任何视频渲染库(例如pyav或opencv)来实现。使用opencv执行此操作的代码可在Internet上轻松获得,但您还需要考虑其他挑战,例如AWS Lambda局限性,可用边界框与帧速率的一致性(您需要至少3-4fps的对象检测以及15fps的视频)使其看起来实时)

3。如何将流上传到新流?

如果您想将流上传回Kinesis Video Stream,这是相当困难的,我认为Lambdas不足以完成所有必需的处理。您可以为此目的使用ec2实例。另一个选择是将渲染的视频保存到s3,并具有视频转码服务(例如AWS Mediaconvert或构建自己的视频转码服务),以将渲染的视频转码为HLS或DASH流。可以使用内容交付网络(例如AWS Cloudfront)对s3中保存的HLS或DASH流进行流传输。

希望这会有所帮助。