自动化处理数据
AI 时代大量的数据,带来无限可能的的同时,也给我们带来了更多数据本身和数据应用的挑战。在实际的生产过程中,AI 工程师们需要对数据进行清洗、预处理、训练、测试、部署等一系列的工作,这些工作需要大量的人力和时间,而且往往是重复的。刻行时空平台提供的自动化系统,使用户不再需要手动重复处理数据,只需要构建好数据处理的流程,即可直接调用并输出结果,极大减少了人为操作带来的误差,同时提高了数据处理速度和准确性。
本文以「视频抽帧」为例,讲述如何实现当 MP4 文件上传后,自动完成抽取图片的流程.
准备镜像
在本机启动 Docker 后,开始准备镜像。若未安装 Docker,请参考对应的安装文档
准备镜像文件
- 在本机创建一个文件夹,如:
coScene-auto
- 在文件夹中创建
dockerfile
文件,文件名为:dockerfile
,内容如下:
# 使用 Python 官方镜像作为基础镜像
FROM python:3.9
# 设置工作目录
WORKDIR /app
# 将当前目录下的文件复制到镜像的 /app 目录中
COPY . /app
# 安装所需的依赖库
RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 -y
RUN pip install opencv-python
# 设置环境变量
ENV INPUT_FOLDER=/cos/files
ENV OUTPUT_FOLDER=/cos/outputs
# 运行 Python 脚本
CMD ["python", "script.py"]
- 在文件夹中创建
.py
文件,文件名为:script.py
,内容如下:
import cv2
import os
def extract_frames(input_folder, output_folder):
# 创建输出目录
os.makedirs(output_folder, exist_ok=True)
# 遍历输入文件夹中的所有文件
for file_name in os.listdir(input_folder):
# 检查文件是否是 MP4 格式
if file_name.endswith(".mp4"):
# 构造输入文件路径
input_file = os.path.join(input_folder, file_name)
# 打开视频文件
video = cv2.VideoCapture(input_file)
# 获取视频的帧速率
fps = video.get(cv2.CAP_PROP_FPS)
# 初始化帧计数器
frame_count = 0
# 循环读取视频帧
while True:
# 读取一帧
success, frame = video.read()
# 检查是否成功读取帧
if not success:
break
# 构造输出文件名
output_file = os.path.join(output_folder, f"{file_name}_{frame_count}.jpg")
# 保存帧为图像文件
cv2.imwrite(output_file, frame)
# 增加帧计数器
frame_count += 1
# 释放视频对象
video.release()
print(f"成功提取 {frame_count} 帧图片,保存到 {output_folder}")
# 输入和输出文件夹路径
input_folder = "/cos/files"
output_folder = "/cos/outputs"
# 调用函数提取帧图片
extract_frames(input_folder, output_folder)