利用 Python 和 AI 技术创作独特的图像艺术作品

news2025/4/19 11:20:23

1. 项目目标

  • 生成艺术作品:利用 AI 模型(如 Stable Diffusion)生成具有艺术风格的图像。
  • 自定义风格:通过文本提示(prompt)控制图像的艺术风格(如赛博朋克、印象派、超现实主义等)。
  • 后处理:使用 Python 进行图像增强或风格迁移,增加独特性。
  • 工具:Python, Stable Diffusion (Hugging Face), PyTorch, Pillow, OpenCV。

2. 技术路线

以下是实现步骤:

  1. 安装必要的库
    • 安装 Python 环境(推荐 Python 3.8+)。
    • 安装 AI 和图像处理相关库。
  2. 使用预训练模型生成图像
    • 使用 Stable Diffusion 模型通过文本提示生成基础艺术图像。
  3. 图像后处理
    • 使用 Pillow 或 OpenCV 添加滤镜、调整颜色或进行风格迁移。
  4. 保存和展示
    • 将生成的艺术作品保存为高分辨率图像。

3. 环境准备

安装依赖

确保你有以下库:

pip install diffusers transformers torch pillow opencv-python numpy
硬件要求
  • GPU(推荐):Stable Diffusion 在 GPU 上运行更快(需要 NVIDIA GPU 和 CUDA 支持)。
  • CPU(可选):如果没有 GPU,可以用 CPU,但生成速度较慢。
Hugging Face 登录

Stable Diffusion 模型需要从 Hugging Face 下载,并可能需要登录:

pip install huggingface_hub
huggingface-cli login

输入你的 Hugging Face 令牌(在 Hugging Face 官网获取)。


4. 代码实现

以下是一个完整的 Python 脚本,结合 Stable Diffusion 生成艺术图像,并进行后处理。

import torch
from diffusers import StableDiffusionPipeline
from PIL import Image
import cv2
import numpy as np
import os

# 1. 初始化 Stable Diffusion 模型
model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to("cuda")  # 使用 GPU(如果没有 GPU,注释此行)

# 2. 定义艺术风格的文本提示
prompt = "A surreal painting of a futuristic city at sunset, vibrant colors, in the style of Salvador Dali"
negative_prompt = "low quality, blurry, text, watermark"  # 避免生成低质量图像

# 3. 生成图像
image = pipe(
    prompt,
    negative_prompt=negative_prompt,
    num_inference_steps=50,  # 推理步数,控制生成质量
    guidance_scale=7.5,     # 提示引导强度
).images[0]

# 4. 保存原始生成图像
output_dir = "art_output"
os.makedirs(output_dir, exist_ok=True)
image.save(os.path.join(output_dir, "original_art.png"))

# 5. 图像后处理:添加艺术滤镜
def apply_artistic_filter(image_pil, filter_type="edge_enhance"):
    # 将 PIL 图像转换为 OpenCV 格式
    image_np = np.array(image_pil)
    image_cv = cv2.cvtColor(image_np, cv2.COLOR_RGB2BGR)

    if filter_type == "edge_enhance":
        # 增强边缘,模拟手绘效果
        kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
        image_cv = cv2.filter2D(image_cv, -1, kernel)
    elif filter_type == "color_boost":
        # 增强颜色鲜艳度
        image_cv = cv2.convertScaleAbs(image_cv, alpha=1.2, beta=10)

    # 转换回 PIL 格式
    image_filtered = cv2.cvtColor(image_cv, cv2.COLOR_BGR2RGB)
    return Image.fromarray(image_filtered)

# 6. 应用滤镜并保存
filtered_image = apply_artistic_filter(image, filter_type="edge_enhance")
filtered_image.save(os.path.join(output_dir, "filtered_art.png"))

print("艺术作品已生成并保存至 art_output 目录!")

5. 代码说明

  • Stable Diffusion
    • 使用 runwayml/stable-diffusion-v1-5 模型,通过文本提示生成图像。
    • prompt 定义了图像的内容和风格,例如“超现实的未来城市,达利风格”。
    • negative_prompt 避免生成不需要的元素(如模糊或低质量图像)。
    • num_inference_stepsguidance_scale 控制生成质量和提示的遵循程度。
  • 后处理
    • apply_artistic_filter 函数使用 OpenCV 实现两种滤镜:
      • edge_enhance:增强图像边缘,模拟手绘效果。
      • color_boost:提升颜色鲜艳度,增加艺术感。
    • 可以根据需要扩展更多滤镜(如模糊、素描效果等)。
  • 输出
    • 生成的原始图像和滤镜处理后的图像保存至 art_output 目录。

6. 扩展与优化

为了让作品更独特,可以尝试以下方法:

  1. 自定义提示
    • 尝试不同的艺术风格,如:
      • “A cyberpunk cityscape in the style of Van Gogh”
      • “An abstract portrait of a woman, vibrant watercolor style”
    • 使用更复杂的提示,结合艺术家风格或艺术流派。
  2. 风格迁移
    • 使用预训练的神经风格迁移模型(如 PyTorch 的 torchvision.modelsneural-style-transfer)将生成的图像与特定艺术风格(如毕加索、莫奈)融合。
    • 示例库:pytorch-CycleGAN-and-pix2pix
  3. 批量生成
    • 编写循环,生成多个图像并挑选最佳作品:
      for i in range(3):
          image = pipe(prompt, negative_prompt=negative_prompt).images[0]
          image.save(os.path.join(output_dir, f"art_{i}.png"))
      
  4. 交互界面
    • 使用 StreamlitGradio 构建一个 Web 界面,让用户输入提示并实时预览生成的艺术作品。
    • 示例:
      pip install gradio
      
      import gradio as gr
      def generate_art(prompt):
          image = pipe(prompt).images[0]
          return image
      gr.Interface(fn=generate_art, inputs="text", outputs="image").launch()
      

7. 常见问题与解决方案

  • 显存不足
    • 如果 GPU 显存不足,尝试:
      • 降低 torch_dtypetorch.float16
      • 减少 num_inference_steps(如 30)。
      • 使用 CPU(注释 pipe.to("cuda"))。
  • 生成图像质量不高
    • 增加 num_inference_steps(如 100)。
    • 调整 guidance_scale(7.5~12.5 通常效果较好)。
    • 使用更详细的提示词。
  • 模型下载慢
    • 确保网络稳定,或提前下载模型到本地:
      pipe = StableDiffusionPipeline.from_pretrained(model_id, cache_dir="./models")
      

8. 其他 AI 艺术生成工具

如果你想探索更多 AI 艺术生成工具,可以尝试:

  • DALL·E 3:通过 OpenAI API 生成高质量图像(需要付费)。
  • MidJourney:专注于艺术风格的生成(通过 Discord 操作)。
  • Artbreeder:基于 GAN 的图像混合与生成。
  • VQ-VAE-2:生成像素艺术或低分辨率风格图像。

这些工具可以通过 API 或 Python 脚本集成到你的工作流中。


9. 成果展示

运行上述代码后,你将得到:

  • 一张原始的 AI 生成图像(如超现实的未来城市)。
  • 一张经过滤镜处理的艺术图像(边缘增强或颜色提升)。
  • 保存路径:art_output/original_art.pngart_output/filtered_art.png

你可以进一步将这些图像用于:

  • 数字艺术展览。
  • NFT 创作。
  • 个性化壁纸或印刷品。

10. 总结

通过 Python 和 Stable Diffusion,你可以快速生成独特的艺术图像,并通过后处理增加个性化效果。上述代码提供了从生成到增强的完整流程,且易于扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2336555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】4.单链表实现通讯录

在上一篇文章我们学会了用单链表来实现各种方法,在这一篇文章我们将在单链表的基础上实现通讯录。 0、准备工作 实现通讯录之前,我们还需要在单链表的基础上添加2个文件,头文件Contact.h和源文件Contact.c。Contact.c来实现通讯录方法的声明…

接口自动化测试(一)

一、HTTP请求的核心概念及原理详解 HTML:超文本标记语言-----通过<标记符>内容</标记符>格式-------页面 URL:统一资源定位符 返回数据有很多&#xff1a;页面、图片、视频&#xff0c;都可以进行返回---统称为&#xff1a;资源HTTP:超文本传输协议(请求-响应的协…

【JavaEE】Spring AOP的注解实现

目录 一、AOP 与 Spring AOP二、Spring AOP简单实现三、详解Spring AOP3.1 Spring AOP 核心概念3.1.1 切点&#xff08;Pointcut&#xff09;3.1.2 连接点&#xff08;Join Point&#xff09;3.1.3 通知&#xff08;Advice&#xff09;3.1.4 切面&#xff08;Aspect&#xff09…

揭秘大数据 | 22、软件定义存储

揭秘大数据 | 19、软件定义的世界-CSDN博客 揭秘大数据 | 20、软件定义数据中心-CSDN博客 揭秘大数据 | 21、软件定义计算-CSDN博客 老规矩&#xff0c;先把这个小系列的前三篇奉上。今天书接上文&#xff0c;接着叙软件定义存储的那些事儿。 软件定义存储源于VMware公司于…

OpenCV 图形API(37)图像滤波-----分离过滤器函数sepFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 应用一个可分离的线性滤波器到一个矩阵&#xff08;图像&#xff09;。 该函数对矩阵应用一个可分离的线性滤波器。也就是说&#xff0c;首先&a…

flutter下载SDK环境配置步骤详解

目录 1.Flutter官网地址、SDK下载地址? 1.1 选择你电脑的系统​ 2.配置环境 3.解决环境报错 zsh:command not found:flutter 1.Flutter官网地址、SDK下载地址? flutter官网地址: URL 1.1 选择你电脑的系统 下载解压动目录就OK了 2.配置环境 1、打开命令行&#xf…

数据结构与算法入门 Day 0:程序世界的基石与密码

&#x1f31f;数据结构与算法入门 Day 0&#xff1a;程序世界的基石与密码&#x1f511; ps&#xff1a;接受到了不少的私信反馈&#xff0c;说应该先把前置的知识内容做一个梳理&#xff0c;所以把昨天的文章删除了&#xff0c;重新开启今天的博文写作 Hey 小伙伴们&#xff…

vscode终端运行windows服务器的conda出错

远程windows服务器可以运行&#xff0c;本地vscode不能。 打开vscode settings.json文件 添加conda所在路径

“大湾区珠宝艺境花园”璀璨绽放第五届消博会

2025年4月13日&#xff0c;第五届中国国际消费品博览会&#xff08;以下简称"消博会"&#xff09;重要主题活动——《大湾区珠宝艺境花园》启动仪式在海南国际会展中心2号馆隆重举行。由广东省金银珠宝玉器业厂商会组织带领粤港澳大湾区优秀珠宝品牌&#xff0c;以“…

十、自动化函数+实战

Maven环境配置 1.设计测试用例 2.创建空项目 1&#xff09;添加需要的依赖pom.xml <dependencies> <!-- 截图配置--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</…

Day09【基于jieba分词和RNN实现的简单中文分词】

基于jieba分词和RNN实现的中文分词 目标数据准备主程序预测效果 目标 本文基于给定的中文词表&#xff0c;将输入的文本基于jieba分词分割为若干个词&#xff0c;词的末尾对应的标签为1&#xff0c;中间部分对应的标签为0&#xff0c;同时将分词后的单词基于中文词表做初步序列…

自动化测试——selenium

简介 Selenium 是一个广泛使用的自动化测试工具&#xff0c;主要用于 Web 应用程序的自动化测试。它能实现的功能是网页的自动化操作&#xff0c;例如自动抢票刷课等。同时你应该也见到过有些网站在打开之后并没有直接加载出网站的所有内容&#xff0c;比如一些图片等等&#x…

Linux——进程通信

我们知道&#xff0c;进程具有独立性&#xff0c;各进程之间互不干扰&#xff0c;但我们为什么还要让其联系&#xff0c;建立通信呢&#xff1f;比如&#xff1a;数据传输&#xff0c;资源共享&#xff0c;通知某个事件&#xff0c;或控制某个进程。因此&#xff0c;让进程间建…

【免费参会合集】2025年生物制药行业展会会议表格整理

全文精心整理, 建议今年参会前都好好收藏着&#xff0c;记得点赞&#xff01; 医药人非常吃资源&#xff0c;资源从何而来&#xff1f;作为一名从事医药行业的工作者&#xff0c;可以很负责任的告诉诸位&#xff0c;其中非常重要的一个渠道就是会议会展&#xff01; 建议所有医…

腾讯云开发+MCP:旅游规划攻略

1.登录注册好之后进入腾讯云开发 2.创建环境 4.创建好环境之后点击去开发 5.进入控制台后&#xff0c;选择AI&#xff0c;找到MCP 6.点击创建MCP Server 使用腾讯云开发创建MCP目前需要云开发入门版99/月&#xff0c;我没开通&#xff0c;所以没办法往下进行。

Sklearn入门之数据预处理preprocessing

、 Sklearn全称:Scipy-toolkit Learn是 一个基于scipy实现的的开源机器学习库。它提供了大量的算法和工具&#xff0c;用于数据挖掘和数据分析&#xff0c;包括分类、回归、聚类等多种任务。本文我将带你了解并入门Sklearn下的preprocessing在机器学习中的基本用法。 获取方式…

家用打印机性价比排名及推荐

文章目录 品牌性价比一、核心参数对比与场景适配二、技术类型深度解析三、不同场景选择 相关文章 品牌 性价比 一、核心参数对比与场景适配 兄弟T436W 优势&#xff1a; 微压电技术&#xff0c;打印头寿命长&#xff0c;堵头率低。 支持A4无边距和5G WiFi&#xff0c;适合照片…

数字电子技术基础(四十七)——使用Mutlisim软件来模拟74LS85芯片

目录 1 使用74LS85N芯片完成四位二进制数的比较 1.1原理介绍 1.2 器件选择 1.3 运行电路 2 使用74LS85N完成更多位的二进制比较 1 使用74LS85N芯片完成四位二进制数的比较 1.1原理介绍 对于74LS85 是一款 4 位数值比较器集成电路&#xff0c;用于比较两个 4 位二进制数&…

关于STM32创建工程文件启动文件选择

注意启动文件只要选择这几个 而不是要把所有都选上

LLC电路工作在容性区的风险

在t0时刻之前&#xff0c;Q6Q7导通&#xff0c;回路如下所示&#xff0c;此时A点电压是低压&#xff0c;B点电压是高压 在t0时刻时&#xff0c;谐振电流相位发生变换&#xff0c;在t1时刻&#xff0c;Q5&#xff0c;Q8导通&#xff0c;对于Q8MOS管来说&#xff0c;B点电压在Q6Q…