mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
4d980a8ceb
This filter accepts all the dnn networks which do image processing. Currently, frame with formats rgb24 and bgr24 are supported. Other formats such as gray and YUV will be supported next. The dnn network can accept data in float32 or uint8 format. And the dnn network can change frame size. The following is a python script to halve the value of the first channel of the pixel. It demos how to setup and execute dnn model with python+tensorflow. It also generates .pb file which will be used by ffmpeg. import tensorflow as tf import numpy as np import imageio in_img = imageio.imread('in.bmp') in_img = in_img.astype(np.float32)/255.0 in_data = in_img[np.newaxis, :] filter_data = np.array([0.5, 0, 0, 0, 1., 0, 0, 0, 1.]).reshape(1,1,3,3).astype(np.float32) filter = tf.Variable(filter_data) x = tf.placeholder(tf.float32, shape=[1, None, None, 3], name='dnn_in') y = tf.nn.conv2d(x, filter, strides=[1, 1, 1, 1], padding='VALID', name='dnn_out') sess=tf.Session() sess.run(tf.global_variables_initializer()) output = sess.run(y, feed_dict={x: in_data}) graph_def = tf.graph_util.convert_variables_to_constants(sess, sess.graph_def, ['dnn_out']) tf.train.write_graph(graph_def, '.', 'halve_first_channel.pb', as_text=False) output = output * 255.0 output = output.astype(np.uint8) imageio.imsave("out.bmp", np.squeeze(output)) To do the same thing with ffmpeg: - generate halve_first_channel.pb with the above script - generate halve_first_channel.model with tools/python/convert.py - try with following commands ./ffmpeg -i input.jpg -vf dnn_processing=model=halve_first_channel.model:input=dnn_in:output=dnn_out:fmt=rgb24:dnn_backend=native -y out.native.png ./ffmpeg -i input.jpg -vf dnn_processing=model=halve_first_channel.pb:input=dnn_in:output=dnn_out:fmt=rgb24:dnn_backend=tensorflow -y out.tf.png Signed-off-by: Guo, Yejun <yejun.guo@intel.com> Signed-off-by: Pedro Arthur <bygrandao@gmail.com> |
||
---|---|---|
.. | ||
doxy | ||
examples | ||
.gitignore | ||
APIchanges | ||
authors.texi | ||
bitstream_filters.texi | ||
bootstrap.min.css | ||
build_system.txt | ||
codecs.texi | ||
decoders.texi | ||
default.css | ||
demuxers.texi | ||
developer.texi | ||
devices.texi | ||
doxy-wrapper.sh | ||
Doxyfile | ||
encoders.texi | ||
errno.txt | ||
faq.texi | ||
fate_config.sh.template | ||
fate.texi | ||
ffmpeg-bitstream-filters.texi | ||
ffmpeg-codecs.texi | ||
ffmpeg-devices.texi | ||
ffmpeg-filters.texi | ||
ffmpeg-formats.texi | ||
ffmpeg-protocols.texi | ||
ffmpeg-resampler.texi | ||
ffmpeg-scaler.texi | ||
ffmpeg-utils.texi | ||
ffmpeg.texi | ||
ffmpeg.txt | ||
ffplay.texi | ||
ffprobe.texi | ||
ffprobe.xsd | ||
fftools-common-opts.texi | ||
filter_design.txt | ||
filters.texi | ||
formats.texi | ||
general.texi | ||
git-howto.texi | ||
indevs.texi | ||
issue_tracker.txt | ||
lexicon | ||
libav-merge.txt | ||
libavcodec.texi | ||
libavdevice.texi | ||
libavfilter.texi | ||
libavformat.texi | ||
libavutil.texi | ||
libswresample.texi | ||
libswscale.texi | ||
mailing-list-faq.texi | ||
Makefile | ||
metadata.texi | ||
mips.txt | ||
multithreading.txt | ||
muxers.texi | ||
nut.texi | ||
optimization.txt | ||
outdevs.texi | ||
patchwork | ||
platform.texi | ||
print_options.c | ||
protocols.texi | ||
rate_distortion.txt | ||
resampler.texi | ||
scaler.texi | ||
snow.txt | ||
style.min.css | ||
swresample.txt | ||
swscale.txt | ||
t2h.init | ||
t2h.pm | ||
tablegen.txt | ||
texi2pod.pl | ||
texidep.pl | ||
undefined.txt | ||
utils.texi | ||
writing_filters.txt |