Upload files to "/"
This commit is contained in:
241
fnc_26ai_utilities_V2.sql
Normal file
241
fnc_26ai_utilities_V2.sql
Normal file
@@ -0,0 +1,241 @@
|
||||
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;
|
||||
/
|
||||
Reference in New Issue
Block a user