78 lines
2.4 KiB
Python
78 lines
2.4 KiB
Python
import io
|
|
import cv2
|
|
import base64
|
|
import requests
|
|
from PIL import Image
|
|
|
|
"""
|
|
To use this example make sure you've done the following steps before executing:
|
|
1. Ensure automatic1111 is running in api mode with the controlnet extension.
|
|
Use the following command in your terminal to activate:
|
|
./webui.sh --no-half --api
|
|
2. Validate python environment meet package dependencies.
|
|
If running in a local repo you'll likely need to pip install cv2, requests and PIL
|
|
"""
|
|
|
|
|
|
class ControlnetRequest:
|
|
def __init__(self, prompt, path):
|
|
self.url = "http://localhost:7860/sdapi/v1/txt2img"
|
|
self.prompt = prompt
|
|
self.img_path = path
|
|
self.body = None
|
|
|
|
def build_body(self):
|
|
self.body = {
|
|
"prompt": self.prompt,
|
|
"negative_prompt": "",
|
|
"batch_size": 1,
|
|
"steps": 20,
|
|
"cfg_scale": 7,
|
|
"alwayson_scripts": {
|
|
"controlnet": {
|
|
"args": [
|
|
{
|
|
"enabled": True,
|
|
"module": "none",
|
|
"model": "canny",
|
|
"weight": 1.0,
|
|
"image": self.read_image(),
|
|
"resize_mode": "Crop and Resize",
|
|
"lowvram": False,
|
|
"processor_res": 64,
|
|
"threshold_a": 64,
|
|
"threshold_b": 64,
|
|
"guidance_start": 0.0,
|
|
"guidance_end": 1.0,
|
|
"control_mode": "Balanced",
|
|
"pixel_perfect": False
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
def send_request(self):
|
|
response = requests.post(url=self.url, json=self.body)
|
|
return response.json()
|
|
|
|
def read_image(self):
|
|
img = cv2.imread(self.img_path)
|
|
retval, bytes = cv2.imencode('.png', img)
|
|
encoded_image = base64.b64encode(bytes).decode('utf-8')
|
|
return encoded_image
|
|
|
|
|
|
if __name__ == '__main__':
|
|
path = 'stock_mountain.png'
|
|
prompt = 'a large avalanche'
|
|
|
|
control_net = ControlnetRequest(prompt, path)
|
|
control_net.build_body()
|
|
output = control_net.send_request()
|
|
|
|
result = output['images'][0]
|
|
|
|
image = Image.open(io.BytesIO(base64.b64decode(result)))
|
|
image.show()
|