https://github.com/lllyasviel/Fooocus 是一款基于Gradio的图像生成软件。它集成了Stable Diffusion和Midjourney的特点:
- 向Stable Diffusion学习,该软件是离线的,开源的,免费的。
- 从Midjourney中学到,不需要手动调整,用户只需要专注于提示和图像。
同时它 支持 api接口调用,而且给了例子。
不过目前api是基于 Gradio client 来调用 Fooocus,不太好用, 有个 https://github.com/konieshadow/Fooocus-API/ 使用 FastAPI 构建了一系列 REST API 来使用 Fooocus。
下面是安装过程中碰到的一些问题
错误:AssertionError: Torch not compiled with CUDA enabled
解决方案先装 cudatoolkit,
conda config --append channels conda-forge
conda config --append channels nvidia
conda install cudatoolkit
如果已经安装了,则卸载 Torch, 再重走流程,如下流程, 在python entry_with_update.py之前卸载Torch即可。
git clone https://github.com/lllyasviel/Fooocus.git
cd Fooocus
conda env create -f environment.yaml
conda activate fooocus
pip install -r requirements_versions.txt
pip uninstall torch
python entry_with_update.py
参考:https://www.educative.io/answers/how-to-resolve-torch-not-compiled-with-cuda-enabled
安装 Fooocus-API 时在获取 Fooocus 时失败。
Fooocus-API 的 Fooocus 默认是安装在
./repositories/Fooocus 目录下的。 我这里自动安装一直不通过,报服务器返回的信息无效或不可识别:
Git clone failed for Fooocus: failed to read data: 服务器返回的信息无效或不可识别
Traceback (most recent call last):
File "D:\github\Fooocus-API\main.py", line 51, in git_clone
repo = pygit2.Repository(dir)
File "C:\ProgramData\anaconda3\envs\fooocus-api\lib\site-packages\pygit2\repository.py", line 1759, in __init__
path_backend = init_file_backend(path, flags)
_pygit2.GitError: Repository not found at D:\github\Fooocus-API\repositories\Fooocus
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\github\Fooocus-API\main.py", line 405, in <module>
install_dependents(args)
File "D:\github\Fooocus-API\main.py", line 269, in install_dependents
download_repositories()
File "D:\github\Fooocus-API\main.py", line 192, in download_repositories
git_clone(fooocus_repo, repo_dir(fooocus_name),
File "D:\github\Fooocus-API\main.py", line 79, in git_clone
raise e
File "D:\github\Fooocus-API\main.py", line 65, in git_clone
repo = pygit2.clone_repository(url, dir)
File "C:\ProgramData\anaconda3\envs\fooocus-api\lib\site-packages\pygit2\__init__.py", line 255, in clone_repository
payload.check_error(err)
File "C:\ProgramData\anaconda3\envs\fooocus-api\lib\site-packages\pygit2\callbacks.py", line 98, in check_error
check_error(error_code)
File "C:\ProgramData\anaconda3\envs\fooocus-api\lib\site-packages\pygit2\errors.py", line 65, in check_error
raise GitError(message)
_pygit2.GitError: failed to read data: 服务器返回的信息无效或不可识别
解决方法,直接使用github desktop下载https://github.com/lllyasviel/Fooocus 到 ./repositories/Fooocus 目录, 然后启动时用下面命令:
python main.py --sync-repo=skip --host=0.0.0.0
其中的sync-repo=skip就是启动时跳过同步Fooocus这一步,需要自己手工同步。
host=0.0.0.0是为了能局域网其它机子可以访问。
API 使用的示例代码
异步发起文生图任务:
import requests
import json
import time
host = "http://192.168.1.17:8888"
def text2img(params: dict) -> dict:
"""
文生图
"""
result = requests.post(url=f"{host}/v1/generation/text-to-image",
data=json.dumps(params),
headers={"Content-Type": "application/json"})
print(result.text)
return result.json()
for i in range(50):
result =text2img({
"prompt": "30~40 years old, male, random hobbies, Facebook account avatar",
"image_seed":-1,
"async_process": True})
print(result)
time.sleep(30)
上述代码执行后,会获得类似如下的输出
{"job_id":"09c58c8e-45b3-47be-8b9e-505aac45c88e",
"job_type":"Text to Image",
"job_stage":"WAITING",
"job_progress":0,
"job_status":null,
"job_step_preview":null,
"job_result":null}
其中的 job_id 是这个文生图任务的ID,后面可以用这个ID来查询生成的图片情况
查询指定任务完成情况
import requests
host = "http://192.168.1.17:8888"
def taskResult(task_id: str) -> dict:
# 获取任务状态
task_status = requests.get(url=f"{host}/v1/generation/query-job",
params={"job_id": task_id,
"require_step_preivew": False},
timeout=30)
print(task_status.text)
return task_status.json()
print( taskResult('6f91586a-2c1f-4b03-87b7-627cc6a3533f'))
返回的类似如下:
{'job_id': 'b86b83e6-8035-458c-8116-a04cc33766ef',
'job_type': 'Text to Image',
'job_stage': 'SUCCESS',
'job_progress': 100,
'job_status': 'Finished',
'job_step_preview': None,
'job_result': [{'base64': None,
'url': 'http://127.0.0.1:8888/files/2024-01-18/90e5c349-e2b6-490c-8c6d-603b7c390e63.png',
'seed': '445310844207292857',
'finish_reason': 'SUCCESS'}]}
返回的 job_result中有我们要的图地址。
实际的 .\repositories\Fooocus\outputs\2024-01-18 当前日期目录下,也有这个图片文件。