import numpy as np import requests def is_ontology_exists(uid: str, url: str) -> bool: ''' Проверяет, существует ли онтология в сервисе. @param uid: УИД онтологии. @param url: Базовый URL сервиса. ''' list_ontologies = requests.get(url).json()['response']['items'] for onto in list_ontologies: if onto['uid'] == uid: return True return False def rename_entity(list_names: dict) -> dict: ''' Нормализация названий объектов. @param list_names: Список названий объектов. ''' temp_list = list() for entity in list_names.values(): entity: str temp_list.append(entity.title().replace(' ', '')) return temp_list def get_entity_square(width: float, height: float) -> float: ''' Получение площади занимаемой области. @param width: Ширина области в px. @param height: Высота области в px. ''' return abs(width * height) def get_request_data(entities: dict, objects: np.ndarray, confs: np.ndarray, boxes: np.ndarray) -> tuple[list, list]: ''' Формирование данных для сервиса онтологий. @param entities: Список имён объектов. @param results_ndarray: Результат распознавания объектов. ''' classroom = 'classroom' entities = rename_entity(entities) object_properties = list() data_properties = list() for entity_idx, entity in enumerate(entities): if (entity_idx in objects): object_properties.append({'domain': entity, 'property': 'locatedIn', 'range': classroom}) else: object_properties.append({'domain': entity, 'property': 'notLocatedIn', 'range': classroom}) for object_idx, object in enumerate(objects): conf = confs[object_idx] box = boxes[object_idx] entity = entities[object.item()] data_properties.append({'domain': entity, 'property': 'hasArea', 'value': get_entity_square(float(box[2]), float(box[3]))}) data_properties.append({'domain': entity, 'property': 'hasConfidence', 'value': float(conf)}) return object_properties, data_properties