实现微信发送图片的功能,图片是人物形象和环境背景,根据聊天内容而来。

本文介绍了如何使用StableDiffusionAI图像模型创建逼真的虚拟女友形象,并在微信聊天中实现实时图片生成,包括定制人物表情、背景和动态行为。作者探讨了API调用的细节,以及在实现文字与图片同步发送中遇到的挑战,以及未来可能的云部署方向。
摘要由CSDN通过智能技术生成

这一篇文章是在上篇文章后的继续研究,上一篇文章桌宠1.0,微信连接gpt-CSDN博客

大致要求:实现微信发送图片的功能,图片是虚拟女友的人物形象和环境背景。

大致思路:首先定制一个逼真的虚拟人物形象,然后根据聊天内容,虚拟人物不同的表情在不同的地方做不同的事情。尽可能的细节,还原一个逼真的虚拟女友形象。

先看效果,这一张的提示词:一个美女穿着白色衣服在海边散步。

之后的每一张都有这个效果,anywhere,anythin。

一.逼真的虚拟人物形象,我使用当前热门的AI 图像模型软件,stable Diffusion webui。

    1.本地部署stable Diffusion webui,请参考一键整合包,运行软件,在软件中设置提示词和相应的模型参数。整合包和模型参数的讲解在下面。因为有一键整合包,本地部署十分方便。模型参数的使用则十分复杂,不同的参数不同的效果。关键参数说明如下。【AI绘画·24年3月最新】Stable Diffusion整合包v4.7发布!解压即用 防爆显存 三分钟入门AI绘画 ☆更新 ☆训练 ☆汉化 秋叶整合包_哔哩哔哩_bilibili

Stable Diffusion系列课程上:安装、提示词入门、常用模型(checkpoint、embedding、LORA)、放大算法、局部重绘、常用插件_stable diffusion checkpoint-CSDN博客基础模型大致有三种,动漫风,真实风,介于他们之间的一种风格。我选择了后者。

lora模型,人物我选择了喜欢的动漫人物模型,身材模型。背景模型我选择了喜欢的插画模型。

Embeddings模型我选择了EasyNegative作为反向提示词,这是一个通用选择,专门处理2d动画人物的脸和手脚

采样方法我选择了Euler a,比较适合插画,变化更大。DPM++ 2M SDE Karras细节更多。

一定启用人物修脸,启用 After Detailer,如果不启用远景人物脸直接就花了。After Detailer 模型我选用face_yolov8n_v2.pt这是一个专门修2d动漫的模型。并添加提示词<lora:凉冰_1.0:1>,LiangBing。After Detailer的原理是在图片中找到人物的脸,然后根据After Detailer模型和你的提示词lora模型,把设定的人物脸再修复一遍。脸才是人物的灵魂,只有脸相似,才是同一个人物。

2.python调用stable Diffusion webui api。我不是专业的p图师,上述参数已经满足我的要求,下面要求在python代码中实现调用api文生图,参考下面的api调用说明。文章中人物修脸使用的是"restore_faces": True ,实际使用修成了千篇一律的网红脸,十分讨厌。问题,如何在api中使用After Detailer。alwayson_scripts是stable Diffusion本身的一种脚本,通过其启动ADetailer。Stable-diffusion-WebUI 的API调用(内含文生图和图生图实例)_stable-diffusion-webui api-CSDN博客

#coding=utf-8
import json
import requests
import io
import base64
from PIL import Image

url = "http://127.0.0.1:7860"

prompt0 = "you_lara"
prompt1 = "you_人物在什么地方做什么事情"
prompt = prompt0 + prompt1
negative_prompt = "EasyNegative"

payload = {
    # 模型设置
    "override_settings": {
        "sd_model_checkpoint": "Z_mixnm_real3ab_V3ab",
        "CLIP_stop_at_last_layers": 2,
        # "sd_vae": "animevae.pt",  # 我没用sd_vae,类似于一种滤镜
    },

    # 基本参数
    "prompt": prompt,
    "negative_prompt": negative_prompt,
    "steps": 20,
    "sampler_name": "Euler a",
    "width": 448,
    "height": 640,
    "batch_size": 1,
    "n_iter": 1,
    "seed": -1,
    "CLIP_stop_at_last_layers": 2,

    # 面部修复 face fix
    # "restore_faces": False,
    "alwayson_scripts": {
          "ADetailer": {
               "args": [
                    {
                         "ad_model": "face_yolov8n_v2.pt",
                         "ad_prompt": "<lora:lb:1.0>",
                         "ad_confidence": 0.5,
                         "ad_controlnet_weight": 0.25
                         # "ad_controlnet_model": "None",
                         # "ad_inpaint_width": 512,
                         # "ad_inpaint_height": 768,
                         # "ad_denoising_strength": 0.4,
                         # "ad_use_steps": True,
                         # "ad_steps": 28,
                    }
               ]
          }
    }

    # 高清修复 highres fix
    # "enable_hr": True,
    # "denoising_strength": 0.4,
    # "hr_scale": 2,
    # "hr_upscaler": "Latent",
}

response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
r = response.json()
image = Image.open(io.BytesIO(base64.b64decode(r['images'][0])))
image.show()

二.根据聊天内容,虚拟人物不同的表情在不同的地方做不同的事情。

        这部分仅简要说明,聊天内容储存在json文件中,模拟记忆,根据记忆生成提示词,关键在于写好提示词。我在实际使用中将提示词人物交给了不同的AI角色,不同的AI角色通过初始化文本实现,然后像流水线一样不同的工作任务,实际并不复杂,关键在于写好提示词。如下是stable Diffusion webui的chatgpt官方提示词。

StableDiffusion是一款利用深度学习的文生图模型,支持通过使用提示词来产生新的图像,描述要包含或省略的元素。
我在这里引入StableDiffusion算法中的Prompt概念,又被称为提示符。
下面的prompt是用来指导AI绘画模型创作图像的。它们包含了图像的各种细节,如人物的外观、背景、颜色和光线效果,以及图像的主题和风格。这些prompt的格式经常包含括号内的加权数字,用于指定某些细节的重要性或强调。例如,"(masterpiece:1.5)"表示作品质量是非常重要的,多个括号也有类似作用。此外,如果使用中括号,如"{blue hair:white hair:0.3}",这代表将蓝发和白发加以融合,蓝发占比为0.3。
以下是用prompt帮助AI模型生成图像的例子:masterpiece,(bestquality),highlydetailed,ultra-detailed,cold,solo,(1girl),(detailedeyes),(shinegoldeneyes),(longliverhair),expressionless,(long sleeves),(puffy sleeves),(white wings),shinehalo,(heavymetal:1.2),(metaljewelry),cross-lacedfootwear (chain),(Whitedoves:1.2)

仿照例子,给出一套详细描述以下内容的prompt。直接开始给出prompt不需要用自然语言描述:

三.实现难点,三个问题,简要说明。

       如果只是聊天是比较简单的,你一句我一句。

       加上图片发送,需要解决模拟鼠标点击打架的问题,我通过给def程序上锁是实现。

       图片发送,不能每段文字都发送图片,通过给def计数实现,并且发送图片中计数停止。设置随机数,那就是随机回复一张图片,也可以通过特定提示词,回复一张图片。

       文字和图片功能,是两条不同的流水线且速度不一致,通过多线程实现。

四.未来展望

      尽可能的细节,还原一个逼真的虚拟女友形象。添加更多的lora模型实现人物服装和脸部表情的丰富。我觉得现在的挺好的,不准备继续研究,毕竟也不能太沉迷虚拟的。

     云服务器部署。stable Diffusion webui api不使用本地部署,使用网络api,即可在一台没什么性能的服务器上部署项目。这个有空再研究吧。云部署项目在GitHub - dognamepander/windows_pet_v2_yun: 虚拟女友微信聊天,根据聊天内容生成女友图片(一位虚拟女友不同的表情在不同的地方做不同的事情),主打一个陪伴。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国服小闲鱼请战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值