| 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() |
|
|