1. Genel Bakış
Document AI nedir?
Document AI API; belgeler ve e-postalar gibi yapılandırılmamış verileri alarak verilerin anlaşılmasını, analiz edilmesini ve kullanılmasını kolaylaştıran bir belge anlama çözümüdür. API; içerik sınıflandırma, varlık çıkarma, gelişmiş arama ve daha fazlasıyla yapı sağlar.
Bu eğiticide, Node.js ile Document AI API'yi kullanmaya odaklanacaksınız. Eğitimde, basit bir tıbbi giriş formunun nasıl ayrıştırılacağı gösterilmektedir.
Neler öğreneceksiniz?
- Document AI API'yi etkinleştirme
- API isteklerinin kimliğini doğrulama
- Node.js için istemci kitaplığı nasıl yüklenir?
- Taranmış bir formdan veri ayrıştırma
Gerekenler
Anket
Bu eğiticiden nasıl yararlanacaksınız?
Node.js deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Kendi hızınızda ortam kurulumu
- Cloud Console'da oturum açıp 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 projelerinin benzersiz bir adı olan proje kimliğini unutmayın. (Yukarıdaki adınız önceden alınmış ve şu an için daha uygun olmayacaktır!). 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ı izlediğinizden emin olun. bölümüne bakın. Bu bölümde, bu eğitim haricinde faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız açıklanmaktadır. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.
Cloud Shell'i başlatma
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ılır.
Cloud Shell'i etkinleştirme
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini 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ıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
Cloud Shell, bulutta barındırılan bir sanal makineye terminal erişimi sağlar. Sanal makine, ihtiyacınız olan tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.
- Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki 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>
Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. Cloud Document AI API'yi etkinleştirme
Document AI'yı kullanmaya başlamadan önce API'yi etkinleştirmeniz gerekir. Tarayıcınızda Cloud Console'u açın.
- Gezinme menüsü Takipçisi'ni tıklayın > API'ler ve Hizmetler > Kitaplık.
- "Document AI API" araması yapın ardından API'yi Google Cloud projenizde kullanmak için Etkinleştir'i tıklayın
4. İşleyen Oluşturma ve Test Etme
Bu eğitim için önce Document AI Platform'da kullanılacak Form Ayrıştırıcı işlemcisinin bir örneğini oluşturmanız gerekir.
- Konsolda Document AI Platformuna Genel Bakış'a gidin
- Create Processor'ı (İşlemci Oluştur) 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 belge yükleyerek konsolda işlemcinizi test edebilirsiniz. Doküman Yükle'yi tıklayın ve ayrıştırılacak bir form seçin. Kullanabileceğiniz örnek formu yoksa 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 Google Client Node.js kitaplığı tarafından API istekleri yapmak için kullanılır. Diğer tüm kullanıcı hesapları gibi hizmet hesabı da e-posta adresiyle temsil edilir. Bu bölümde Google Cloud SDK'yı kullanarak bir hizmet hesabı oluşturacaksınız. Ardından, hizmet hesabı olarak kimliğinizi doğrulamak için ihtiyacınız olan 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, aşağıdakileri kullanarak 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şturun ve "~/key.json" JSON dosyası olarak kaydedin kullanabilirsiniz:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Son olarak, kitaplık tarafından kimlik bilgilerinizi bulmak için kullanılan 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şkeninin, oluşturduğunuz kimlik bilgisi JSON dosyasının tam yoluna şu şekilde ayarlanması gerekir:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
6. Örnek Formu İndirin
Herkese açık Google Cloud Storage örnek paketimizde depolanan bir örnek formumuz var. Dosyayı ç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 Cloud Shell'inize indirildiğini onaylayın:
ls -ltr form.pdf
7. İstemci Kitaplığı'nı yükleme
Ardından, kodunuzu çalışma dizininizde oluşturun.
Yeni bir Node.js paketini başlatın:
npm init
Document AI istemci kitaplığını yükleyin:
npm install @google-cloud/documentai
8. Eşzamanlı bir İşlem Belgesi İsteğinde Bulunma
Bu adımda, eşzamanlı uç noktayı kullanarak bir süreç belgesi çağrısı yapacaksınız. Aynı anda büyük miktarda dokümanı işlemek için eşzamansız API'yi de kullanabilirsiniz. Form Ayrıştırıcı API'lerini kullanma hakkında daha fazla bilgi edinmek için buradaki kılavuzu okuyun.
Bir index.js
dosyası oluşturun ve aşağıdaki kodu yapıştırın. Geçerli değişkenleri işleyicinizin 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 metin basılı olduğunu göreceksiniz.
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 depolanabilecek veya diğer uygulamalarda kullanılabilecek yapılandırılmış verileri çıkaracaksınız.
9. Form Anahtar/Değer Çiftlerini Çıkarın
Artık anahtar/değer çiftlerini formdan ve bunlara karşılık gelen güven puanlarını ayıklayabilirsiniz. Document yanıt nesnesi, giriş belgesindeki sayfaların listesini içerir. Her page
nesnesi, form alanlarının ve metindeki konumlarının bir listesini içerir.
Aşağıdaki kod her sayfada yineleme yaparak her bir anahtar, değer ve güven puanını ayıklar.
Aşağıdaki işlevi kodunuza 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 elde edilen 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ı kullandığınızda 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, Document AI API'yi başarıyla kullanarak elle yazılmış bir formdan veri ayıkladı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 önlemek amacıyla:
- Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinden projenizi seçin ve ardından Sil'i tıklayın.
- İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
Daha Fazla Bilgi
- Belgelerin Geleceği - YouTube Oynatma Listesi
- Document AI Belgeleri
- Document AI Node.js İstemci Kitaplığı Referansı
- Belge AI Node.js Örneklerini