Deteção de escrita manual com reconhecimento ótico de carateres (OCR)
A API Vision pode detetar e extrair texto de imagens:
DOCUMENT_TEXT_DETECTIONextrai texto de uma imagem (ou de um ficheiro); a resposta é otimizada para texto denso e documentos. O JSON inclui informações sobre páginas, blocos, parágrafos, palavras e quebras.
Uma utilização específica de DOCUMENT_TEXT_DETECTION é detetar escrita manual numa imagem.

Pedidos de deteção de texto em documentos
Configure o seu Google Cloud projeto e autenticação
Se não tiver criado um Google Cloud projeto, faça-o agora. Expanda esta secção para ver instruções.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Vision API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Configure a CLI gcloud para usar a sua identidade federada.
Para mais informações, consulte o artigo Inicie sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud initDetete texto de documentos numa imagem local
Pode usar a API Vision para realizar a deteção de caraterísticas num ficheiro de imagem local.
Para pedidos REST, envie o conteúdo do ficheiro de imagem como uma string codificada em base64 no corpo do pedido.
Para pedidos da
gcloude da biblioteca de cliente, especifique o caminho para uma imagem local no seu pedido.REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- BASE64_ENCODED_IMAGE: a representação base64 (string ASCII) dos dados da imagem binária. Esta string deve ser semelhante à
seguinte string:
/9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
- PROJECT_ID: o ID do seu Google Cloud projeto.
Método HTTP e URL:
POST https://vision.googleapis.com/v1/images:annotate
Corpo JSON do pedido:
{ "requests": [ { "image": { "content": "BASE64_ENCODED_IMAGE" }, "features": [ { "type": "DOCUMENT_TEXT_DETECTION" } ] } ] }Para enviar o seu pedido, escolha uma destas opções:
curl
Guarde o corpo do pedido num ficheiro com o nome
request.json, e execute o seguinte comando:curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://vision.googleapis.com/v1/images:annotate"PowerShell
Guarde o corpo do pedido num ficheiro com o nome
request.json, e execute o seguinte comando:$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/images:annotate" | Select-Object -Expand ContentSe o pedido for bem-sucedido, o servidor devolve um código de estado HTTP
200 OKe a resposta no formato JSON.Resposta
{ "responses": [ { "textAnnotations": [ { "locale": "en", "description": "O Google Cloud Platform\n", "boundingPoly": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] } }, ], "fullTextAnnotation": { "pages": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "width": 281, "height": 44, "blocks": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] }, "paragraphs": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] }, "words": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 23, "y": 11 }, { "x": 23, "y": 37 }, { "x": 14, "y": 37 } ] }, "symbols": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ], "detectedBreak": { "type": "SPACE" } }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 23, "y": 11 }, { "x": 23, "y": 37 }, { "x": 14, "y": 37 } ] }, "text": "O" } ] }, ] } ], "blockType": "TEXT" } ] } ], "text": "Google Cloud Platform\n" } } ] }Go
Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API GoVision.
Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
// detectDocumentText gets the full document text from the Vision API for an image at the given file path. func detectDocumentText(w io.Writer, file string) error { ctx := context.Background() client, err := vision.NewImageAnnotatorClient(ctx) if err != nil { return err } f, err := os.Open(file) if err != nil { return err } defer f.Close() image, err := vision.NewImageFromReader(f) if err != nil { return err } annotation, err := client.DetectDocumentText(ctx, image, nil) if err != nil { return err } if annotation == nil { fmt.Fprintln(w, "No text found.") } else { fmt.Fprintln(w, "Document Text:") fmt.Fprintf(w, "%q\n", annotation.Text) fmt.Fprintln(w, "Pages:") for _, page := range annotation.Pages { fmt.Fprintf(w, "\tConfidence: %f, Width: %d, Height: %d\n", page.Confidence, page.Width, page.Height) fmt.Fprintln(w, "\tBlocks:") for _, block := range page.Blocks { fmt.Fprintf(w, "\t\tConfidence: %f, Block type: %v\n", block.Confidence, block.BlockType) fmt.Fprintln(w, "\t\tParagraphs:") for _, paragraph := range block.Paragraphs { fmt.Fprintf(w, "\t\t\tConfidence: %f", paragraph.Confidence) fmt.Fprintln(w, "\t\t\tWords:") for _, word := range paragraph.Words { symbols := make([]string, len(word.Symbols)) for i, s := range word.Symbols { symbols[i] = s.Text } wordText := strings.Join(symbols, "") fmt.Fprintf(w, "\t\t\t\tConfidence: %f, Symbols: %s\n", word.Confidence, wordText) } } } } } return nil }Java
Antes de experimentar este exemplo, siga as instruções de configuração do Java no guia de início rápido da API Vision com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Vision Java.
public static void detectDocumentText(String filePath) throws IOException { List<AnnotateImageRequest> requests = new ArrayList<>(); ByteString imgBytes = ByteString.readFrom(new FileInputStream(filePath)); Image img = Image.newBuilder().setContent(imgBytes).build(); Feature feat = Feature.newBuilder().setType(Type.DOCUMENT_TEXT_DETECTION).build(); AnnotateImageRequest request = AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build(); requests.add(request); // Initialize client that will be used to send requests. This client only needs to be created // once, and can be reused for multiple requests. After completing all of your requests, call // the "close" method on the client to safely clean up any remaining background resources. try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) { BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); List<AnnotateImageResponse> responses = response.getResponsesList(); client.close(); for (AnnotateImageResponse res : responses) { if (res.hasError()) { System.out.format("Error: %s%n", res.getError().getMessage()); return; } // For full list of available annotations, see http://g.co/cloud/vision/docs TextAnnotation annotation = res.getFullTextAnnotation(); for (Page page : annotation.getPagesList()) { String pageText = ""; for (Block block : page.getBlocksList()) { String blockText = ""; for (Paragraph para : block.getParagraphsList()) { String paraText = ""; for (Word word : para.getWordsList()) { String wordText = ""; for (Symbol symbol : word.getSymbolsList()) { wordText = wordText + symbol.getText(); System.out.format( "Symbol text: %s (confidence: %f)%n", symbol.getText(), symbol.getConfidence()); } System.out.format( "Word text: %s (confidence: %f)%n%n", wordText, word.getConfidence()); paraText = String.format("%s %s", paraText, wordText); } // Output Example using Paragraph: System.out.println("%nParagraph: %n" + paraText); System.out.format("Paragraph Confidence: %f%n", para.getConfidence()); blockText = blockText + paraText; } pageText = pageText + blockText; } } System.out.println("%nComplete annotation:"); System.out.println(annotation.getText()); } } }Node.js
Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Node.jsVision.
Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
// Imports the Google Cloud client library const vision = require('@google-cloud/vision'); // Creates a client const client = new vision.ImageAnnotatorClient(); /** * TODO(developer): Uncomment the following line before running the sample. */ // const fileName = 'Local image file, e.g. /path/to/image.png'; // Read a local image as a text document const [result] = await client.documentTextDetection(fileName); const fullTextAnnotation = result.fullTextAnnotation; console.log(`Full text: ${fullTextAnnotation.text}`); fullTextAnnotation.pages.forEach(page => { page.blocks.forEach(block => { console.log(`Block confidence: ${block.confidence}`); block.paragraphs.forEach(paragraph => { console.log(`Paragraph confidence: ${paragraph.confidence}`); paragraph.words.forEach(word => { const wordText = word.symbols.map(s => s.text).join(''); console.log(`Word text: ${wordText}`); console.log(`Word confidence: ${word.confidence}`); word.symbols.forEach(symbol => { console.log(`Symbol text: ${symbol.text}`); console.log(`Symbol confidence: ${symbol.confidence}`); }); }); }); }); });Python
Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API PythonVision.
Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
def detect_document(path): """Detects document features in an image.""" from google.cloud import vision client = vision.ImageAnnotatorClient() with open(path, "rb") as image_file: content = image_file.read() image = vision.Image(content=content) response = client.document_text_detection(image=image) for page in response.full_text_annotation.pages: for block in page.blocks: print(f"\nBlock confidence: {block.confidence}\n") for paragraph in block.paragraphs: print("Paragraph confidence: {}".format(paragraph.confidence)) for word in paragraph.words: word_text = "".join([symbol.text for symbol in word.symbols]) print( "Word text: {} (confidence: {})".format( word_text, word.confidence ) ) for symbol in word.symbols: print( "\tSymbol: {} (confidence: {})".format( symbol.text, symbol.confidence ) ) if response.error.message: raise Exception( "{}\nFor more info on error messages, check: " "https://cloud.google.com/apis/design/errors".format(response.error.message) )Idiomas adicionais
C#: Siga as instruções de configuração do C# na página das bibliotecas cliente e, em seguida, visite a documentação de referência do Vision para .NET.
PHP: Siga as instruções de configuração do PHP na página das bibliotecas cliente e, em seguida, visite a documentação de referência do Vision para PHP.
Ruby: Siga as instruções de configuração do Ruby na página das bibliotecas de cliente e, em seguida, visite a documentação de referência do Vision para Ruby.
Detete texto de documentos numa imagem remota
Pode usar a API Vision para realizar a deteção de funcionalidades num ficheiro de imagem remoto localizado no Cloud Storage ou na Web. Para enviar um pedido de ficheiro remoto, especifique o URL da Web do ficheiro ou o URI do Cloud Storage no corpo do pedido.
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- CLOUD_STORAGE_IMAGE_URI: o caminho para um ficheiro de imagem válido num contentor do Cloud Storage. Tem de ter, pelo menos, privilégios de leitura para o ficheiro.
Exemplo:
gs://cloud-samples-data/vision/handwriting_image.png
- PROJECT_ID: o ID do seu Google Cloud projeto.
Método HTTP e URL:
POST https://vision.googleapis.com/v1/images:annotate
Corpo JSON do pedido:
{ "requests": [ { "image": { "source": { "imageUri": "CLOUD_STORAGE_IMAGE_URI" } }, "features": [ { "type": "DOCUMENT_TEXT_DETECTION" } ] } ] }Para enviar o seu pedido, escolha uma destas opções:
curl
Guarde o corpo do pedido num ficheiro com o nome
request.json, e execute o seguinte comando:curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://vision.googleapis.com/v1/images:annotate"PowerShell
Guarde o corpo do pedido num ficheiro com o nome
request.json, e execute o seguinte comando:$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://vision.googleapis.com/v1/images:annotate" | Select-Object -Expand ContentSe o pedido for bem-sucedido, o servidor devolve um código de estado HTTP
200 OKe a resposta no formato JSON.Resposta
{ "responses": [ { "textAnnotations": [ { "locale": "en", "description": "O Google Cloud Platform\n", "boundingPoly": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] } }, ], "fullTextAnnotation": { "pages": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "width": 281, "height": 44, "blocks": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] }, "paragraphs": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] }, "words": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 23, "y": 11 }, { "x": 23, "y": 37 }, { "x": 14, "y": 37 } ] }, "symbols": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ], "detectedBreak": { "type": "SPACE" } }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 23, "y": 11 }, { "x": 23, "y": 37 }, { "x": 14, "y": 37 } ] }, "text": "O" } ] }, ] } ], "blockType": "TEXT" } ] } ], "text": "Google Cloud Platform\n" } } ] }Go
Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API GoVision.
Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
// detectDocumentText gets the full document text from the Vision API for an image at the given file path. func detectDocumentTextURI(w io.Writer, file string) error { ctx := context.Background() client, err := vision.NewImageAnnotatorClient(ctx) if err != nil { return err } image := vision.NewImageFromURI(file) annotation, err := client.DetectDocumentText(ctx, image, nil) if err != nil { return err } if annotation == nil { fmt.Fprintln(w, "No text found.") } else { fmt.Fprintln(w, "Document Text:") fmt.Fprintf(w, "%q\n", annotation.Text) fmt.Fprintln(w, "Pages:") for _, page := range annotation.Pages { fmt.Fprintf(w, "\tConfidence: %f, Width: %d, Height: %d\n", page.Confidence, page.Width, page.Height) fmt.Fprintln(w, "\tBlocks:") for _, block := range page.Blocks { fmt.Fprintf(w, "\t\tConfidence: %f, Block type: %v\n", block.Confidence, block.BlockType) fmt.Fprintln(w, "\t\tParagraphs:") for _, paragraph := range block.Paragraphs { fmt.Fprintf(w, "\t\t\tConfidence: %f", paragraph.Confidence) fmt.Fprintln(w, "\t\t\tWords:") for _, word := range paragraph.Words { symbols := make([]string, len(word.Symbols)) for i, s := range word.Symbols { symbols[i] = s.Text } wordText := strings.Join(symbols, "") fmt.Fprintf(w, "\t\t\t\tConfidence: %f, Symbols: %s\n", word.Confidence, wordText) } } } } } return nil }Java
Antes de experimentar este exemplo, siga as instruções de configuração do Java no guia de início rápido da API Vision com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Vision Java.
public static void detectDocumentTextGcs(String gcsPath) throws IOException { List<AnnotateImageRequest> requests = new ArrayList<>(); ImageSource imgSource = ImageSource.newBuilder().setGcsImageUri(gcsPath).build(); Image img = Image.newBuilder().setSource(imgSource).build(); Feature feat = Feature.newBuilder().setType(Type.DOCUMENT_TEXT_DETECTION).build(); AnnotateImageRequest request = AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build(); requests.add(request); // Initialize client that will be used to send requests. This client only needs to be created // once, and can be reused for multiple requests. After completing all of your requests, call // the "close" method on the client to safely clean up any remaining background resources. try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) { BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); List<AnnotateImageResponse> responses = response.getResponsesList(); client.close(); for (AnnotateImageResponse res : responses) { if (res.hasError()) { System.out.format("Error: %s%n", res.getError().getMessage()); return; } // For full list of available annotations, see http://g.co/cloud/vision/docs TextAnnotation annotation = res.getFullTextAnnotation(); for (Page page : annotation.getPagesList()) { String pageText = ""; for (Block block : page.getBlocksList()) { String blockText = ""; for (Paragraph para : block.getParagraphsList()) { String paraText = ""; for (Word word : para.getWordsList()) { String wordText = ""; for (Symbol symbol : word.getSymbolsList()) { wordText = wordText + symbol.getText(); System.out.format( "Symbol text: %s (confidence: %f)%n", symbol.getText(), symbol.getConfidence()); } System.out.format( "Word text: %s (confidence: %f)%n%n", wordText, word.getConfidence()); paraText = String.format("%s %s", paraText, wordText); } // Output Example using Paragraph: System.out.println("%nParagraph: %n" + paraText); System.out.format("Paragraph Confidence: %f%n", para.getConfidence()); blockText = blockText + paraText; } pageText = pageText + blockText; } } System.out.println("%nComplete annotation:"); System.out.println(annotation.getText()); } } }Node.js
Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Node.jsVision.
Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
// Imports the Google Cloud client libraries const vision = require('@google-cloud/vision'); // Creates a client const client = new vision.ImageAnnotatorClient(); /** * TODO(developer): Uncomment the following lines before running the sample. */ // const bucketName = 'Bucket where the file resides, e.g. my-bucket'; // const fileName = 'Path to file within bucket, e.g. path/to/image.png'; // Read a remote image as a text document const [result] = await client.documentTextDetection( `gs://${bucketName}/${fileName}` ); const fullTextAnnotation = result.fullTextAnnotation; console.log(fullTextAnnotation.text);Python
Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API PythonVision.
Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
def detect_document_uri(uri): """Detects document features in the file located in Google Cloud Storage.""" from google.cloud import vision client = vision.ImageAnnotatorClient() image = vision.Image() image.source.image_uri = uri response = client.document_text_detection(image=image) for page in response.full_text_annotation.pages: for block in page.blocks: print(f"\nBlock confidence: {block.confidence}\n") for paragraph in block.paragraphs: print("Paragraph confidence: {}".format(paragraph.confidence)) for word in paragraph.words: word_text = "".join([symbol.text for symbol in word.symbols]) print( "Word text: {} (confidence: {})".format( word_text, word.confidence ) ) for symbol in word.symbols: print( "\tSymbol: {} (confidence: {})".format( symbol.text, symbol.confidence ) ) if response.error.message: raise Exception( "{}\nFor more info on error messages, check: " "https://cloud.google.com/apis/design/errors".format(response.error.message) )gcloud
Para realizar a deteção de escrita manual, use o comando
gcloud ml vision detect-documentconforme mostrado no exemplo seguinte:gcloud ml vision detect-document gs://cloud-samples-data/vision/handwriting_image.png
Idiomas adicionais
C#: Siga as instruções de configuração do C# na página das bibliotecas cliente e, em seguida, visite a documentação de referência do Vision para .NET.
PHP: Siga as instruções de configuração do PHP na página das bibliotecas cliente e, em seguida, visite a documentação de referência do Vision para PHP.
Ruby: Siga as instruções de configuração do Ruby na página das bibliotecas de cliente e, em seguida, visite a documentação de referência do Vision para Ruby.
Especifique o idioma (opcional)
Ambos os tipos de pedidos de OCR suportam um ou mais
languageHintsque especificam o idioma de qualquer texto na imagem. No entanto, um valor vazio produz normalmente os melhores resultados, porque a omissão de um valor permite a deteção automática de idioma. Para idiomas baseados no alfabeto latino, não é necessário definirlanguageHints. Em casos raros, quando o idioma do texto na imagem é conhecido, a definição de uma sugestão ajuda a obter melhores resultados (embora possa ser um obstáculo significativo se a sugestão estiver incorreta). A deteção de texto devolve um erro se um ou mais dos idiomas especificados não for um dos idiomas suportados.Se optar por fornecer uma sugestão de idioma, modifique o corpo do seu pedido (ficheiro
request.json) para fornecer a string de um dos idiomas suportados no campoimageContext.languageHints, conforme mostrado no seguinte exemplo:{ "requests": [ { "image": { "source": { "imageUri": "IMAGE_URL" } }, "features": [ { "type": "DOCUMENT_TEXT_DETECTION" } ], "imageContext": { "languageHints": ["en-t-i0-handwrit"] } } ] }
Suporte multirregional
Agora, pode especificar o armazenamento de dados ao nível do continente e o tratamento de OCR. As seguintes regiões são atualmente suportadas:
us: apenas no país EUAeu: União Europeia
Localizações
O Cloud Vision oferece-lhe algum controlo sobre a localização onde os recursos do seu projeto são armazenados e processados. Em particular, pode configurar o Cloud Vision para armazenar e processar os seus dados apenas na União Europeia.
Por predefinição, o Cloud Vision armazena e processa recursos numa localização global, o que significa que o Cloud Vision não garante que os seus recursos permaneçam numa localização ou região específica. Se escolher a localização União Europeia, a Google armazena os seus dados e processa-os apenas na União Europeia. Pode aceder aos dados, bem como os seus utilizadores, a partir de qualquer localização.
Definir a localização através da API
A API Vision suporta um ponto final da API global (
vision.googleapis.com) e também dois pontos finais baseados em regiões: um ponto final da União Europeia (eu-vision.googleapis.com) e um ponto final dos Estados Unidos (us-vision.googleapis.com). Use estes pontos finais para o processamento específico da região. Por exemplo, para armazenar e tratar os seus dados apenas na União Europeia, use o URIeu-vision.googleapis.comem vez devision.googleapis.compara as suas chamadas da API REST:- https://eu-vision.googleapis.com/v1/projects/PROJECT_ID/locations/eu/images:annotate
- https://eu-vision.googleapis.com/v1/projects/PROJECT_ID/locations/eu/images:asyncBatchAnnotate
- https://eu-vision.googleapis.com/v1/projects/PROJECT_ID/locations/eu/files:annotate
- https://eu-vision.googleapis.com/v1/projects/PROJECT_ID/locations/eu/files:asyncBatchAnnotate
Para armazenar e processar os seus dados apenas nos Estados Unidos, use o ponto final dos EUA (
us-vision.googleapis.com) com os métodos anteriores.Definir a localização através das bibliotecas de cliente
As bibliotecas cliente da API Vision acedem ao ponto final da API global (
vision.googleapis.com) por predefinição. Para armazenar e processar os seus dados apenas na União Europeia, tem de definir explicitamente o ponto final (eu-vision.googleapis.com). Os seguintes exemplos de código mostram como configurar esta definição.REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- REGION_ID: um dos identificadores de localização
regionais válidos:
us: apenas no país EUAeu: União Europeia
- CLOUD_STORAGE_IMAGE_URI: o caminho para um ficheiro de imagem válido num contentor do Cloud Storage. Tem de ter, pelo menos, privilégios de leitura para o ficheiro.
Exemplo:
gs://cloud-samples-data/vision/handwriting_image.png
- PROJECT_ID: o ID do seu Google Cloud projeto.
Método HTTP e URL:
POST https://REGION_ID-vision.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/images:annotate
Corpo JSON do pedido:
{ "requests": [ { "image": { "source": { "imageUri": "CLOUD_STORAGE_IMAGE_URI" } }, "features": [ { "type": "DOCUMENT_TEXT_DETECTION" } ] } ] }Para enviar o seu pedido, escolha uma destas opções:
curl
Guarde o corpo do pedido num ficheiro com o nome
request.json, e execute o seguinte comando:curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://REGION_ID-vision.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/images:annotate"PowerShell
Guarde o corpo do pedido num ficheiro com o nome
request.json, e execute o seguinte comando:$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "PROJECT_ID" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://REGION_ID-vision.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/images:annotate" | Select-Object -Expand ContentSe o pedido for bem-sucedido, o servidor devolve um código de estado HTTP
200 OKe a resposta no formato JSON.Resposta
{ "responses": [ { "textAnnotations": [ { "locale": "en", "description": "O Google Cloud Platform\n", "boundingPoly": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] } }, ], "fullTextAnnotation": { "pages": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "width": 281, "height": 44, "blocks": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] }, "paragraphs": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 279, "y": 11 }, { "x": 279, "y": 37 }, { "x": 14, "y": 37 } ] }, "words": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ] }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 23, "y": 11 }, { "x": 23, "y": 37 }, { "x": 14, "y": 37 } ] }, "symbols": [ { "property": { "detectedLanguages": [ { "languageCode": "en" } ], "detectedBreak": { "type": "SPACE" } }, "boundingBox": { "vertices": [ { "x": 14, "y": 11 }, { "x": 23, "y": 11 }, { "x": 23, "y": 37 }, { "x": 14, "y": 37 } ] }, "text": "O" } ] }, ] } ], "blockType": "TEXT" } ] } ], "text": "Google Cloud Platform\n" } } ] }Go
Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API GoVision.
Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
import ( "context" "fmt" vision "cloud.google.com/go/vision/apiv1" "google.golang.org/api/option" ) // setEndpoint changes your endpoint. func setEndpoint(endpoint string) error { // endpoint := "eu-vision.googleapis.com:443" ctx := context.Background() client, err := vision.NewImageAnnotatorClient(ctx, option.WithEndpoint(endpoint)) if err != nil { return fmt.Errorf("NewImageAnnotatorClient: %w", err) } defer client.Close() return nil }Java
Antes de experimentar este exemplo, siga as instruções de configuração do Java no guia de início rápido da API Vision com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Vision Java.
ImageAnnotatorSettings settings = ImageAnnotatorSettings.newBuilder().setEndpoint("eu-vision.googleapis.com:443").build(); // Initialize client that will be used to send requests. This client only needs to be created // once, and can be reused for multiple requests. After completing all of your requests, call // the "close" method on the client to safely clean up any remaining background resources. ImageAnnotatorClient client = ImageAnnotatorClient.create(settings);Node.js
Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Node.jsVision.
Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
// Imports the Google Cloud client library const vision = require('@google-cloud/vision'); async function setEndpoint() { // Specifies the location of the api endpoint const clientOptions = {apiEndpoint: 'eu-vision.googleapis.com'}; // Creates a client const client = new vision.ImageAnnotatorClient(clientOptions); // Performs text detection on the image file const [result] = await client.textDetection('./resources/wakeupcat.jpg'); const labels = result.textAnnotations; console.log('Text:'); labels.forEach(label => console.log(label.description)); } setEndpoint();Python
Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do Vision usando bibliotecas cliente. Para mais informações, consulte a documentação de referência da API PythonVision.
Para se autenticar no Vision, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
from google.cloud import vision client_options = {"api_endpoint": "eu-vision.googleapis.com"} client = vision.ImageAnnotatorClient(client_options=client_options)Experimentar
Experimente a deteção de texto e a deteção de texto em documentos na seguinte ferramenta. Pode usar a imagem já especificada (
gs://cloud-samples-data/vision/handwriting_image.png) clicando em Executar ou pode especificar a sua própria imagem.
Corpo do pedido:
{ "requests": [ { "features": [ { "type": "DOCUMENT_TEXT_DETECTION" } ], "image": { "source": { "imageUri": "gs://cloud-samples-data/vision/handwriting_image.png" } } } ] } - BASE64_ENCODED_IMAGE: a representação base64 (string ASCII) dos dados da imagem binária. Esta string deve ser semelhante à
seguinte string: