Spaces:
Paused
Paused
File size: 2,471 Bytes
3f9c56c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
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": 1,
"lowvram": False,
"processor_res": 64,
"threshold_a": 64,
"threshold_b": 64,
"guidance_start": 0.0,
"guidance_end": 1.0,
"control_mode": 0,
"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.split(",", 1)[0])))
image.show()
|