275 lines
10 KiB
Plaintext
275 lines
10 KiB
Plaintext
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;
|
|
/ |