Introdução geral
AnyText是一个革命性的多语言视觉文本生成和编辑工具,基于扩散模型开发。它能够在图像中生成自然、高质量的多语种文本,并支持灵活的文本编辑功能。该项目由研究团队开发,并在ICLR 2024会议上获得Spotlight荣誉。AnyText的核心优势在于其独特的双模块架构:辅助潜在模块负责编码文本字形、位置和蒙版图像信息,文本嵌入模块则利用OCR模型处理笔画数据。项目还提供了AnyWord-3M数据集,这是首个包含300万对带有OCR标注的多语言文本图像数据集,为视觉文本生成领域提供了重要的评估基准。
备用地址:https://huggingface.co/spaces/modelscope/AnyText
Lista de funções
- 多语言文本生成:支持在图像中生成多种语言的文本
- 文本编辑:可以编辑和修改已有图像中的文本内容
- 样式控制:支持通过基础模型或LoRA模型更改生成文本的样式
- FP16推理加速:支持快速推理,可在8GB以上显存的GPU上运行
- 中英文翻译:内置中英文翻译模型,支持直接输入中文提示词
- 自定义字体:允许用户使用自己的字体文件
- 批量处理:支持批量生成和编辑图像文本
- 模型合并:支持合并社区模型和LoRA模型的权重
Usando a Ajuda
1. 环境安装
- 首先确保系统已安装Git:
conda install -c anaconda git
- Clone o código do projeto:
git clone https://github.com/tyxsspa/AnyText.git
cd AnyText
- 准备字体文件(推荐使用Arial Unicode MS):
mv your/path/to/arialuni.ttf ./font/Arial_Unicode.ttf
- 创建并激活环境:
conda env create -f environment.yaml
conda activate anytext
2. 使用方法
2.1 快速开始
最简单的验证方式是运行以下命令:
python inference.py
2.2 启动交互式演示
对于配置较好的GPU(8GB以上显存),推荐使用演示界面:
export CUDA_VISIBLE_DEVICES=0 && python demo.py
2.3 高级配置
- 使用FP32精度和禁用翻译器:
export CUDA_VISIBLE_DEVICES=0 && python demo.py --use_fp32 --no_translator
- 使用自定义字体:
export CUDA_VISIBLE_DEVICES=0 && python demo.py --font_path your/path/to/font/file.ttf
- 加载特定的检查点:
export CUDA_VISIBLE_DEVICES=0 && python demo.py --model_path your/path/to/your/own/anytext.ckpt
3. 样式调整
在演示界面中,可以通过两种方式调整生成文本的样式:
- 更改基础模型:在[Base Model Path]中填入本地基础模型的路径
- 加载LoRA模型:在[LoRA Path and Ratio]中输入LoRA模型路径和权重比例,例如:
/path/of/lora1.pth 0.3 /path/of/lora2.safetensors 0.6
4. 性能优化
- 默认使用FP16推理,同时加载中英文翻译模型(占用约4GB显存)
- 如果使用FP16且不使用翻译模型,生成单张512x512图像仅需约7.5GB显存
- 首次运行时,模型文件会下载到
~/.cache/modelscope/hub
diretório (no disco rígido do computador) - Isso pode ser feito definindo a variável de ambiente
MODELSCOPE_CACHE
修改下载目录
5 Cuidados
- 确保安装了正确版本的依赖包
- 使用自定义字体可能会影响生成效果
- 模型首次运行需要下载相关文件
- 建议使用8GB及以上显存的GPU运行
AnyText gera instruções de operação de imagens
exemplo de execução
O AnyText tem dois modos de operação: geração de texto e edição de texto. Cada modo oferece uma grande variedade de exemplos, escolha um deles e clique em [Run!
Observe que, antes de executar o exemplo, certifique-se de que a área de localização desenhada à mão esteja vazia para não afetar os resultados do exemplo. Além disso, exemplos diferentes usam parâmetros diferentes (como resolução, número de sementes etc.); se quiser gerar o seu próprio exemplo, preste atenção às alterações dos parâmetros ou atualize a página para reverter para os parâmetros padrão.
Geração de texto
No Prompt, para inserir a descrição da palavra do prompt (suporte para chinês e inglês), é necessário gerar cada linha de texto entre aspas duplas e, em seguida, desenhar sequencialmente à mão para especificar o local de cada linha de texto para gerar imagens. O desenho da posição do texto é muito importante para a qualidade da imagem. Não desenhe de forma muito aleatória ou muito pequena, o número de posições deve ser igual ao número de linhas de texto e o tamanho de cada posição deve corresponder ao comprimento ou à largura da linha de texto correspondente, na medida do possível. Se não for possível desenhar à mão (desenho manual), tente arrastar o retângulo da caixa (manual-rect) ou gerar aleatoriamente (Auto-rand).
Ao gerar várias linhas, cada posição é classificada de acordo com determinadas regras para corresponder à linha de texto, e a opção Sort Position é usada para determinar se a prioridade de classificação é de cima para baixo ou da esquerda para a direita. Você pode ativar a opção Show Debug (Mostrar depuração) nas configurações de parâmetros para observar a posição do texto e os glifos na imagem resultante. A opção Revise Position (Revisar posição) também pode ser marcada, o que usará o retângulo externo do texto renderizado como a posição corrigida, embora ocasionalmente tenha sido constatado que o texto gerado dessa forma é um pouco menos criativo.
editor de texto
Carregue uma imagem a ser editada como imagem de referência (Ref) e, depois de ajustar o tamanho do traço, pinte a posição a ser editada na imagem de referência, digite as palavras do prompt de descrição e o conteúdo do texto a ser modificado no Prompt para gerar a imagem.
A imagem de referência pode ter qualquer resolução, mas o processamento interno restringe o lado longo a não mais que 768, e a largura e a altura são dimensionadas para um múltiplo inteiro de 64.