241 lines
9.6 KiB
SQL
241 lines
9.6 KiB
SQL
create or replace function fnc_26ai_utilities( p_image_id in number,
|
|
p_comp_id in varchar2,
|
|
p_credential in varchar2 default 'OCI_CRED')
|
|
return clob
|
|
as
|
|
/*
|
|
|
|
Criado por: fernando.leal@oracle.com
|
|
Data: Dez/2025
|
|
Objetivo: demonstrar casos de uso do Oracle AI Database 26ai
|
|
|
|
v1 - funcao principal de Utilities, com similaridade e RAG - leal
|
|
|
|
|
|
-- carga imagens
|
|
|
|
DECLARE
|
|
v_bucket VARCHAR2(2000) :=
|
|
'https://objectstorage.sa-saopaulo-1.oraclecloud.com/n/idi1o0a010nx/b/bucket-img-tmp-torrescarga/o/';
|
|
BEGIN
|
|
|
|
-- lista todos arquivos do bucket que ainda nao foram vetorizados
|
|
FOR r1 IN (
|
|
SELECT object_name,
|
|
substr(object_name,1,instr(object_name,'/')-1) torre_name,
|
|
substr(object_name,instr(object_name,'/')+1) file_name
|
|
FROM DBMS_CLOUD.LIST_OBJECTS('OCI_CRED', 'https://objectstorage.sa-saopaulo-1.oraclecloud.com/n/idi1o0a010nx/b/bucket-img-tmp-torrescarga/o')
|
|
WHERE lower(object_name) LIKE '%.jpg'
|
|
AND object_name NOT IN (
|
|
SELECT object_name
|
|
FROM TB_26AI_UTILITIES_LOG
|
|
WHERE status = 'P'
|
|
)
|
|
) LOOP
|
|
|
|
-- copia temporaria do PDF para o DIRECTORY
|
|
-- exemplo > https://objectstorage.sa-saopaulo-1.oraclecloud.com/n/idi1o0a010nx/b/bucket-img-tmp-torrescarga/o/T.472%2FDJI_0167.JPG
|
|
DBMS_CLOUD.GET_OBJECT(
|
|
credential_name => 'OCI_CRED',
|
|
object_uri => v_bucket || replace( r1.object_name, '%2F', '/') ,
|
|
directory_name => 'DATA_PUMP_DIR'
|
|
);
|
|
|
|
-- teste: select * FROM DBMS_CLOUD.LIST_FILES ('DATA_PUMP_DIR') where object_name like 'DJI%'
|
|
|
|
|
|
insert into TB_26AI_UTILITIES
|
|
( FILE_NAME,
|
|
FILE_MIMETYPE,
|
|
FILE_BLOB,
|
|
UPDATED_DATE,
|
|
CREATED_BY,
|
|
REFERENCE_NAME)
|
|
values(
|
|
r1.file_name,
|
|
'image/jpeg',
|
|
to_blob(bfilename('DATA_PUMP_DIR', r1.file_name )),
|
|
sysdate,
|
|
'admin2',
|
|
r1.torre_name
|
|
);
|
|
|
|
INSERT INTO TB_26AI_UTILITIES_LOG
|
|
VALUES (sysdate, r1.object_name, 'P');
|
|
|
|
COMMIT;
|
|
|
|
-- remove o arquivo temporario armazenado no DATA_PUMP_DIR
|
|
DBMS_CLOUD.DELETE_FILE(
|
|
directory_name => 'DATA_PUMP_DIR',
|
|
file_name => r1.file_name
|
|
);
|
|
|
|
END LOOP;
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
|
--Ajuste de Status
|
|
|
|
declare
|
|
v_status varchar2(200);
|
|
v_has number;
|
|
begin
|
|
|
|
for r1 in (select * from TB_26AI_UTILITIES where status_torre is null ) loop
|
|
|
|
v_status := FNC_26ai_rag ( 'A partir deste texto retorne uma "Classificação da Gravidade":
|
|
# Risco controlável - PRIORIDADE 3, PRIORITÁRIA 60D
|
|
# Risco alto - PRIORIDADE 2, URGÊNCIA 30D
|
|
# Risco elevado - PRIORIDADE 1, URGÊNCIA 15D
|
|
# Risco iminente - PRIORIDADE 0, EMERGÊNCIA (1 dia)
|
|
Retorne apenas a classificaco como: "Risco controlável","Risco alto","Risco elevado","Risco iminente". Nenhum comentario é permitido.
|
|
Dados: ' || fnc_26ai_utilities( p_image_id => r1.id ,
|
|
p_comp_id => 'ocid1.compartment.oc1..aaaaaaaakvd4bq4b3n7yn3gjjqzfhsl62dec44tjvi2iwa3sugw5frgfpzea' ) ,
|
|
'OCI_CRED',
|
|
''
|
|
) ;
|
|
|
|
update TB_26AI_UTILITIES set status_torre = v_status where id = r1.id;
|
|
commit;
|
|
|
|
end loop;
|
|
|
|
end;
|
|
|
|
-- Geo
|
|
|
|
begin
|
|
UPDATE TB_26AI_UTILITIES t
|
|
SET GEOMETRY = SDO_GEOMETRY(
|
|
2001, -- 2D point
|
|
4326, -- SRID
|
|
SDO_POINT_TYPE(t.LONGITUDE, t.LATITUDE, NULL),
|
|
NULL,
|
|
NULL
|
|
)
|
|
where GEOMETRY is null ;
|
|
commit;
|
|
end;
|
|
|
|
*/
|
|
messages CLOB;
|
|
params_genai CLOB;
|
|
v_vector clob;
|
|
p_prompt clob;
|
|
p_prompt2 clob;
|
|
reranked_output json;
|
|
output CLOB;
|
|
begin
|
|
|
|
SELECT json_value( fnc_26ai_embed_image_cohere(file_name, file_blob, p_credential , p_comp_id) , '$.embeddings[*].vector()')
|
|
INTO v_vector
|
|
from TB_26AI_UTILITIES
|
|
where id = p_image_id;
|
|
|
|
for message_cursor in (
|
|
|
|
SELECT embed_data , source
|
|
FROM TB_26AI_UTILITIES_VECTOR
|
|
ORDER BY VECTOR_DISTANCE(EMBED_VECTOR, v_vector , COSINE )
|
|
FETCH EXACT FIRST 20 ROWS ONLY -- era 60
|
|
) loop
|
|
|
|
messages := messages || '"' || replace(replace(replace(replace(message_cursor.embed_data || ' (' || message_cursor.source || ')',chr(10),null),chr(13),null),'"',''),'''','') || '",' ;
|
|
|
|
END LOOP;
|
|
|
|
p_prompt := 'Você é um especialista em inspeção aérea de linhas de transmissão utilizando drones, com profundo conhecimento em engenharia estrutural, manutenção de ativos elétricos de alta tensão e avaliação de riscos operacionais.
|
|
Sua tarefa é analisar imagens aéreas (ou frames de vídeo) capturadas por drones de inspeção, identificando falhas visíveis, sinais precoces de degradação e condições de risco em torres de transmissão e seus componentes associados.
|
|
|
|
## Objetivo da Análise
|
|
Realizar uma avaliação visual detalhada e sistemática, explorando a vantagem do drone de acessar pontos elevados, ângulos não convencionais e regiões críticas, com foco em:
|
|
Detecção proativa de anomalias que possam evoluir para falhas
|
|
Detecção reativa de danos evidentes já instalados
|
|
Priorização de riscos à segurança e à continuidade do serviço
|
|
|
|
## Considerações Específicas para Imagens de Drones
|
|
Durante a análise, leve em conta que:
|
|
A imagem pode apresentar variação de iluminação, sombras fortes ou reflexos
|
|
Alguns componentes podem estar parcialmente ocultos por cabos, vegetação ou pela própria estrutura
|
|
A resolução e o nível de zoom podem variar entre diferentes regiões da imagem
|
|
A perspectiva aérea pode causar distorções de escala ou alinhamento
|
|
Sempre que houver incerteza, registre explicitamente a limitação visual.
|
|
|
|
## Pontos de Atenção Obrigatórios
|
|
1. Estrutura da Torre (Foco Aéreo)
|
|
Deformações, empenamentos ou desalinhamentos visíveis nos braços, travessas e montantes
|
|
Elementos estruturais ausentes, soltos ou deslocados
|
|
Parafusos, porcas e chapas de ligação com sinais de afrouxamento ou corrosão
|
|
Condições da base ou fundação quando visíveis a partir do voo
|
|
2. Corrosão e Degradação de Materiais
|
|
Corrosão superficial vs. corrosão avançada (escamas, perda de seção)
|
|
Concentração de corrosão em pontos críticos:
|
|
Juntas estruturais
|
|
Interfaces parafusadas
|
|
Regiões de acúmulo de água
|
|
Comparação visual entre diferentes partes da torre para identificar degradação desigual
|
|
3. Isoladores (Alta Prioridade em Inspeção por Drone)
|
|
Isoladores quebrados, trincados, lascados ou ausentes
|
|
Cadeias de isoladores desalinhadas ou com inclinação anormal
|
|
Sinais de contaminação severa (poluição, poeira, salinidade, fezes de aves)
|
|
Diferenças de aparência entre isoladores da mesma cadeia
|
|
4. Condutores, Cabos e Acessórios
|
|
Grampos de ancoragem e suspensão com desgaste ou deslocamento
|
|
Espaçadores e amortecedores de vibração ausentes, danificados ou fora de posição
|
|
Cabos com desgaste, fios rompidos, desalinhamento ou marcas térmicas
|
|
Distância inadequada entre cabos, torre e outros elementos
|
|
5. Riscos à Segurança e Operação
|
|
Qualquer condição que possa resultar em:
|
|
Curto-circuito
|
|
Descarga elétrica
|
|
Queda de componentes
|
|
Colapso estrutural parcial ou total
|
|
Presença de objetos estranhos (vegetação, pipas, cabos, ninhos) próximos a condutores ou isoladores
|
|
Situações que demandem intervenção imediata, monitoramento reforçado ou manutenção programada
|
|
|
|
## Formato da Resposta Esperada
|
|
Organize sua análise da seguinte forma:
|
|
Resumo Geral da Condição da Torre (Visão Aérea)
|
|
Anomalias Identificadas
|
|
Descrição clara
|
|
Localização aproximada (ex.: braço superior direito, cadeia de isoladores fase B)
|
|
Classificação da Gravidade
|
|
# Risco controlável - PRIORIDADE 3, PRIORITÁRIA 60D
|
|
# Risco alto - PRIORIDADE 2, URGÊNCIA 30D
|
|
# Risco elevado - PRIORIDADE 1, URGÊNCIA 15D
|
|
# Risco iminente - PRIORIDADE 0, EMERGÊNCIA (1 dia)
|
|
Impacto Potencial na Segurança e na Operação
|
|
Recomendações Técnicas
|
|
Inspeção complementar (solo, térmica, LiDAR, etc.)
|
|
Manutenção corretiva ou preventiva
|
|
Caso não sejam identificadas anomalias relevantes, declare explicitamente que nenhum problema visível foi detectado nas imagens analisadas, ressaltando as limitações inerentes à inspeção por drone (ângulo, resolução, oclusões).
|
|
## Sempre cite as referencias de pesquisa, como documentos PDF vetorizados. Procure e cite também referencias da ABRATE: https://abrate.org.br/ ';
|
|
|
|
-- cuidado com temperatura usando "." ou ","
|
|
execute immediate('alter session set nls_numeric_characters=''.,'' ');
|
|
|
|
--
|
|
-- ReRank (https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/use-reranking-better-rag-results.html)
|
|
--
|
|
params_genai := '{"provider": "cohere",
|
|
"credential_name": "COHERE_CRED",
|
|
"url": "https://api.cohere.com/v1/rerank",
|
|
"model": "rerank-v3.5",
|
|
"return_documents": true,
|
|
"top_n": 5 }'; -- era 20
|
|
|
|
reranked_output := dbms_vector_chain.rerank( p_prompt , json('{ "documents": [ ' || messages || '] }'), json(params_genai));
|
|
|
|
p_prompt2 := p_prompt || '. Informações obtidas para a imagem : ' || JSON_VALUE( JSON_SERIALIZE(reranked_output), '$[0].content' );
|
|
|
|
-- rag
|
|
output := fnc_26ai_rag_utilities(p_prompt2 , p_credential, p_image_id, p_comp_id);
|
|
|
|
return output ;
|
|
|
|
end;
|
|
/ |