Katna 使用机器学习自动执行视频关键/最佳帧提取、视频压缩等无聊且容易出错的任务,以及手动耗时的图像裁剪和调整大小任务。
简而言之,如果您有以下任务,您可能需要考虑使用 Katna 库:
您有一个或多个视频想要压缩到更小的尺寸。 (例如,假设您的视频大小为 1 GB,但您希望将其压缩得尽可能小。)
您想要将多个图像智能地调整为目标分辨率。 (例如 500x500、1080p (1920x1080) 等)
您想要从输入图像中提取特定纵横比的裁剪,例如 4:3。 (例如,从分辨率为 1920x1080 的图像(16:9 宽高比图像)中获取宽高比为 1:1 的裁剪)
您想要将视频大小调整为特定的宽高比,例如 16:9(横向),或者 1:1(方形)。请注意,此功能目前处于实验阶段,需要额外编译和配置 google mediapipe 库。
Katna分为两个模块
该模块处理关键帧提取和视频压缩的任务。
关键帧被定义为视频流的代表性帧,这些帧提供了视频内容的最准确和最紧凑的摘要。
帧提取和关键帧提取的选择标准
视频压缩使用 ffmpeg 库进行处理。有关详细信息,请参阅 Katna.video_compressor 模块部分。
自 Katna 0.8.0 版本以来,我们在 Google Mediapipe 项目的帮助下将智能调整大小功能扩展到视频。要了解更多信息,请参阅文档 [使用 Katna 进行视频智能调整大小] (https://katna.readthedocs.io/en/latest/understanding_katna.html#katna-video-resize)。请注意,此功能是可选的实验性功能。并且可能会在以后的版本中被删除/修改。此外,您还需要安装 Google 的 Mediapipe 库,特别是 autoflip 二进制文件才能正常工作。请参阅链接了解如何安装和配置与 katna 一起使用的 mediapipe。
该模块处理与智能裁剪和图像调整大小相关的任务。
智能图像裁剪的方式是,模块识别最佳部分或人们更关注的区域,并在裁剪图像时解释此信息。
作物提取和选择标准
类似于智能裁剪 Katna 图像模块支持智能图像调整大小功能。给定输入图像,如果输入图像和目标图像的长宽比相同,则可以通过简单的调整大小将图像大小调整为目标分辨率。如果宽高比与智能图像调整大小不同,将首先以目标分辨率裁剪最大的优质裁剪,然后以目标分辨率调整图像大小。这可确保调整图像大小而不会实际倾斜输入图像。请注意,如果输入和输出图像的宽高比不同,katna image_resize 可能会导致图像内容丢失
支持的视频和图像文件格式############################################
支持所有主要视频格式(如 .mp4、.mov、.avi 等)和图像格式(如 .jpg、.png、.jpeg 等)。
更多选择功能正在开发中
安装git
安装 Anaconda 或 Miniconda Python
打开终端
从这里克隆存储库 https://github.com/keplerlab/Katna.git
将目录更改为克隆存储库的目录
$cd path_to_the_folder_repo_cloned
如果您使用的是 anaconda python 发行版,请创建一个新的 anaconda 环境
conda create --name katna python=3.7
source activate katna
运行设置:
python setup.py install
自 Katna 版本 0.4.0 起,Katna 视频模块经过优化,可以使用 python 多处理模块进行多处理。由于windows中多处理的限制,为了在windows系统中安全导入主模块,请确保程序的“入口点”包裹在name == ' main ':中,如下所示:
from Katna.video import Video
if __name__ == "__main__":
vd = Video()
# your code
请参阅 https://docs.python.org/2/library/multiprocessing.html#windows 了解更多详细信息。
如果输入图像非常大(大于 2000x2000 ),则执行自动智能裁剪可能需要很长时间。如果遇到此问题,请考虑将 down_sample_factor 从默认 8 更改为更大的值(例如 16 或 32 )。这将显着减少处理时间。
如果您看到“AttributeError:模块‘cv2.cv2’没有属性‘显着性’”错误。通过运行命令“python -m pip uninstall opencv-contrib-python”卸载 opencv-contrib,然后再次通过运行命令安装它
python -m pip install opencv-contrib-python
如果您看到“FileNotFoundError:未找到 freeze_east_text_detection.pb 文件”。打开 python shell 并执行以下命令。
from Katna.image_filters.text_detector import TextDetector
td = TextDetector()
td.download()
在 Windows 上,如果使用 anaconda 安装,请确保 anaconda 具有管理员权限,因为在安装某些模块时,它会因写入权限而失败。
如果出现“运行时错误:找不到 ffmpeg exe”。在系统上安装 ffmpeg,和/或将 IMAGEIO_FFMPEG_EXE 或 FFMPEG_EXE 环境变量设置为 ffmpeg 二进制文件的路径。通常 ffmpeg 是使用 imageio-ffmpeg 包安装的,检查site-packages文件夹中的imageio_ffmpeg-*.egg文件夹,binaries 文件夹中应该有一个 ffmpeg 文件,检查该文件是否具有正确的读取/可执行权限集,并另外设置其路径到环境变量。
在 Python 3.6 和 3.7 上运行批量视频关键帧提取时,Katna 0.8.2 及更低版本中存在已知的内存泄漏问题,这是仅在 Python 3.6 和 3.7 中观察到的多处理错误。并在 katna 0.9 及以上版本中修复。如果您在大量视频上运行关键帧提取代码并遇到内存问题,请请求您将 katna 版本升级到 0.9 或更高版本。如果您仍然想使用旧版本的 katna,请考虑将 python 版本升级到 3.8 或更高版本。
我们添加了编写器框架来处理来自 Katna 视频和图像模块的数据。此版本还修复了此问题和此问题报告的内存泄漏问题。
video.extract_video_keyframes 和 video.extract_video_keyframes_from_dir 需要额外的 writer 对象。默认情况下,KeyFrameDiskWriter 可以从 Katna.writer 模块中使用。 Writer框架可以根据需求进行扩展。
image.crop_image 和 image.crop_image_from_dir 需要额外的 writer 对象。默认情况下,ImageCropDiskWriter 可从 Katna.writer 模块中使用。 Writer框架可以根据需求进行扩展。
请参阅此处更新示例的文档:链接
此错误修复版本修复了此问题:链接
修复了在极少数情况下使用 ffmpeg 分割视频不可读并引发异常的问题
使用 Google 的 mediapipe Autoflip 代码示例添加了对自动裁剪/调整视频大小的实验性支持。
修复了 image_modulecrop_image 和crop_image_from_dir 方法返回不正确规格作物的错误。
Katna.video 模块中添加了对视频压缩的支持。
Katna.image 模块中添加了对智能图像调整大小的支持。
在 0.5.0 版本中,我们更改了用于关键帧提取的 Katna.video 模块内部的一些公共函数的名称,