我设置了一个管道,在其中将视频实时流式传输到 Kinesis Video Stream (KVS),后者将帧发送到 Amazon Rekognition 进行人脸识别,后者进一步将它们发送到 Kinesis Data Stream (KDS)。最后,KDS 将结果发送给 lambda。
对于已经进行人脸识别的框架,我得到以下格式的JSON:https://docs.aws.amazon.com/rekognition/latest/dg/streaming-video-kinesis-output-reference.html
我的目标是: 使用这个 JSON,我想以某种方式获取 KVS 记录的帧的图像表示。
我尝试过什么:
此 JSON 为我提供了片段编号。
我使用这个片段编号并调用 get_media_for_fragment_list
上面的调用返回一个名为Payload的键作为响应。
我一直在尝试以某种方式将此有效负载渲染为图像。
但是,我每次都无法执行此操作,因为我不知道如何理解此有效负载并对其进行解码。
以下是代码片段。
def getFrameFromFragment(fragment):
client = boto3.client('kinesis-video-archived-media',endpoint_url=data_endpoint_for_kvs)
response = client.get_media_for_fragment_list(
StreamName='kvs1',
Fragments=[
fragment,
]
)
payload = response['Payload']
print(payload.read())
如何使用此负载来获取图像?
我知道 Java 中存在解析器:https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-renderer.html
但是,我想知道 Python 中的解决方案。
如果我的问题陈述错误或没有意义,请随时向我询问有关此问题的更多信息。
感谢您的帮助。 :)
最佳答案
GetMedia 的响应是 MKV 封装格式的流。首先,您需要使用一些从 MKV 格式(https://github.com/vi/mkvparse 或类似格式)中提取帧的 Python 库。接下来,您的流可能会被编码。例如 H264。如果您需要的话,您还需要解码帧以获得图像的实际位图。似乎很少有基于软件的解码器可用于 Python:https://github.com/DaWelter/h264decoder
不过我对这些项目并不熟悉。
关于python - 使用 Python 解析和渲染 Kinesis Video Streams 并获取输入帧的图像表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60912980/