VideoAnalysis/ontologyWorking.py

56 lines
2.3 KiB
Python
Raw Normal View History

import numpy as np
2023-05-20 13:23:06 +04:00
import requests
def is_ontology_exists(uid: str, url: str) -> bool:
'''
Проверяет, существует ли онтология в сервисе.
@param uid: УИД онтологии.
@param url: Базовый URL сервиса.
'''
list_ontologies = requests.get(url).json()['response']['items']
2023-05-20 13:23:06 +04:00
for onto in list_ontologies:
if onto['uid'] == uid:
return True
return False
2023-05-20 13:23:06 +04:00
def get_entity_square(results_ndarray_i: np.ndarray) -> float:
'''
Получение площади занимаемой области.
@param results_ndarray_i: Описание местоположения объекта.
'''
2023-05-20 13:23:06 +04:00
square = float((results_ndarray_i[2] - results_ndarray_i[0]) *
(results_ndarray_i[3] - results_ndarray_i[1]))
return abs(square)
def get_request_data(entities: dict, results_ndarray: np.ndarray) -> tuple[list, list]:
'''
Формирование данных для сервиса онтологий.
@param entities: Список имён объектов.
@param results_ndarray: Результат распознавания объектов.
'''
2023-05-20 13:23:06 +04:00
classroom = 'classroom'
object_properties = list()
data_properties = list()
for i, entity in enumerate(entities): # запись в лист имен объектов и присутствие
if (results_ndarray[:, -1] == i).sum() > 0: # если объект найден
object_properties.append({'domain': entity,
'property': 'locatedIn',
'range': classroom})
else:
object_properties.append({'domain': entity,
'property': 'notLocatedIn',
'range': classroom})
for i in range(results_ndarray.shape[0]):
data_properties.append({'domain': entities[int(results_ndarray[i, 5])],
'property': 'hasArea',
'value': get_entity_square(results_ndarray[i])})
data_properties.append({'domain': entities[int(results_ndarray[i, 5])],
'property': 'hasConfidence',
'value': float(results_ndarray[i, 4])})
return object_properties, data_properties