几十行Python代码就能画出世界名画!鉴赏大师都差点看走眼!
现在很多人都喜欢拍照(自拍)。有限的滤镜和装饰玩多了也会腻,所以就有 APP 提供了?模仿名画风格?的功能,比如 prisma、versa 等,可以把你的照片变成?梵高、毕加索、蒙克?等大师的风格。 进群:548377875 ?即可获取数十套PDF哦! 这种功能叫做“?图像风格迁移?”,几乎都是基于 CVPR 2015 的论文《?A Neural Algorithm of Artistic Style?》和 ECCV 2016 的论文《?Perceptual Losses for Real-Time Style Transfer and Super-Resolution?》中提出的算法,以及后续相关研究的基础上开发出来的。 通俗来讲,就是借助于?神经网络?,预先将名画中的风格训练成出模型,在将其应用在不同的照片上,生成新的风格化图像。 来自《A Neural Algorithm of Artistic Style》 而因为神经网络在计算机视觉方面的应用越来越广,著名的视觉开发库 OpenCV 在 3.3 版本中正式引入?DNN(深度神经网络)?,支持 Caffe、TensorFlow、Torch/PyTorch 等主流框架的模型,可用以实现图像的识别、检测、分类、分割、着色等功能。 我最近才发现在 OpenCV 的 Sample 代码中就有图像风格迁移的 Python 示例(原谅我的后知后觉),是基于 ECCV 2016 论文中的网络模型实现。所以,即使作为人工智能的菜鸟,也可以拿别人训练好的模型来玩一玩,体会下神经网络的奇妙。 (相关代码和模型的获取见文末) OpenCV 官方代码地址:?https:// github.com/opencv/openc v/blob/3.4.0/samples/dnn/fast_neural_style.py 目录下通过执行命令运行代码: python fast_neural_style.py --model starry_night.t7 model 参数是提供预先训练好的模型文件路径,OpenCV 没有提供下载,但给出的参考项目https:// github.com/jcjohnson/fa st-neural-style?中可以找到 其他可设置参数有:
执行后的效果(取自 jcjohnson/fast-neural-style): 原始图像 ECCV16 models instance_norm models 核心代码其实很短,就是?加载模型 -> 读取图片 -> 进行计算 -> 输出图片?,我在官方示例基础上进一步简化了一下: import cv2 # 加载模型 net = cv2.dnn.readNetFromTorch('the_scream.t7') net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV); # 读取图片 image = cv2.imread('test.jpg') (h,w) = image.shape[:2] blob = cv2.dnn.blobFromImage(image,1.0,(w,h),(103.939,116.779,123.680),swapRB=False,crop=False) # 进行计算 net.setInput(blob) out = net.forward() out = out.reshape(3,out.shape[2],out.shape[3]) out[0] += 103.939 out[1] += 116.779 out[2] += 123.68 out /= 255 out = out.transpose(1,2,0) # 输出图片 cv2.imshow('Styled image',out) cv2.waitKey(0) 执行结果: 另外还改了个多效果实时对比的版本(计算量大了,很卡顿),也一并上传在代码中。 PS:前两天看赵雷演唱会的时候我还说:他演唱会的背景 MV 大量使用了 图像二值化、边缘检测 等操作,让我想到以前数字图像处理课的大作业……现在图像风格迁移的效率达到了实时,想必以后也会经常被使用吧:smirk: 获取文中相关代码和模型下载地址,请在公众号(?Crossin的编程教室?)对话中回复关键字名画 ════ 其他文章及回答: 如何自学Python |新手引导 |精选Python 问答 |如何debug? |Python单词表 |知乎下载器 |人工智能 |嘻哈 |爬虫 |我用Python |抓抖音 |requests |AI平台 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |