|
import numpy as np |
|
from transformers import AutoModelForTokenClassification, AutoProcessor |
|
|
|
def normalize_box(bbox, width, height): |
|
return [ |
|
int(bbox[0]*(1000/width)), |
|
int(bbox[1]*(1000/height)), |
|
int(bbox[2]*(1000/width)), |
|
int(bbox[3]*(1000/height)), |
|
] |
|
|
|
def compare_boxes(b1, b2): |
|
b1 = np.array([c for c in b1]) |
|
b2 = np.array([c for c in b2]) |
|
equal = np.array_equal(b1, b2) |
|
return equal |
|
|
|
def unnormalize_box(bbox, width, height): |
|
return [ |
|
width * (bbox[0] / 1000), |
|
height * (bbox[1] / 1000), |
|
width * (bbox[2] / 1000), |
|
height * (bbox[3] / 1000), |
|
] |
|
|
|
def adjacent(w1, w2): |
|
if w1['label'] == w2['label'] and abs(w1['id'] - w2['id']) == 1: |
|
return True |
|
return False |
|
|
|
def random_color(): |
|
return np.random.randint(0, 255, 3) |
|
|
|
def image_label_2_color(annotation): |
|
if 'output' in annotation.keys(): |
|
image_labels = set([span['label'] for span in annotation['output']]) |
|
label2color = {f'{label}': (random_color()[0], random_color()[ |
|
1], random_color()[2]) for label in image_labels} |
|
return label2color |
|
else: |
|
raise ValueError('please use "output" as annotation key') |
|
|
|
def load_model(model_path): |
|
model = AutoModelForTokenClassification.from_pretrained(model_path) |
|
return model |
|
|
|
def load_processor(): |
|
processor = AutoProcessor.from_pretrained( |
|
"microsoft/layoutlmv3-base", apply_ocr=False) |
|
return processor |
|
|