• Aucun résultat trouvé

2 Sp´ ecification g´ eom´ etrique

2.2 Les mod` eles d’expression des sp´ ecifications g´ eom´ etriques

Como mencionado na seção 5.2.1, o banco de dados além de armazenar os dados ele também realiza determinados processamentos com mesmo. A programação destes algoritmos é realizada por meio da linguagem PL/SQL [48], na forma de funções, procedimentos e gatilhos. Numa ordem obtida durante o desenvolvimento do projeto, é descrito a seguir quatro algoritmos desenvolvidos no banco de dados. Dois deles estão dispostos no Apêndice devido ao tamanho de código.

5.4.1 Importação dos dados provenientes da concessionária

Nos processos de importação de dados dos postes, componentes (elementos) e condutores provenientes da concessionária, foi necessária a confecção de um gatilho para a conversão e ajuste do sistema de coordenadas disponibilizado. O formato disponibilizado foi o Universal Transversal de Mercator (UTM) [55], numa análise profunda das coordenadas UTM foram encontrados erros de conversão nos arquivos CSV exportados pela concessionária, com a informação de zonas erradas, o que resultou num deslocamento sistemático de coordenadas, no eixo horizontal e vertical, na faixa de dezenas de metros. O gatilho automaticamente corrige e converte as coordenadas para Latitude e Longitude em graus. Este algoritmo é descrito pelo Código Fonte 5.1 a seguir, neste caso ele é aplicado na tabela de componentes, nas tabelas de condutores e postes um algoritmo similar é utilizado.

Código Fonte 5.1. Gatilho para conversão de coordenadas UTM e correção de deslocamento.

TRIGGER "COMPONENTES_CHECK_LATLON" BEFORE INSERT ON COMPONENTES FOR EACH ROW DECLARE

X NUMBER; Y NUMBER; vv NUMBER; aa NUMBER; a1 NUMBER; a2 NUMBER; j2 NUMBER; j4 NUMBER; j6 NUMBER; Bm NUMBER; b NUMBER; Epsi NUMBER; Eps NUMBER; nab BINARY_DOUBLE; senoheps NUMBER; Delt NUMBER; TaO NUMBER; LONGITUDE NUMBER; LATITUDE NUMBER; LAT NUMBER; sa NUMBER := 6378137.000000; sb NUMBER := 6356752.314245; pi NUMBER := 3.1415926; e2 NUMBER := 0.0821; e2q NUMBER:= 0.0067; cc NUMBER := 6399593.62575867399573326110839843750000;

S1 NUMBER := -51; -- -51 para 22 e -45 para zona 23 alfa NUMBER := 0.0051;

beta NUMBER := 0.00004258201531867816992281070010;

gama NUMBER :=0.00000016740578955463136297281872 ; BEGIN

IF (TO_NUMBER(REPLACE(TO_CHAR(:new.LON),'.',',')) > 180) THEN --UTM SELECT :new.LAT INTO X from dual;

SELECT :new.LON INTO Y from dual;

X := X - 500000; --Primeiro Campo do CSV é X e é salvo em LAT. Y := Y - 10000000; --Condicionado para a zona K.

LAT := Y / ( 6366197.724 * 0.9996 ); vv := ( cc / POWER( ( 1 + ( e2q * POWER(( cos(LAT) ),2) ) ),0.5) ) * 0.9996;

aa := X / vv;

a1 := sin( 2 * LAT );

a2 := a1 * POWER(( cos(LAT) ),2);

j2 := LAT + ( a1 / 2 );

j4 := ( ( 3 * j2 ) + a2 ) / 4;

j6 := ( ( 5 * j4 ) + ( a2 * POWER(( cos(LAT) ),2)) ) / 3;

Bm := 0.9996 * cc * ( LAT - alfa * j2 + beta * j4 - gama * j6 );

b := ( Y - Bm ) / vv;

Epsi := ( ( e2q * POWER(aa,2) ) / 2 ) * POWER(( cos(LAT) ),2);

Eps := aa * ( 1 - ( Epsi / 3 ) );

nab := ( b * ( 1 - Epsi ) ) + LAT;

senoheps := ( EXP(Eps) - EXP(-Eps) ) / 2;

Delt := atan(senoheps / ( cos(nab) ) );

TaO := atan(cos(Delt) * tan(nab));

LONGITUDE := (Delt *(180 / pi ) ) + S1;

LATITUDE := ( LAT + ( 1 + e2q * (POWER(cos(LAT),2)) - ( 3 / 2 ) *

e2q * sin(LAT) * cos(LAT) * ( TaO - LAT ) ) * ( TaO - LAT ) ) * (180 / pi); SELECT REPLACE(TO_CHAR(ROUND(LATITUDE,8)),',','.') INTO :new.LAT FROM dual; SELECT REPLACE(TO_CHAR(ROUND(LONGITUDE,8)),',','.') INTO :new.LON FROM dual; END IF;

5.4.2 Inserção de nova medida e o processamento

Para inserir uma medida no banco de dados ela passa por uma série de processos antes da interface, como: geração, armazenamento, processamento, encapsulamento, compressão e transmissão. A interface é responsável na sanitização, validação e processamento destas medidas para o armazenamento no banco e futuras análises. Este processo pode ser mais bem visualizado na Figura 5.5, onde é descrito de forma resumida todo o processo, desde a inspeção até a utilização do usuário.

Figura 5.5. Fluxograma do processo de importação de medidas na interface

No acompanhamento da Figura 5.5, pode-se observar que os blocos de tonalidade da cor vermelha são os processamentos de responsabilidade do banco de dados, os de azul e turquesa pela interface WEB por meio do PHP e os blocos em tons de cinza e preto são realizados no veículo ou em computador de processamento antes da interface. Os blocos em verde são os processos de armazenamento de dados. O Código Fonte 10.1, no Apêndice, descreve os blocos de alarmes de temperatura e definição da ação, durante a execução dos gatilhos, descrito pelo bloco na Figura 5.5, é determinado à rede e o número operativo do

elemento detectado. O Código Fonte 10.1 utiliza a função que é descrita pelo Código Fonte 5.2 definido a seguir.

Código Fonte 5.2. Função para determinar a distância em quilômetros entre duas coordenadas dadas em graus.

CREATE OR REPLACE FUNCTION MVTS2.getDistanceFromLatLonInKm(lat1 NUMBER, lon1 NUMBER, lat2 NUMBER, lon2 NUMBER)

RETURN NUMBER IS DISTANCE NUMBER;

R NUMBER := 6371.000000; dLat NUMBER; dLon NUMBER; a NUMBER; c NUMBER; BEGIN dLat := deg2rad(lat2-lat1); dLon := deg2rad(lon2-lon1);

a := sin(dLat/2.0) * sin(dLat/2.0) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * sin(dLon/2.0) * sin(dLon/2.0);

c := 2 * atan2(sqrt(a), sqrt(1-a));

DISTANCE := R * c;

RETURN DISTANCE;

END getDistanceFromLatLonInKm;

O Código Fonte 5.2 é utilizado na determinação do número operativo e a rede na qual o elemento descrito na medida pertence. O algoritmo leva em consideração a curvatura da terra sendo aplicável em longas distâncias. Essa distância de pontos é calculada entre a medida e os elementos disponíveis no banco de dados, o Código Fonte 10.1 utiliza o menor valor de distância para associação de medida com elemento da base. Caso a base apresente defeito, ou um erro grande do GPS, na medida, o algoritmo determina que o número operativo e a rede do elemento fiquem como “desconhecidos”, porém não impede que o sistema gere relatório de manutenção no endereço, o que torna a base de dados do sistema como independente da concessionária. O maior revés desta caraterística é a impossibilidade de remover as medidas duplicadas somente com o processamento em banco de dados, pois é necessário que o número operativo, ou identificador, do elemento seja reconhecido para remover as medidas duplicadas, o que justifica a utilização de algoritmos de processamento de imagens para o agrupamento e descarte de medidas.

Estrutura do Pacote

Um relatório de medida, gerado pelo veículo, possui uma estrutura definida para a padronização do processo de inserção no banco de dados. Esta estrutura é compactada em um arquivo ZIP [56], que então representa uma medida, vide Figura 5.6.

Figura 5.6. Estrutura do arquivo ZIP de uma medida

No arquivo ZIP é encontrado dois arquivos JSON, em computação, um acrônimo de JavaScript Object Notation, é um formato compacto, de padrão aberto independente, de troca de dados simples e rápida entre sistemas, especificado por Douglas Crockford em 2000, que utiliza texto legível a humanos, no formato atributo-valor [57].

Os arquivos JSON fazem a especificação de todos os dados da medida e a indexação das fotos presente no arquivo ZIP, armazenando também as áreas de objetos encontrados pelo método YOLO nas imagens.

5.4.3 Remoção de medidas duplicadas

Após a inserção da medida no banco de dados, e de todas as outras importadas de uma inspeção é necessário remover as medidas duplicadas, pois um elemento pode ter inúmeras medidas devido aos diferentes ângulos de captura das imagens, repassadas do trajeto, posicionamento do GPS, e a fonte das imagens, ou seja, um dos quatro pares de

câmeras. Considerando que, uma foto processada com o YOLO, tem a probabilidade de presença do elemento, então este dado de confiabilidade é utilizado para a determinação da melhor medida do elemento detectado, de forma que, somente é considerada a medida de um elemento na qual a foto apresentar o maior valor de confiabilidade, ou seja, a medida que apresentar a maior probabilidade de ser um elemento é mantida no banco de dados, as demais são descartadas. É válido ressaltar que o tempo também é considerado pelo algoritmo, pois a medida do mesmo elemento pode ser proveniente de uma nova inspeção, este limiar temporal é de duas horas, ou seja, se às 10h um transformador foi detectado, o algoritmo não vai considerar as medidas que são de duas horas depois, às 12h, do mesmo transformador, porém vai considerar no intervalo seguinte mais duas horas e assim em diante. O que resulta em grupos de duas em duas horas, este processo pode ser acompanhado pelo Código Fonte 10.2 no Apêndice.

A escolha da confiabilidade como parâmetro de decisão do banco de dados para descarte de medidas é a mais pertinente, pois nenhum outro parâmetro pode garantir uma boa imagem da medida sem o processamento da imagem, como a distância do veículo com o elemento, origem dos pares de câmera, índice da medida para o mesmo elemento, bem como: primeira foto, última foto ou foto de índice médio.