Download yolov7/deploy/triton-inference-server/render.py from voidljc/cherrydata: direct link, hf CLI and curl.
- Browser
- Download file 3.17 kB
-
https://huggingface.co/voidljc/cherrydata/resolve/main/yolov7/deploy/triton-inference-server/render.py
- Command line
-
hf download hf://voidljc/cherrydata/yolov7/deploy/triton-inference-server/render.py
-
curl -L -o render.py https://huggingface.co/voidljc/cherrydata/resolve/main/yolov7/deploy/triton-inference-server/render.py
3.17 kB
| import numpy as np | |
| import cv2 | |
| from math import sqrt | |
| _LINE_THICKNESS_SCALING = 500.0 | |
| np.random.seed(0) | |
| RAND_COLORS = np.random.randint(50, 255, (64, 3), "int") # used for class visu | |
| RAND_COLORS[0] = [220, 220, 220] | |
| def render_box(img, box, color=(200, 200, 200)): | |
| """ | |
| Render a box. Calculates scaling and thickness automatically. | |
| :param img: image to render into | |
| :param box: (x1, y1, x2, y2) - box coordinates | |
| :param color: (b, g, r) - box color | |
| :return: updated image | |
| """ | |
| x1, y1, x2, y2 = box | |
| thickness = int( | |
| round( | |
| (img.shape[0] * img.shape[1]) | |
| / (_LINE_THICKNESS_SCALING * _LINE_THICKNESS_SCALING) | |
| ) | |
| ) | |
| thickness = max(1, thickness) | |
| img = cv2.rectangle( | |
| img, | |
| (int(x1), int(y1)), | |
| (int(x2), int(y2)), | |
| color, | |
| thickness=thickness | |
| ) | |
| return img | |
| def render_filled_box(img, box, color=(200, 200, 200)): | |
| """ | |
| Render a box. Calculates scaling and thickness automatically. | |
| :param img: image to render into | |
| :param box: (x1, y1, x2, y2) - box coordinates | |
| :param color: (b, g, r) - box color | |
| :return: updated image | |
| """ | |
| x1, y1, x2, y2 = box | |
| img = cv2.rectangle( | |
| img, | |
| (int(x1), int(y1)), | |
| (int(x2), int(y2)), | |
| color, | |
| thickness=cv2.FILLED | |
| ) | |
| return img | |
| _TEXT_THICKNESS_SCALING = 700.0 | |
| _TEXT_SCALING = 520.0 | |
| def get_text_size(img, text, normalised_scaling=1.0): | |
| """ | |
| Get calculated text size (as box width and height) | |
| :param img: image reference, used to determine appropriate text scaling | |
| :param text: text to display | |
| :param normalised_scaling: additional normalised scaling. Default 1.0. | |
| :return: (width, height) - width and height of text box | |
| """ | |
| thickness = int( | |
| round( | |
| (img.shape[0] * img.shape[1]) | |
| / (_TEXT_THICKNESS_SCALING * _TEXT_THICKNESS_SCALING) | |
| ) | |
| * normalised_scaling | |
| ) | |
| thickness = max(1, thickness) | |
| scaling = img.shape[0] / _TEXT_SCALING * normalised_scaling | |
| return cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, scaling, thickness)[0] | |
| def render_text(img, text, pos, color=(200, 200, 200), normalised_scaling=1.0): | |
| """ | |
| Render a text into the image. Calculates scaling and thickness automatically. | |
| :param img: image to render into | |
| :param text: text to display | |
| :param pos: (x, y) - upper left coordinates of render position | |
| :param color: (b, g, r) - text color | |
| :param normalised_scaling: additional normalised scaling. Default 1.0. | |
| :return: updated image | |
| """ | |
| x, y = pos | |
| thickness = int( | |
| round( | |
| (img.shape[0] * img.shape[1]) | |
| / (_TEXT_THICKNESS_SCALING * _TEXT_THICKNESS_SCALING) | |
| ) | |
| * normalised_scaling | |
| ) | |
| thickness = max(1, thickness) | |
| scaling = img.shape[0] / _TEXT_SCALING * normalised_scaling | |
| size = get_text_size(img, text, normalised_scaling) | |
| cv2.putText( | |
| img, | |
| text, | |
| (int(x), int(y + size[1])), | |
| cv2.FONT_HERSHEY_SIMPLEX, | |
| scaling, | |
| color, | |
| thickness=thickness, | |
| ) | |
| return img | |