FFmpeg中基于深度学习模型的图像处理filter:dnn_processing介绍(1)

本文介绍了如何在FFmpeg中使用dnn_processing filter结合TensorFlow实现Sobel边缘检测。通过重新编译FFmpeg以支持TensorFlow库,创建Sobel算子对应的TensorFlow模型,并将模型应用于图像处理,检测边缘。文章还展示了从Python脚本生成模型文件的过程以及使用FFmpeg执行dnn_processing的命令。
摘要由CSDN通过智能技术生成

在FFmpeg中,一开始增加了两个基于深度学习的video filter,分别是用来超分辨率的vf,和用来去除雨点的derain。它们都是对每帧中的内容进行的调整,包括对帧size的改变,用到的算法都是基于深度学习的模型。实际上,相比于这样为每一种功能算法增加一个filter的思路,我们还可以采用另外一种思路,即,设计一个通用的filter,可以用一个filter来普适所有基于深度学习模型的图像处理算法,此即我最近为FFmpeg增加dnn_processing的设想。本想做个全面的介绍,不过感觉缺少大块时间,就拆分介绍,也可以顺便增加篇数活跃一下。

本篇主要介绍如何使用dnn_processing来完成针对灰度图的sobel算子的调用,sobel算子主要用作边缘检测,通过对像素周围区域中的灰度值做加权相加,达到检测边缘的效果。我们首先要重新编译FFmpeg源代码,以增加对TensorFlow的支持,然后再要写出和Sobel算子等效的TensorFlow网络模型,最后dnn_processing会加载并执行此网络模型,对输入的frame逐一进行处理。为简化代码,我们只关注sobel算子水平方向的特性。

  • 重新编译FFmpeg

FFmpeg对深度学习模型的支持有两个后端,一是调用TensorFlow C动态库来完成,二是调用内部C代码来实现。前者被称为tensorflow后端(将简写为tf后端),后者被称为native后端。要启用tf后端,必须在编译FFmpeg的机器上有tensorflow c开发库(包括.h文件和.so文件),而且在configure的时候需要传入相应的参数。而任何情况下的编译,native后端总是被自动启用。这两个后端本文都会涉及,所以,我们必须重新编译FFmpeg。

首先,我们下载libtensorflow c开发库,其官方下载链接是https://www.tensorflow.org/install/lang_c ,目前最新版本是1.15.0,顺便提一句,主页上还提到目前还不支持tensorflow 2(There is no libtensorflow support for TensorFlow 2 yet.)。但是,从1.14到1.15版本切换的时候,头文件发生了变化,而FFmpeg最早是在2018年引入对Tensorflow的支持,所以,我们目前还无法使用1.15版本,必须使用之

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值