Upload files to "/"

This commit is contained in:
2026-05-08 13:08:08 +00:00
commit dc6c1662ed
5 changed files with 1520 additions and 0 deletions

275
pck_26ai_apis.plb Normal file
View File

@@ -0,0 +1,275 @@
create or replace package body pck_26ai_apis
as
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')
as
--
-- Gerar audio a partir de TXT
--
-- API para gerar speech do resultado: https://docs.oracle.com/en-us/iaas/api/#/en/speech/20220101/SynthesizeSpeech/SynthesizeSpeech
-- https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/run-workshop?p210_wid=3135&p210_wec=&session=107708964662539
--
-- Text to Speech is only available in the US West (Phoenix) commercial region.
-- https://docs.oracle.com/en-us/iaas/Content/speech/using/speech.htm
-- Text to speech supports maximum 10000 characters per request.
--
-- Pre requisito: https://docs.oracle.com/en-us/iaas/Content/speech/using/policies.htm
-- Policy: ai-service-speech-family
--
-- ALLOW GROUP <my_group> TO USE ai-services IN COMPARTMENT autonomous-db-compartment
--
--
-- URL da API OCI Synthesize Speech
l_url VARCHAR2(4000) := 'https://speech.aiservice.us-phoenix-1.oci.oraclecloud.com/20220101/actions/synthesizeSpeech';
-- definicao do object storage para armazenar o MP3
-- especifique com / no final
v_object_storage varchar2(500) := p_bucket;
-- Variáveis para a requisição e resposta
l_request_body CLOB;
l_request_blob BLOB;
l_response_body BLOB;
begin
-- Criar o JSON do corpo da requisição
l_request_body := '{
"audioConfig": {
"configType": "BASE_AUDIO_CONFIG"
},
"compartmentId": "' || p_comp_id || '",
"configuration": {
"modelDetails": {
"modelName": "TTS_2_NATURAL",
"languageCode":"' || p_language_code || '",
"voiceId": "' || p_speaker || '"
},
"modelFamily": "ORACLE",
"speechSettings": {
"outputFormat": "MP3",
"sampleRateInHz": 23600,
"textType": "TEXT"
}
},
"isStreamEnabled": false,
"text": "' || replace(replace(replace(replace(p_text,
chr(13),''),
chr(10),''),
'"',''),
'\n','') || '" }';
l_request_blob := apex_util.clob_to_blob(p_clob => l_request_body,p_charset => 'AL32UTF8');
-- Limpar os cabeçalhos antes de definir novos
APEX_WEB_SERVICE.CLEAR_REQUEST_HEADERS;
-- Definir os cabeçalhos da requisição
APEX_WEB_SERVICE.G_REQUEST_HEADERS(1).NAME := 'Content-Type';
APEX_WEB_SERVICE.G_REQUEST_HEADERS(1).VALUE := 'application/json';
APEX_WEB_SERVICE.G_REQUEST_HEADERS(2).NAME := 'Accept';
APEX_WEB_SERVICE.G_REQUEST_HEADERS(2).VALUE := 'audio/mpeg';
-- Chamar a API REST da OCI
l_response_body := APEX_WEB_SERVICE.MAKE_REST_REQUEST_B(
p_url => l_url,
p_http_method => 'POST',
p_body_blob => l_request_blob,
p_credential_static_id => 'apex_cred'
);
-- Salvar o áudio no Object Storage
DBMS_CLOUD.PUT_OBJECT(
credential_name => p_credential,
object_uri => v_object_storage || p_filename,
contents => l_response_body
);
end;
--
-- Visio: https://docs.oracle.com/pt-br/solutions/ai-vision-extract-data/index.html#GUID-A4FD65D0-BF62-472B-B4C7-0ADF5425A566
--
function api_visio( p_id in number, p_feature_type in varchar2 , p_comp_id in varchar2)
return clob
as
/*
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.
*/
base64_image CLOB;
v_endpoint varchar2(500) := 'https://vision.aiservice.us-chicago-1.oci.oraclecloud.com/20220125/actions/analyzeImage';
request_json CLOB;
l_response_body clob;
begin
select APEX_WEB_SERVICE.BLOB2CLOBBASE64( FILE_BLOB ,'N','N' )
into base64_image
from TB_26AI_MANUFATURA --TB_26AI_FINANCE
where id = p_id;
request_json := to_clob('{
"compartmentId": "' || p_comp_id || '",
"image": {
"source":"INLINE",
"data":"' || base64_image || '"
},
"features":[
{
"featureType":"' || p_feature_type || '",
"maxResults": 5
}
]
}' );
-- Definir os cabeçalhos da requisição
APEX_WEB_SERVICE.G_REQUEST_HEADERS(1).NAME := 'Content-Type';
APEX_WEB_SERVICE.G_REQUEST_HEADERS(1).VALUE := 'application/json';
APEX_WEB_SERVICE.G_REQUEST_HEADERS(2).NAME := 'Accept';
APEX_WEB_SERVICE.G_REQUEST_HEADERS(2).VALUE := 'application/json';
-- Faça a chamada POST usando APEX_WEB_SERVICE e a credencial OCI
l_response_body := APEX_WEB_SERVICE.make_rest_request(
p_url => v_endpoint,
p_http_method => 'POST',
p_body => request_json,
p_credential_static_id => 'apex_cred'
);
return l_response_body;
end ;
--
-- Document Understanding: https://docs.oracle.com/en-us/iaas/api/#/en/document-understanding/20221109/
--
function api_doc_understanding(p_id in number, p_feature_type in varchar2 , p_comp_id in varchar2)
return clob
as
/*
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
KEY_VALUE_EXTRACTION
*/
v_endpoint varchar2(500) := 'https://document.aiservice.sa-saopaulo-1.oci.oraclecloud.com/20221109/actions/analyzeDocument';
request_json CLOB;
v_base64 CLOB;
l_response_body clob;
begin
select APEX_WEB_SERVICE.BLOB2CLOBBASE64( FILE_BLOB ,'N','N' )
into v_base64
from TB_26AI_MANUFATURA_CATALOGO
where id = p_id;
if upper(p_feature_type) = 'KEY_VALUE_EXTRACTION' then
request_json := to_clob('{
"compartmentId": "' || p_comp_id || '",
"features": [
{
"featureType": "' || upper(p_feature_type) || '",
"selectionMarkDetection": true
}
],
"documentType": "INVOICE",
"document": {
"source": "INLINE",
"data": "' || v_base64 || '"
}
}');
else
request_json := to_clob('{
"compartmentId": "' || p_comp_id || '",
"features": [
{
"featureType": "' || upper(p_feature_type) || '",
"selectionMarkDetection": true
}
],
"document": {
"source": "INLINE",
"data": "' || v_base64 || '"
}
}');
end if;
-- Definir os cabeçalhos da requisição
APEX_WEB_SERVICE.G_REQUEST_HEADERS(1).NAME := 'Content-Type';
APEX_WEB_SERVICE.G_REQUEST_HEADERS(1).VALUE := 'application/json';
APEX_WEB_SERVICE.G_REQUEST_HEADERS(2).NAME := 'Accept';
APEX_WEB_SERVICE.G_REQUEST_HEADERS(2).VALUE := 'application/json';
-- Faça a chamada POST usando APEX_WEB_SERVICE e a credencial OCI
l_response_body := APEX_WEB_SERVICE.make_rest_request(
p_url => v_endpoint,
p_http_method => 'POST',
p_body => request_json,
p_credential_static_id => 'apex_cred'
);
return l_response_body;
end;
--
-- Language: https://docs.oracle.com/en-us/iaas/api/#/en/language/20221001/
--
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
as
/*
https://docs.oracle.com/en-us/iaas/api/#/en/language/20221001/BatchLanguageTranslation/BatchLanguageTranslation
*/
v_endpoint varchar2(500) := 'https://language.aiservice.sa-saopaulo-1.oci.oraclecloud.com/20221001/actions/batchLanguageTranslation';
request_json CLOB;
l_response_body clob;
begin
request_json := to_clob('{
"compartmentId": "' || p_comp_id || '",
"documents":[{
"key":"1",
"text":"' || p_data_text || '",
"languageCode":"' || p_source_code || '" }],
"targetLanguageCode":"' || p_target_code || '"
}
');
-- Definir os cabeçalhos da requisição
APEX_WEB_SERVICE.G_REQUEST_HEADERS(1).NAME := 'Content-Type';
APEX_WEB_SERVICE.G_REQUEST_HEADERS(1).VALUE := 'application/json';
-- Faça a chamada POST usando APEX_WEB_SERVICE e a credencial OCI
l_response_body := APEX_WEB_SERVICE.make_rest_request(
p_url => v_endpoint,
p_http_method => 'POST',
p_body => request_json,
p_credential_static_id => 'apex_cred'
);
return json_value( l_response_body, '$.documents[0].translatedText');
end;
end; -- package;
/