我需要写一个PySpark脚本,以便从mp4文件中读取多个视频,然后在PySpark中处理它。(这4个视频流代表多个RTSP视频流,我将在未来捕获)。
我的第一个方法是使用多处理库并行读取4个视频文件。但是我的这种方法产生了许多与Spark相关的错误,例如“只有一个SparkContext应该在这个JVM中运行”,“Java堆空间(内存不足)"等。
那么,我的问题是,有没有其他方法可以并行读取多个mp4视频文件而不使用多处理库?我最近在Google Bard上搜索了一下,它说我可以直接将视频流重新读取到SparkContext RDD中,如下所示:
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
def video_receiver(iterator):
from cv2 import VideoCapture
while True:
video_path = iterator.next()
cap = VideoCapture(video_path)
while True:
ret, frame = cap.read()
if not ret:
break
yield frame
sc = SparkContext()
ssc = StreamingContext(sc, batchDuration=batch_interval)
video_paths = ['video1.mp4', 'video2.mp4', 'video3.mp4', 'video4.mp4']
video_rdd = sc.parallelize(video_paths)
video_stream = video_rdd.mapPartitions(video_receiver)
字符串
我没有运行脚本在写这个问题的时候,但我怀疑这将工作。如果有人遇到了同样的问题或有任何类型的解决方案,请帮助我在这方面。
1条答案
按热度按时间pjngdqdw1#
我改编了下面的jupyter notebook来展示spark如何进行大规模的视频处理。
https://databricks-prod-cloudfront.cloud.databricks.com/public/4027ec902e239c93eaaa8714f173bcfc/1969271421694072/3760413548916830/5612335034456173/latest.html
你需要在你的conda环境中安装python库。同时确保你已经安装了ffmpeg库:
第一个月
pip install face-recognition
个conda install -c conda-forge opencv
个下载一个包含人脸的
.mp4
视频,根据以下代码执行人脸检测。https://www.videezy.com/free-video/face?format-mp4=true
个pyspark代码:
字符串
输出量:
型