Rilevamento della scrittura a mano libera nelle immagini

Rilevamento della scrittura a mano libera con il riconoscimento ottico dei caratteri (OCR)

L'API Vision può rilevare ed estrarre il testo dalle immagini:

  • DOCUMENT_TEXT_DETECTION estrae il testo da un'immagine (o da un file); la risposta è ottimizzata per testo e documenti densi. Il JSON include informazioni su pagina, blocco, paragrafo, parola e interruzione.

    Screenshot che simula il modo in cui un sistema OCR potrebbe identificare ed estrarre il testo, evidenziando titoli, paragrafi e icone.

    Un utilizzo specifico di DOCUMENT_TEXT_DETECTION è il rilevamento della scrittura a mano in un'immagine.

    Foglio a righe con la scritta Google Cloud Platform in corsivo.

Provalo

Se non conosci Google Cloud, crea un account per valutare le prestazioni di API Cloud Vision in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.

Prova l'API Cloud Vision senza costi

Richieste di rilevamento del testo di documenti

Configura il progetto Google Cloud e l'autenticazione

Rilevamento del testo del documento in un'immagine locale

Puoi utilizzare l'API Vision per eseguire il rilevamento delle funzionalità su un file immagine locale.

Per le richieste REST, invia i contenuti del file immagine come stringa codificata in base64 nel corpo della richiesta.

Per le richieste gcloud e delle librerie client, specifica il percorso di un'immagine locale nella tua richiesta.

REST

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • BASE64_ENCODED_IMAGE: La rappresentazione in base64 (stringa ASCII) dei dati dell'immagine binaria. Questa stringa dovrebbe essere simile alla seguente:
    • /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==
    Per ulteriori informazioni, consulta l'argomento Codifica in base64.
  • PROJECT_ID: l'ID progetto Google Cloud .

Metodo HTTP e URL:

POST https://vision.googleapis.com/v1/images:annotate

Corpo JSON della richiesta:

{
  "requests": [
    {
      "image": {
        "content": "BASE64_ENCODED_IMAGE"
      },
      "features": [
        {
          "type": "DOCUMENT_TEXT_DETECTION"
        }
      ]
    }
  ]
}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$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 Content

Se la richiesta riesce, il server restituisce un codice di stato HTTP 200 OK e la risposta in formato JSON.

Go

Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di Vision per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Vision Go.

Per eseguire l'autenticazione in Vision, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


// 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