当前位置: 首页 > news >正文

TensorFlow案例学习:图片风格迁移

准备

官方教程: 任意风格的快速风格转换

模型下载地址: https://tfhub.dev/google/magenta/arbitrary-image-stylization-v1-256/2

学习

加载要处理的内容图片和风格图片

# 用于将图像裁剪为方形def crop_center(image):# 图片原始形状shape = image.shape# 新形状new_shape = min(shape[1], shape[2])offset_y = max(shape[1]-shape[2], 0) // 2offset_x = max(shape[2]-shape[1], 0) // 2# 返回新图片image = tf.image.crop_to_bounding_box(image, offset_y, offset_x, new_shape, new_shape)return image# 加载并预处理图片def load_image(image_url, image_size=(256, 256), preserve_aspect_ratio=True):# 缓存图像文件image_path = tf.keras.utils.get_file(os.path.basename(image_url)[-128:], image_url)# 加载并转换为float32 numpy数组,添加批次维度,并规范化为范围[0,1]。img = tf.io.decode_image(tf.io.read_file(image_path),channels=3, dtype=tf.float32)[tf.newaxis, ...]img = crop_center(img)img = tf.image.resize(img, image_size, preserve_aspect_ratio=True)return img# 展示图片def show_n(images, titles=('',)):n = len(images)image_sizes = [image.shape[1] for image in images]w = (image_sizes[0] * 6) // 320plt.figure(figsize=(w * n, w))gs = gridspec.GridSpec(1, n, width_ratios=image_sizes)for i in range(n):plt.subplot(gs[i])plt.imshow(images[i][0], aspect='equal')plt.axis('off')plt.title(titles[i] if len(titles) > i else '')plt.show()content_image_url = 'https://scpic3.chinaz.net/files/default/imgs/2023-11-16/6e397d19e172be9f_s.jpg'
style_image_url = 'https://scpic3.chinaz.net/files/default/imgs/2023-11-05/d217bbaf821e3a73_s.jpg'
output_image_size = 384# 调整内容图像的大小
content_img_size = (output_image_size, output_image_size)
#  样式图片大小
style_img_size = (256, 256)
# 加载并展示图片
content_image = load_image(content_image_url, content_img_size)
style_image = load_image(style_image_url, style_img_size)
style_image = tf.nn.avg_pool(style_image, ksize=[3, 3], strides=[1, 1], padding='SAME')
show_n([content_image, style_image], ['Content image', 'Style image'])

在这里插入图片描述

加载模型进行风格迁移

# 加载模型
hub_module = hub.load('./magenta_arbitrary-image-stylization-v1-256_2')
# 风格迁移
outputs = hub_module(tf.constant(content_image), tf.constant(style_image))
stylized_image = outputs[0]
# 展示迁移后的图片
show_n([content_image, style_image, stylized_image], titles=['Original content image', 'Style image', 'Stylized image'])

在这里插入图片描述

加载本地图片
加载本地图片的话,只需要将加载网络图片的代码改成下面的

def load_image(image_url, image_size=(256, 256), preserve_aspect_ratio=True):# 缓存图像文件# image_path = tf.keras.utils.get_file(#     os.path.basename(image_url)[-128:], image_url)# 加载并转换为float32 numpy数组,添加批次维度,并规范化为范围[0,1]。img = tf.io.decode_image(tf.io.read_file(image_url),channels=3, dtype=tf.float32)[tf.newaxis, ...]img = crop_center(img)img = tf.image.resize(img, image_size, preserve_aspect_ratio=True)return img

下面的效果图是基于一只狗和梵高的星空生成的

在这里插入图片描述

完整代码


# import os
from matplotlib import gridspec
import matplotlib.pylab as plt
import numpy as np
import tensorflow as tf
import tensorflow_hub as hub# 用于将图像裁剪为方形def crop_center(image):# 图片原始形状shape = image.shape# 新形状new_shape = min(shape[1], shape[2])offset_y = max(shape[1]-shape[2], 0) // 2offset_x = max(shape[2]-shape[1], 0) // 2# 返回新图片image = tf.image.crop_to_bounding_box(image, offset_y, offset_x, new_shape, new_shape)return image# 加载并预处理图片def load_image(image_url, image_size=(256, 256), preserve_aspect_ratio=True):# 缓存图像文件# image_path = tf.keras.utils.get_file(#     os.path.basename(image_url)[-128:], image_url)# 加载并转换为float32 numpy数组,添加批次维度,并规范化为范围[0,1]。img = tf.io.decode_image(tf.io.read_file(image_url),channels=3, dtype=tf.float32)[tf.newaxis, ...]img = crop_center(img)img = tf.image.resize(img, image_size, preserve_aspect_ratio=True)return img# 展示图片def show_n(images, titles=('',)):n = len(images)image_sizes = [image.shape[1] for image in images]w = (image_sizes[0] * 6) // 320plt.figure(figsize=(w * n, w))gs = gridspec.GridSpec(1, n, width_ratios=image_sizes)for i in range(n):plt.subplot(gs[i])plt.imshow(images[i][0], aspect='equal')plt.axis('off')plt.title(titles[i] if len(titles) > i else '')plt.show()content_image_url = 'image/dog.png'
style_image_url = 'image/fangao.png'
output_image_size = 384# 调整内容图像的大小
content_img_size = (output_image_size, output_image_size)
#  样式图片大小
style_img_size = (256, 256)
# 加载图片
content_image = load_image(content_image_url, content_img_size)
style_image = load_image(style_image_url, style_img_size)
style_image = tf.nn.avg_pool(style_image, ksize=[3, 3], strides=[1, 1], padding='SAME')
# 展示图片
# show_n([content_image, style_image], ['Content image', 'Style image'])# 加载模型
hub_module = hub.load('./magenta_arbitrary-image-stylization-v1-256_2')
# 风格迁移
outputs = hub_module(tf.constant(content_image), tf.constant(style_image))
stylized_image = outputs[0]
# 展示迁移后的图片
show_n([content_image, style_image, stylized_image], titles=['Original content image', 'Style image', 'Stylized image'])

相关文章:

TensorFlow案例学习:图片风格迁移

准备 官方教程: 任意风格的快速风格转换 模型下载地址: https://tfhub.dev/google/magenta/arbitrary-image-stylization-v1-256/2 学习 加载要处理的内容图片和风格图片 # 用于将图像裁剪为方形def crop_center(image):# 图片原始形状shape image…...

解密网络世界的秘密——Wireshark Mac/Win中文版网络抓包工具

在当今数字化时代,网络已经成为了人们生活和工作中不可或缺的一部分。然而,对于网络安全和性能的监控和分析却是一项重要而又复杂的任务。为了帮助用户更好地理解和解决网络中的问题,Wireshark作为一款强大的网络抓包工具,应运而生…...

自学ansible笔记

一、认识ansible Ansible是一款开源自动化运维工具。它有如下特点: 1、不需要安装客户端,通过sshd去通信,比较轻量化; 2、基于模块工作,模块可以由任何语言开发,比较自由和开放; 3、不仅支持命…...

笔记53:torch.nn.rnn() 函数详解

参数解释: (1)input_size():即输入信息 Xt 的每个序列的独热编码向量的长度,即 len(vocab) (2)hidden_size():即隐变量 h 的维度(维度是多少,就代表用几个数…...

【Spring】使用三方包进行数据源对象(数据库)管理

在这里使用alibaba的druid来连接数据库&#xff0c;然后再Spring Config下配置数据库 目录 第一步&#xff1a;在pom.xml中导入坐标第二步&#xff1a;在bean中配置连接注 第一步&#xff1a;在pom.xml中导入坐标 在dependencies下写&#xff1a; <dependency><grou…...

EfficientNet:通过模型效率彻底改变深度学习

一、介绍 EfficientNet 是深度学习领域的里程碑&#xff0c;代表了神经网络架构方法的范式转变。EfficientNet 由 Google Research 的 Mingxing Tan 和 Quoc V. Le 开发&#xff0c;在不影响性能的情况下满足了对计算高效模型不断增长的需求。本文深入探讨了 EfficientNet 背后…...

asp.net core mvc之 布局

一、布局是什么&#xff1f; 布局是把每个页面的公共部分&#xff0c;提取成一个布局页面&#xff08;头、导航、页脚&#xff09;。 二、默认布局 _Layout.cshtml 默认的布局是在 /Views/Shared 目录的 _Layout.cshtml文件。通常Shared目录中的视图都是公共视图。该目录下的…...

【QT HTTP】使用QtNetwork模块制作基于HTTP请求的C/S架构

目录 0 引言1 HTTP基本知识1.1 请求类型1.2 HTTP请求报文格式1.3 HTTP响应报文格式1.4 拓展&#xff1a;GET vs POST 请求方法GET请求请求报文&#xff1a;响应报文 POST请求请求报文响应报文 其他注意事项示例&#xff1a;GET请求示例POST请求示例 2 实战2.1 QtNetwork模块介绍…...

R语言绘制精美图形 | 火山图 | 学习笔记

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 教程图形 前言 最近的事情较多&#xff0c;教程更新实在是跟不上&#xff0c;主要原因是自己没有太多时间来学习和整理相关的内容。一般在下半年基本都是非常忙&#xff0c;所有一个人的精力和时间有限&#x…...

远程创建分支本地VScode看不到分支

在代码存放处右击&#xff0c;点击Git Bash Here 输入git fetch–从远程仓库中获取最新的分支代码和提交历史 就OK啦&#xff0c;现在分支可以正常查看了...

python后台框架简介

python后台框架 Python是一种流行的编程语言&#xff0c;它有许多优点&#xff0c;如简洁、易读、灵活和功能强大。Python也是一种常用的后端开发语言&#xff0c;它可以用来构建各种类型的网站和应用程序。Python有许多后端框架&#xff0c;可以帮助开发者快速地开发和部署后…...

spring boot validation使用

spring-boot-starter-validation 是 Spring Boot 中用于支持数据验证的模块。它建立在 Java Validation API&#xff08;JSR-380&#xff09;之上&#xff0c;提供了一种方便的方式来验证应用程序中的数据。以下是使用 spring-boot-starter-validation 的基本方法&#xff1a; …...

Hadoop3.3.4分布式安装

安装前提&#xff1a;已经配置好java环境&#xff0c;所有机器之间ssh的免密登录。 注意&#xff1a;下文中的flinkv1、flinkv2、flinkv3是三台服务器的别名 1.集群部署规划 注意&#xff1a;NameNode和SecondaryNameNode不要安装在同一台服务器 注意&#xff1a;ResourceMan…...

SQL ALTER TABLE 语句||SQL AUTO INCREMENT 字段

SQL ALTER TABLE 语句 ALTER TABLE 语句 ALTER TABLE 语句用于在现有表中添加、删除或修改列。 SQL ALTER TABLE 语法 若要向表中添加列&#xff0c;请使用以下语法&#xff1a; ALTER TABLE table_name ADD column_name datatype 若要删除表中的列&am…...

【源码系列】短剧系统开发国际版短剧系统软件平台介绍

系统介绍 短剧是一种快节奏、紧凑、有趣的戏剧形式&#xff0c;通过短时间的精彩表演&#xff0c;向观众传递故事的情感和思考。它以其独特的形式和魅力&#xff0c;吸引着观众的关注&#xff0c;成为了当代戏剧娱乐中不可或缺的一部分。短剧每一集都是一个小故事&#xff0c;…...

JavaWeb[总结]

文章目录 一、Tomcat1. BS 与 CS 开发介绍1.1 BS 开发1.2 CS 开发 2. 浏览器访问 web 服务过程详解(面试题)2.1 回到前面的 JavaWeb 开发技术栈图2.2 浏览器访问 web 服务器文件的 UML时序图(过程) &#xff01; 二、动态 WEB 开发核心-Servlet1. 为什么会出现 Servlet2. 什么是…...

如何解决小程序异步请求问题

小程序异步请求问题指的是在小程序中进行异步请求时可能会出现的问题&#xff0c;比如请求失败、请求超时等。以下是一些解决方案&#xff1a; 检查网络连接&#xff1a;首先需要确保网络连接正常&#xff0c;只有网络连接正常时才能正常进行异步请求。 检查请求参数&#xff…...

NSSCTF第12页(3)

[NSSCTF 2nd]php签到 首先&#xff0c;代码定义了一个名为 waf 的函数&#xff0c;用于执行一个简单的文件扩展名检查来防止上传恶意文件。 $black_list 是一个存储不允许的文件扩展名的数组&#xff0c;如 “ph”、“htaccess” 和 “ini”。 pathinfo($filename, PATHINF…...

基于ssm+vue交通事故档案系统

摘要 摘要是对文章、论文或其他文本的主要观点、结论和关键信息的简洁概括。由于你没有提供具体的文章或主题&#xff0c;我将为你创建一个通用的摘要。 本文介绍了一种基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;和Vue.js的交通事故档案管理系统的设计与实现…...

DNS1(Bind软件)

名词解释 1、DNS&#xff08;Domain Name System&#xff09; DNS即域名系统&#xff0c;它是一个分层的分布式数据库&#xff0c;存储着IP地址与主机名的映射 2、域和域名 域为一个标签&#xff0c;而有多个标签域构成的称为域名。例如hostname.example.com&#xff0c;其…...

基于麻雀优化算法(SSA)优化shared TCN-Transformer模型超参数,实现时间...

基于麻雀优化算法&#xff08;SSA&#xff09;优化shared TCN-Transformer模型超参数&#xff0c;实现时间序列预测。[1]模型采用共享TCN结构&#xff0c;用于提取Encoder Embedding和Decoder Embedding 的因果特征&#xff0c;在尽可能保证模型复杂度不变的情况下&#xff0c;…...

SSCOM串口助手5个隐藏技巧:多窗口同步调试效率翻倍(附配置截图)

SSCOM串口助手5个隐藏技巧&#xff1a;多窗口同步调试效率翻倍&#xff08;附配置截图&#xff09; 在嵌入式开发和硬件调试领域&#xff0c;串口通信工具的效率直接影响着工程师的工作节奏。SSCOM作为一款广受欢迎的串口调试助手&#xff0c;其简洁界面背后隐藏着许多能显著提…...

解锁高效无水印备份:抖音视频批量下载的完整指南

解锁高效无水印备份&#xff1a;抖音视频批量下载的完整指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 直面内容管理痛点&#xff1a;三个真实用户的困境 场景一&#xff1a;学习资源的系统性流失 教…...

变压器差动保护MATLAB/simulink仿真 变压器差动保护仿真➕报告

变压器差动保护MATLAB/simulink仿真 变压器差动保护仿真➕报告第一部分&#xff1a;Simulink 仿真模型搭建指南 以下是变压器差动保护的Simulink模型搭建步骤及核心代码&#xff0c;包含模型参数设置、差动逻辑实现和仿真分析&#xff1a; 一、Simulink模型搭建 打开MATLAB&…...

N_m3u8DL-RE流媒体下载器:多协议解析技术突破与下载效率提升

N_m3u8DL-RE流媒体下载器&#xff1a;多协议解析技术突破与下载效率提升 【免费下载链接】N_m3u8DL-RE 跨平台、现代且功能强大的流媒体下载器&#xff0c;支持MPD/M3U8/ISM格式。支持英语、简体中文和繁体中文。 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8D…...

如何用Langchain来实现一个查询天气的AI智能体

上一篇&#xff0c;我们讲了如何用Langchain来搭建一个通义大语言模型应用。今天小编就来讲一讲如何用Langchain来实现一个查询天气的AI智能体。本文使用的大模型是智谱AI&#xff0c;采用Python代码来实现。我们需要先在官方网站申请一个开发的Key&#xff0c;在接下来的代码中…...

Java函数冷启动优化不是“选配”,而是SLA硬指标!一线大厂SRE团队正在紧急落地的6项Kubernetes调度增强策略

第一章&#xff1a;Java函数冷启动的本质与SLA倒逼机制Java函数冷启动并非单纯“首次加载慢”的表象&#xff0c;而是JVM生命周期、类加载机制、字节码验证、即时编译&#xff08;JIT&#xff09;预热及运行时元数据初始化等多层系统行为在无预热上下文下的集中爆发。当Serverl…...

电脑PC下载SMART200PLC和SMART 触摸屏程序的方法

西门子S7-200smartPLC和smart触摸屏通过本笔记本下载程序时&#xff0c;笔记本和smart触摸屏需完成相应设置&#xff0c;即笔记本电脑和smart触摸屏需通过固定IP通信下载程序&#xff0c;设置方法如下&#xff0c;本文档设置之前默认已将电脑、PLC和触摸屏通过RJ45接口网线连接…...

GitHub自动化神器:用Cursor+Firecrawl实现项目自更新(避坑指南)

GitHub自动化神器&#xff1a;用CursorFirecrawl实现项目自更新&#xff08;避坑指南&#xff09; 在开源项目的日常维护中&#xff0c;重复性的更新工作往往消耗开发者大量精力。有没有一种方法&#xff0c;能让项目像拥有自我意识般自动完成内容搜集、代码生成甚至PR提交&am…...

终极Neovim AI助手:Avante.nvim如何彻底改变你的编码体验 [特殊字符]

终极Neovim AI助手&#xff1a;Avante.nvim如何彻底改变你的编码体验 &#x1f680; 【免费下载链接】avante.nvim Use your Neovim like using Cursor AI IDE! 项目地址: https://gitcode.com/GitHub_Trending/ava/avante.nvim 在当今AI驱动的开发时代&#xff0c;Neov…...