Upload files to "/"
This commit is contained in:
347
fnc_26ai_utilities.sql
Normal file
347
fnc_26ai_utilities.sql
Normal file
@@ -0,0 +1,347 @@
|
||||
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 eminente - PRIORIDADE 0, EMERGÊNCIA (1 dia)
|
||||
# Avaliação - PRIORIDADE 4, NECESSÁRIA 210D
|
||||
# Monitoramento - PRIORIDADE 5, MONITORÁVEL 1A
|
||||
# Histórico - PRIORIDADE 6, GERENCIÁVEL 3A
|
||||
# Acompanhamento - PRIORIDADE 7, MONITORAMENTO 10 A
|
||||
# Cadastro - PRIORIDADE 8, INFORMATIVA
|
||||
Retorne apenas a classificaco como: "Risco controlável","Risco alto","Risco elevado","Risco eminente","Avaliação","Monitoramento","Histórico","Acompanhamento","Cadastro". 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;
|
||||
|
||||
|
||||
-- Carga PDFs para vetorizacao
|
||||
|
||||
BEGIN
|
||||
DBMS_CLOUD.GET_OBJECT(
|
||||
credential_name => 'OCI_CRED',
|
||||
object_uri => 'https://objectstorage.sa-saopaulo-1.oraclecloud.com/n/idi1o0a010nx/b/bucket-database-26ai/o/GED_15328_CPFL.pdf',
|
||||
directory_name => 'DATA_PUMP_DIR');
|
||||
END;
|
||||
|
||||
INSERT INTO "TB_26AI_UTILITIES_VECTOR"
|
||||
select 'GED_15328_CPFL.pdf' object_name,
|
||||
embed_id,
|
||||
text_chunk,
|
||||
embed_vector
|
||||
from dual dt
|
||||
CROSS JOIN TABLE(
|
||||
dbms_vector_chain.utl_to_embeddings(
|
||||
dbms_vector_chain.utl_to_chunks(
|
||||
dbms_vector_chain.utl_to_text( to_blob(bfilename('DATA_PUMP_DIR', 'GED_15328_CPFL.pdf' )) ),
|
||||
json('{"by":"words","max":"320","split":"sentence","normalize":"all", "overlap":50}')
|
||||
),
|
||||
json('{"provider":"database", "model":"CLIP_VIT_LARGE_PATCH14_TXT"}')
|
||||
)
|
||||
) t
|
||||
CROSS JOIN JSON_TABLE(
|
||||
t.column_value,
|
||||
'$[*]' COLUMNS (
|
||||
embed_id NUMBER PATH '$.embed_id',
|
||||
text_chunk VARCHAR2(4000) PATH '$.embed_data',
|
||||
embed_vector CLOB PATH '$.embed_vector'
|
||||
)
|
||||
) AS et;
|
||||
|
||||
Imagem
|
||||
|
||||
select DBMS_VECTOR.UTL_TO_EMBEDDING(
|
||||
to_blob(bfilename('DATA_PUMP_DIR', 'migrate.JPG')) ,
|
||||
'image',
|
||||
json('{"provider":"database", "model":"CLIP_VIT_LARGE_PATCH14_IMG"}') ) ;
|
||||
|
||||
|
||||
*/
|
||||
messages CLOB;
|
||||
params_genai CLOB;
|
||||
v_vector clob;
|
||||
p_prompt clob;
|
||||
p_prompt2 clob;
|
||||
reranked_output json;
|
||||
output CLOB;
|
||||
|
||||
v_best_text CLOB;
|
||||
v_best_score NUMBER;
|
||||
begin
|
||||
|
||||
-- Referencia Multi Modal: https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/onnx-pipeline-models-multi-modal-embedding.html
|
||||
|
||||
-- padrao 4 usa ONNX com CLIP_VIT_LARGE_PATCH14_IMG
|
||||
-- embedding abaixo usa CLIP_VIT_LARGE_PATCH14_TXT
|
||||
|
||||
SELECT json_value( fnc_26ai_embed_image_cohere(image_name => file_name,
|
||||
image_blob => file_blob,
|
||||
oci_cred => p_credential ,
|
||||
p_comp_id => p_comp_id,
|
||||
p_code_mode => 4 -- cuidado
|
||||
) , '$.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 50 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;
|
||||
|
||||
messages := RTRIM( messages , ',') ;
|
||||
|
||||
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, etc)
|
||||
Procure referencias técnicas no documento da CPFL "GED_15328_CPFL.pdf" para contextualizar e formatar a resposta.
|
||||
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 eminente - PRIORIDADE 0, EMERGÊNCIA (1 dia)
|
||||
# Avaliação - PRIORIDADE 4, NECESSÁRIA 210D
|
||||
# Monitoramento - PRIORIDADE 5, MONITORÁVEL 1A
|
||||
# Histórico - PRIORIDADE 6, GERENCIÁVEL 3A
|
||||
# Acompanhamento - PRIORIDADE 7, MONITORAMENTO 10 A
|
||||
# Cadastro - PRIORIDADE 8, INFORMATIVA
|
||||
|
||||
## Impacto Potencial na Segurança e na Operação
|
||||
Recomendações Técnicas
|
||||
Inspeção complementar (solo, térmica, LiDAR (Light Detection And Ranging), 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).
|
||||
|
||||
## FONTES:
|
||||
Sempre cite as referencias de pesquisa, como documentos PDF vetorizados.
|
||||
Fonte CPFL: https://objectstorage.sa-saopaulo-1.oraclecloud.com/n/idi1o0a010nx/b/bucket-database-26ai/o/GED_15328_CPFL.pdf
|
||||
Procure referencias IEEE e na Abrate (Fonte: 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)
|
||||
--
|
||||
/*
|
||||
--
|
||||
-- Pre Req para Re-Rank: criamos nova credential para Cohere
|
||||
-- Podemos usar ReRank como ONNX atraves de https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/onnx-pipeline-models-reranking-pipeline.html
|
||||
--
|
||||
DECLARE
|
||||
jo json_object_t;
|
||||
BEGIN
|
||||
jo := json_object_t();
|
||||
jo.put('access_token', 'xxxxxxxxxxZBDKaQjPzB2Xdt8CkMtNz3KYRc1H0PjzRf6wkHxxxxxxxxxxxxx'); -- Token em https://dashboard.cohere.com/
|
||||
DBMS_VECTOR.CREATE_CREDENTIAL(
|
||||
credential_name => 'COHERE_CRED',
|
||||
params => json(jo.to_string));
|
||||
END;
|
||||
*/
|
||||
/* params_genai := '{"provider": "cohere",
|
||||
"credential_name": "COHERE_CRED",
|
||||
"url": "https://api.cohere.com/v1/rerank",
|
||||
"model": "rerank-v3.5",
|
||||
"return_documents": true,
|
||||
"top_n": 15 }'; -- era 20
|
||||
|
||||
reranked_output := dbms_vector_chain.rerank( p_prompt , json('{ "documents": [ ' || messages || '] }'), json(params_genai));
|
||||
|
||||
p_prompt2 := JSON_SERIALIZE(reranked_output) ;
|
||||
|
||||
-- Score do top resultado
|
||||
v_best_score := JSON_VALUE(
|
||||
p_prompt2,
|
||||
'$[0].relevance_score'
|
||||
RETURNING NUMBER
|
||||
NULL ON ERROR -- ← evita exception silenciosa
|
||||
);
|
||||
|
||||
-- Texto do top resultado
|
||||
-- Campo correto é 'document.text', não 'content'
|
||||
v_best_text := JSON_VALUE(
|
||||
p_prompt2,
|
||||
'$[0].document.text'
|
||||
RETURNING CLOB
|
||||
NULL ON ERROR
|
||||
); */
|
||||
|
||||
-- rag
|
||||
output := fnc_26ai_rag_utilities(p_prompt || '. Dados: ' || messages , p_credential, p_image_id, p_comp_id);
|
||||
|
||||
return output ;
|
||||
|
||||
end;
|
||||
/
|
||||
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;
|
||||
/
|
||||
49
pck_26ai_apis.sql
Normal file
49
pck_26ai_apis.sql
Normal file
@@ -0,0 +1,49 @@
|
||||
create or replace package pck_26ai_apis
|
||||
as
|
||||
/*
|
||||
|
||||
Criado por: fernando.leal@oracle.com
|
||||
Data: Oct/2025
|
||||
Objetivo: demonstrar casos de uso do Oracle AI Database 26ai
|
||||
|
||||
v1 - package de chamada a APIs - leal
|
||||
|
||||
*/
|
||||
procedure api_text2speech (p_text in varchar2,
|
||||
p_filename in varchar2,
|
||||
p_bucket in varchar2 ,
|
||||
p_comp_id in varchar2,
|
||||
p_credential in varchar2 default 'OCI_CRED',
|
||||
p_speaker in varchar2 default 'Felix',
|
||||
p_language_code in varchar2 default 'pt-BR');
|
||||
/*
|
||||
https://docs.oracle.com/en-us/iaas/api/#/en/speech/20220101/SynthesizeSpeech/SynthesizeSpeech
|
||||
*/
|
||||
|
||||
function api_visio( p_id in number, p_feature_type in varchar2 , p_comp_id in varchar2) return clob;
|
||||
/*
|
||||
p_feature_type: https://docs.oracle.com/en-us/iaas/api/#/en/vision/20220125/datatypes/ImageFeature
|
||||
|
||||
IMAGE_CLASSIFICATION: Label the image.
|
||||
OBJECT_DETECTION: Identify objects in the image with bounding boxes.
|
||||
TEXT_DETECTION: Recognize text at the word and line level.
|
||||
FACE_DETECTION: Identify faces in the image with bounding boxes and face landmarks.
|
||||
*/
|
||||
|
||||
function api_doc_understanding(p_id in number, p_feature_type in varchar2 , p_comp_id in varchar2) return clob;
|
||||
/*
|
||||
p_feature_type: https://docs.oracle.com/en-us/iaas/api/#/en/document-understanding/20221109/datatypes/DocumentClassificationFeature
|
||||
|
||||
DOCUMENT_CLASSIFICATION
|
||||
TABLE_EXTRACTION
|
||||
TEXT_EXTRACTION
|
||||
LANGUAGE_CLASSIFICATION
|
||||
*/
|
||||
|
||||
function api_translate(p_data_text in clob,p_source_code in varchar2 default 'en', p_target_code in varchar2 default 'pt-BR' , p_comp_id in varchar2) return clob;
|
||||
/*
|
||||
https://docs.oracle.com/en-us/iaas/api/#/en/language/20221001/BatchLanguageTranslation/BatchLanguageTranslation
|
||||
*/
|
||||
|
||||
end;
|
||||
/
|
||||
95
pkg_26ai_auto_load.sql
Normal file
95
pkg_26ai_auto_load.sql
Normal file
@@ -0,0 +1,95 @@
|
||||
create or replace package pkg_26ai_auto_load
|
||||
as
|
||||
|
||||
/*
|
||||
|
||||
-- Teste
|
||||
|
||||
-- gerar arquivos a serem vetorizados
|
||||
begin
|
||||
PKG_26AI_AUTO_LOAD.prc_refresh_files(p_mimetype => 'PDF',p_embedding_name=>'COHERE');
|
||||
PKG_26AI_AUTO_LOAD.prc_refresh_files(p_mimetype => 'JPG',p_embedding_name=>'COHERE');
|
||||
PKG_26AI_AUTO_LOAD.prc_refresh_files(p_mimetype => 'CLOB',p_embedding_name=>'COHERE');
|
||||
end;
|
||||
|
||||
-- liste de dados a serem vetorizados. Status incial: NULL
|
||||
select * from tb_26ai_auto_load
|
||||
|
||||
-- reserva de dados para associar aos jobs que executarao, marcado status como R
|
||||
-- CUIDADO: nao preciso executar manulamnete opois faz parte da rotina de embedding AUTOMATICAMENTE
|
||||
declare
|
||||
v_name SYS.ODCIVARCHAR2LIST;
|
||||
begin
|
||||
PKG_26AI_AUTO_LOAD.prc_reserve_files (
|
||||
p_limit => 10,
|
||||
p_worker_id => 1 ,
|
||||
p_oci_cred => 'OCI_CRED',
|
||||
p_bucket => '',
|
||||
p_docs =>v_name
|
||||
) ;
|
||||
end;
|
||||
|
||||
-- liste de dados a serem vetorizados. Status reservado por worker id em R
|
||||
select * from tb_26ai_auto_load
|
||||
|
||||
-- Embedding
|
||||
-- CUIDADO: ja faz o reserve de acordo com p_worker_id e p_limit
|
||||
declare
|
||||
v_name SYS.ODCIVARCHAR2LIST;
|
||||
begin
|
||||
PKG_26AI_AUTO_LOAD.proc_embed_files (
|
||||
p_limit => 10,
|
||||
p_worker_id => 1 ,
|
||||
p_stop_process_list => 'N'
|
||||
) ;
|
||||
end;
|
||||
|
||||
-- liste status
|
||||
select * from tb_26ai_auto_load
|
||||
|
||||
-- erro
|
||||
select * from tb_26ai_auto_load_debug
|
||||
|
||||
-- vector
|
||||
select * from tb_26ai_auto_load_vector
|
||||
|
||||
-- em caso de erro nos TESTES
|
||||
begin
|
||||
update tb_26ai_auto_load set ERROR_MSG= null, status = NULL, WORKER_ID = null where status is not null ;
|
||||
delete tb_26ai_auto_load_debug;
|
||||
delete tb_26ai_auto_load_vector;
|
||||
end;
|
||||
|
||||
|
||||
*/
|
||||
c_embedding_name CONSTANT VARCHAR2(10) := 'ONNX-E5'; -- requer ajuste do JSON usado nas rotinas de embedding no BODY
|
||||
|
||||
PROCEDURE prc_refresh_files(p_oci_cred IN VARCHAR2 default 'OCI_CRED',
|
||||
p_bucket in varchar2 default null,
|
||||
p_mimetype in varchar2 default 'PDF',
|
||||
p_embedding_name in varchar2 default 'COHERE');
|
||||
|
||||
PROCEDURE prc_reserve_files (
|
||||
p_limit IN NUMBER,
|
||||
p_worker_id IN VARCHAR2,
|
||||
p_oci_cred IN VARCHAR2 default 'OCI_CRED',
|
||||
p_bucket in varchar2 ,
|
||||
p_docs OUT SYS.ODCIVARCHAR2LIST,
|
||||
p_mimetype in varchar2 default 'PDF',
|
||||
p_embedding_name in varchar2 default 'COHERE' ) ;
|
||||
|
||||
PROCEDURE proc_embed_files(p_limit in number default 10,
|
||||
p_worker_id in number,
|
||||
p_stop_process_list in varchar2 default 'N',
|
||||
p_mimetype in varchar2 default 'PDF',
|
||||
p_embedding_name in varchar2 default 'COHERE');
|
||||
|
||||
PROCEDURE proc_remove_jobs;
|
||||
|
||||
PROCEDURE proc_add_jobs(p_limit in number,
|
||||
p_total_jobs in number,
|
||||
p_mimetype in varchar2 default 'PDF',
|
||||
p_embedding_name in varchar2 default 'COHERE');
|
||||
|
||||
end;
|
||||
/
|
||||
Reference in New Issue
Block a user