|
import os |
|
from PIL import Image, ImageDraw, ImageFont |
|
from .utils import image_label_2_color |
|
|
|
|
|
def get_flattened_output(docs): |
|
print("Running Flattened Output") |
|
flattened_output = [] |
|
annotation_key = 'output' |
|
for doc in docs: |
|
flattened_output_item = {annotation_key: []} |
|
doc_annotation = doc[annotation_key] |
|
for i, span in enumerate(doc_annotation): |
|
if len(span['words']) > 1: |
|
for span_chunk in span['words']: |
|
flattened_output_item[annotation_key].append( |
|
{ |
|
'label': span['label'], |
|
'text': span_chunk['text'], |
|
'words': [span_chunk] |
|
} |
|
) |
|
|
|
else: |
|
flattened_output_item[annotation_key].append(span) |
|
flattened_output.append(flattened_output_item) |
|
return flattened_output |
|
|
|
|
|
def annotate_image(image_path, annotation_object): |
|
print("Annotating Images") |
|
img = None |
|
image = Image.open(image_path).convert('RGBA') |
|
tmp = image.copy() |
|
label2color = image_label_2_color(annotation_object) |
|
overlay = Image.new('RGBA', tmp.size, (0, 0, 0)+(0,)) |
|
draw = ImageDraw.Draw(overlay) |
|
font = ImageFont.load_default() |
|
|
|
predictions = [span['label'] for span in annotation_object['output']] |
|
boxes = [span['words'][0]['box'] for span in annotation_object['output']] |
|
for prediction, box in zip(predictions, boxes): |
|
draw.rectangle(box, outline=label2color[prediction], |
|
width=3, fill=label2color[prediction]+(int(255*0.33),)) |
|
draw.text((box[0] + 10, box[1] - 10), text=prediction, |
|
fill=label2color[prediction], font=font) |
|
|
|
img = Image.alpha_composite(tmp, overlay) |
|
img = img.convert("RGB") |
|
|
|
image_name = os.path.basename(image_path) |
|
image_name = image_name[:image_name.find('.')] |
|
output_folder = 'static/temp/inferenced/' |
|
os.makedirs(output_folder, exist_ok=True) |
|
|
|
img.save(os.path.join(output_folder, f'{image_name}_inference.jpg')) |
|
|