1. Genel Bakış
Document AI nedir?
Document AI API, dokümanlar ve e-postalar gibi yapılandırılmamış verileri alıp bu verileri anlamayı, analiz etmeyi ve kullanmayı kolaylaştıran bir belge anlama çözümüdür. API, içerik sınıflandırması, öğe çıkarma ve gelişmiş arama gibi özellikler aracılığıyla yapı sağlar.
Bu eğitimde, Node.js ile Document AI API'yi kullanmaya odaklanacaksınız. Bu eğitimde, basit bir tıbbi kayıt formunun nasıl ayrıştırılacağı gösterilmektedir.
Neler öğreneceksiniz?
- Document AI API'sini etkinleştirme
- API isteklerinin kimliğini doğrulama
- Node.js için istemci kitaplığını yükleme
- Taranan bir formdaki verileri ayrıştırma
Gerekenler
Anket
Bu eğitimi nasıl kullanacaksınız?
Node.js ile ilgili deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya G Suite hesabınız yoksa hesap oluşturmanız gerekir.)



Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın. (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır. Üzgünüz.) Bu kimliği daha sonra PROJECT_ID olarak sağlamanız gerekir.
- Ardından, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
"Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Bu bölümde, bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları nasıl kapatacağınız açıklanmıştır. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i başlatma
Google Cloud'dayken Google Cloud'u dizüstü bilgisayarınızdan uzaktan çalıştırabilirsiniz. Bu codelab'de ise Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell kullanılmaktadır.
Cloud Shell'i etkinleştirme
- Cloud Console'da Cloud Shell'i etkinleştir 'i
tıklayın.
Cloud Shell'i daha önce hiç başlatmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmı) gösterilir. Bu durumda Devam'ı tıkladığınızda bu ekranı bir daha görmezsiniz. Bu tek seferlik ekran aşağıdaki gibi görünür:
Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.
Cloud Shell, bulutta barındırılan bir sanal makineye terminal erişimi sağlar. Sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını yalnızca bir tarayıcı veya Chromebook'unuzla yapabilirsiniz.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz.
- Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Değilse şu komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. Cloud Document AI API'yi etkinleştirme
Document AI'ı kullanmaya başlamadan önce API'yi etkinleştirmeniz gerekir. Tarayıcınızda Cloud Console'u açın.
- Gezinme menüsü ☰ > API'ler ve Hizmetler > Kitaplık'ı tıklayın.

- "Document AI API"yi arayın, ardından Google Cloud projenizde API'yi kullanmak için Etkinleştir'i tıklayın.
4. İşleyici oluşturma ve test etme
Bu eğitimde Document AI Platform'da kullanmak üzere öncelikle Form Ayrıştırıcı işlemcisinin bir örneğini oluşturmanız gerekir.
- Konsolda Document AI Platform'a Genel Bakış sayfasına gidin.
- İşlemci Oluştur'u tıklayın ve Form Ayrıştırıcı'yı seçin.

- Bir işlemci adı belirtin ve listeden bölgenizi seçin.
- İşleyicinizi oluşturmak için Oluştur'u tıklayın.
- İşlemci kimliğinizi kopyalayın. Bunu daha sonra kodunuzda kullanmanız gerekir.
(İsteğe bağlı) Bir doküman yükleyerek işlemcinizi konsolda test edebilirsiniz. Doküman Yükle'yi tıklayın ve ayrıştırılacak bir form seçin. Kullanabileceğiniz bir form yoksa bu örnek formu indirip kullanabilirsiniz.

Çıkışınız şu şekilde görünmelidir: 
5. API isteklerinin kimliğini doğrulama
Document AI API'ye istek göndermek için hizmet hesabı kullanmanız gerekir. Hizmet hesabı, projenize aittir ve API istekleri göndermek için Google Client Node.js kitaplığı tarafından kullanılır. Diğer tüm kullanıcı hesapları gibi, hizmet hesabı da bir e-posta adresiyle temsil edilir. Bu bölümde, hizmet hesabı oluşturmak için Cloud SDK'yı kullanacak, ardından hizmet hesabı olarak kimlik doğrulamak için gereken kimlik bilgilerini oluşturacaksınız.
Öncelikle, bu codelab boyunca kullanacağınız PROJECT_ID ile bir ortam değişkeni ayarlayın:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
Ardından, Document AI API'ye erişmek için yeni bir hizmet hesabı oluşturun:
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
Ardından, Node.js kodunuzun yeni hizmet hesabınız olarak giriş yapmak için kullandığı kimlik bilgilerini oluşturun. Bu kimlik bilgilerini oluşturduktan sonra aşağıdaki komut aracılığıyla bir JSON dosyası "~/key.json" olarak kaydedin:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Son olarak, kitaplığın kimlik bilgilerinizi bulmak için kullandığı GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini ayarlayın. Bu form kimlik doğrulaması hakkında daha fazla bilgi edinmek için kılavuza bakın. Ortam değişkeni, oluşturduğunuz kimlik bilgisi JSON dosyasının tam dizin yoluna göre ayarlanmalıdır. Bunun için:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
6. Örnek Formu İndirme
Herkese açık Google Cloud Storage örnekleri paketimizde depolanan örnek bir formumuz var. Çalışma dizininize indirmek için aşağıdaki komutu kullanın.
gsutil cp gs://cloud-samples-data/documentai/form.pdf .
Aşağıdaki komutu kullanarak dosyanın cloudshell'inize indirildiğini onaylayın:
ls -ltr form.pdf
7. İstemci kitaplığını yükleme
Ardından, kodunuzu çalışma dizininizde ayarlayın.
Yeni bir Node.js paketi başlatın:
npm init
Document AI istemci kitaplığını yükleyin:
npm install @google-cloud/documentai
8. Eşzamanlı İşleme Belgesi İsteğinde Bulunma
Bu adımda, senkron uç noktayı kullanarak bir işlem dokümanı çağrısı yaparsınız. Aynı anda çok sayıda belgeyi işlemek için asenkron API'yi de kullanabilirsiniz. Form Ayrıştırıcı API'lerini kullanma hakkında daha fazla bilgi edinmek için buradaki kılavuzu inceleyin.
index.js dosyası oluşturup aşağıdaki kodu yapıştırın. İlgili değişkenleri işlemcinizin bilgileriyle doldurun.
const { DocumentProcessorServiceClient } = require('@google-cloud/documentai').v1;
const fs = require('fs');
/**
* Runs the sample document through Document AI to get key/value pairs and
* confidence scores.
*/
async function processDocument(projectId, location, processorId, filePath, mimeType) {
// Instantiates a client
const documentaiClient = new DocumentProcessorServiceClient();
// The full resource name of the processor, e.g.:
// projects/project-id/locations/location/processor/processor-id
// You must create new processors in the Cloud Console first
const resourceName = documentaiClient.processorPath(projectId, location, processorId);
// Read the file into memory.
const imageFile = fs.readFileSync(filePath);
// Convert the image data to a Buffer and base64 encode it.
const encodedImage = Buffer.from(imageFile).toString('base64');
// Load Binary Data into Document AI RawDocument Object
const rawDocument = {
content: encodedImage,
mimeType: mimeType,
};
// Configure ProcessRequest Object
const request = {
name: resourceName,
rawDocument: rawDocument
};
// Use the Document AI client to process the sample form
const [result] = await documentaiClient.processDocument(request);
return result.document;
}
/**
* Run the codelab.
*/
async function main() {
const projectId = 'YOUR_PROJECT_ID';
const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
const processorId = 'YOUR_PROCESSOR_ID'; // Should be a Hexadecimal string
// Supported File Types
// https://cloud.google.com/document-ai/docs/processors-list#processor_form-parser
filePath = 'form.pdf'; // The local file in your current working directory
mimeType = 'application/pdf';
const document = await processDocument(projectId, location, processorId, filePath, mimeType);
console.log("Document Processing Complete");
// Print the document text as one big string
console.log(`Text: ${document.text}`);
}
main(...process.argv.slice(2)).catch(err => {
console.error(err);
process.exitCode = 1;
});
Kodunuzu şimdi çalıştırın. Konsolunuzda aşağıdaki metnin yazdırıldığını görmeniz gerekir.
Text: FakeDoc M.D. HEALTH INTAKE FORM Please fill out the questionnaire carefully. The information you provide will be used to complete your health profile and will be kept confidential. Name: Date: Sally Walker DOB: 09/04/1986 Address: 24 Barney Lane City: Towalo State: NJ Zip: 07082 Email: Sally, waller@cmail.com Phone #: (906) 917-3486 Gender: Marital Status: Single Occupation: Software Engineer Referred By: None Emergency Contact: Eva Walker Emergency Contact Phone: (906) 334-8926 Describe your medical concerns (symptoms, diagnoses, etc): Runny nose, mucas in throat, weakness, aches, chills, tired Are you currently taking any medication? (If yes, please describe): Vyvanse (25mg) daily for attention
Sonraki adımlarda, veritabanlarında daha kolay depolanabilen veya diğer uygulamalarda kullanılabilen yapılandırılmış verileri ayıklarsınız.
9. Form anahtarı/değer çiftlerini ayıklama
Artık formdaki anahtar/değer çiftlerini ve bunlara karşılık gelen güven puanlarını ayıklayabilirsiniz. Document yanıt nesnesi, giriş dokümanındaki sayfaların listesini içerir. Her page nesnesi, form alanlarının ve metindeki konumlarının listesini içerir.
Aşağıdaki kod, her sayfayı yineler ve her anahtarı, değeri ve güven puanını çıkarır.
Kodunuza aşağıdaki işlevi ekleyin.
/**
* Extract form data and confidence from processed document.
*/
function extractFormData(document) {
// Extract shards from the text field
function getText(textAnchor, document) {
if (!textAnchor.textSegments || textAnchor.textSegments.length === 0) {
return '';
}
// First shard in document doesn't have startIndex property
const startIndex = textAnchor.textSegments[0].startIndex || 0;
const endIndex = textAnchor.textSegments[0].endIndex;
return document.text.substring(startIndex, endIndex);
}
var formData = [];
const pages = document.pages;
pages.forEach((page) => {
const formFields = page.formFields;
formFields.forEach((field) => {
// Get the extracted field names and remove extra space from text
const fieldName = getText(field.fieldName.textAnchor, document);
// Confidence - How "sure" the API is that the text is correct
const nameConfidence = field.fieldName.confidence.toFixed(4);
const fieldValue = getText(field.fieldValue.textAnchor, document);
const valueConfidence = field.fieldValue.confidence.toFixed(4);
formData.push({
fieldName: fieldName,
fieldValue: fieldValue,
nameConfidence: nameConfidence,
valueConfidence: valueConfidence
});
});
});
return formData;
}
Ana işlevin içinden extractFormData() işlevine bir çağrı ekleyin ve ortaya çıkan nesneyi tablo olarak yazdırın.
/**
* Run the codelab.
*/
async function main() {
const projectId = 'YOUR_PROJECT_ID';
const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
const processorId = 'YOUR_PROCESSOR_ID'; // Should be a Hexadecimal string
// Supported File Types
// https://cloud.google.com/document-ai/docs/processors-list#processor_form-parser
filePath = 'form.pdf'; // The local file in your current working directory
mimeType = 'application/pdf';
const document = await processDocument(projectId, location, processorId, filePath, mimeType);
const formData = extractFormData(document);
console.log('\nThe following form key/value pairs were detected:');
console.table(formData);
}
Şimdi kodunuzu çalıştırın. Örnek dokümanımızı kullanıyorsanız aşağıdaki çıkışı görürsünüz:
The following form key/value pairs were detected: ┌─────────┬────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────┬────────────────┬─────────────────┐ │ (index) │ fieldName │ fieldValue │ nameConfidence │ valueConfidence │ ├─────────┼────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────┼────────────────┼─────────────────┤ │ 0 │ 'Marital Status: ' │ 'Single ' │ '1.0000' │ '1.0000' │ │ 1 │ 'DOB: ' │ '09/04/1986\n' │ '0.9999' │ '0.9999' │ │ 2 │ 'City: ' │ 'Towalo ' │ '0.9996' │ '0.9996' │ │ 3 │ 'Address: ' │ '24 Barney Lane ' │ '0.9994' │ '0.9994' │ │ 4 │ 'Referred By: ' │ 'None\n' │ '0.9968' │ '0.9968' │ │ 5 │ 'Phone #: ' │ '(906) 917-3486\n' │ '0.9961' │ '0.9961' │ │ 6 │ 'State: ' │ 'NJ ' │ '0.9960' │ '0.9960' │ │ 7 │ 'Emergency Contact Phone: ' │ '(906) 334-8926\n' │ '0.9925' │ '0.9925' │ │ 8 │ 'Name:\n' │ 'Sally\nWalker\n' │ '0.9922' │ '0.9922' │ │ 9 │ 'Occupation: ' │ 'Software Engineer\n' │ '0.9914' │ '0.9914' │ │ 10 │ 'Zip: ' │ '07082\n' │ '0.9904' │ '0.9904' │ │ 11 │ 'Email: ' │ 'Sally, waller@cmail.com ' │ '0.9681' │ '0.9681' │ │ 12 │ 'Emergency Contact: ' │ 'Eva Walker ' │ '0.9430' │ '0.9430' │ │ 13 │ 'Describe your medical concerns (symptoms, diagnoses, etc):\n' │ 'Runny nose, mucas in throat, weakness,\naches, chills, tired\n' │ '0.7817' │ '0.7817' │ └─────────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────┴────────────────┴─────────────────┘
10. Tebrikler!
Tebrikler, el yazısıyla doldurulmuş bir formdan veri ayıklamak için Document AI API'yi başarıyla kullandınız. Diğer form resimleriyle denemeler yapmanızı öneririz.
Temizleme
Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız:
- Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinde projenizi seçin ve Sil'i tıklayın.
- İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
Daha Fazla Bilgi
- The Future of Documents - YouTube Playlist
- Document AI Belgeleri
- Document AI Node.js İstemci Kitaplığı Referansı
- Document AI Node.js örnekleri