1. ภาพรวม
Document AI คืออะไร
Document AI API เป็นโซลูชันการทำความเข้าใจเอกสารซึ่งนำข้อมูลที่ไม่มีโครงสร้างมาใช้ เช่น เอกสาร อีเมล และอื่นๆ และทำให้เข้าใจ วิเคราะห์ และใช้ข้อมูลได้ง่ายขึ้น โดย API นี้ให้โครงสร้างผ่านการจัดประเภทเนื้อหา การแยกเอนทิตี การค้นหาขั้นสูง และอีกมากมาย
ในบทแนะนำนี้ คุณจะมุ่งเน้นที่การใช้ Document AI API กับ Node.js บทแนะนำจะสาธิตวิธีแยกวิเคราะห์แบบฟอร์มทางการแพทย์พื้นฐาน
สิ่งที่คุณจะได้เรียนรู้
- วิธีเปิดใช้ Document AI API
- วิธีตรวจสอบสิทธิ์คำขอ API
- วิธีติดตั้งไลบรารีของไคลเอ็นต์สำหรับ Node.js
- วิธีแยกวิเคราะห์ข้อมูลจากแบบฟอร์มที่สแกน
สิ่งที่คุณต้องมี
แบบสำรวจ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Node.js มากน้อยเพียงใด
คุณจะให้คะแนนความพึงพอใจในการใช้บริการ Google Cloud อย่างไร
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)
จำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้ว และไม่สามารถใช้กับคุณได้ ขออภัย) คุณต้องระบุรหัสนี้ในภายหลังเป็น PROJECT_ID
- ถัดไป คุณต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ส่วนนี้จะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่ Codelab นี้ใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เปิดใช้งาน Cloud Shell
- คลิกเปิดใช้งาน Cloud Shell จาก Cloud Console
หากคุณไม่เคยเริ่มต้นใช้งาน Cloud Shell มาก่อน คุณจะเห็นหน้าจอตรงกลาง (ครึ่งหน้าล่าง) ซึ่งอธิบายว่านี่คืออะไร หากเป็นเช่นนั้น ให้คลิกดำเนินการต่อ (คุณจะไม่เห็นการดำเนินการนี้อีก) หน้าจอแบบครั้งเดียวมีลักษณะดังนี้
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
Cloud Shell ให้คุณเข้าถึงเทอร์มินัลไปยังเครื่องเสมือนที่โฮสต์ในระบบคลาวด์ได้ เครื่องเสมือนจะมีเครื่องมือการพัฒนาทั้งหมดที่ต้องใช้ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์หรือ Chromebook เท่านั้น
เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าได้รับการตรวจสอบสิทธิ์แล้ว และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
เอาต์พุตจากคำสั่ง
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
เอาต์พุตจากคำสั่ง
[core] project = <PROJECT_ID>
หากไม่ใช่ ให้ตั้งคำสั่งด้วยคำสั่งนี้
gcloud config set project <PROJECT_ID>
เอาต์พุตจากคำสั่ง
Updated property [core/project].
3. เปิดใช้ Cloud Document AI API
ก่อนที่จะเริ่มใช้ Document AI คุณต้องเปิดใช้ API เปิด Cloud Console ในเบราว์เซอร์
- คลิกเมนูนำทาง ☰ > API และ บริการ > คลัง
- ค้นหา "Document AI API" แล้วคลิกเปิดใช้เพื่อใช้ API ในโปรเจ็กต์ Google Cloud
4. สร้างและทดสอบโปรเซสเซอร์
ก่อนอื่น คุณต้องสร้างอินสแตนซ์ของโปรแกรมแยกวิเคราะห์แบบฟอร์มเพื่อใช้ใน Document AI Platform สำหรับบทแนะนำนี้
- ในคอนโซล ให้ไปที่ภาพรวมของ Document AI Platform
- คลิกสร้างตัวประมวลผลแล้วเลือกโปรแกรมแยกวิเคราะห์แบบฟอร์ม
- ระบุชื่อผู้ประมวลผลข้อมูลและเลือกภูมิภาคของคุณจากรายการ
- คลิกสร้างเพื่อสร้างโปรเซสเซอร์
- คัดลอกรหัสผู้ประมวลผลข้อมูล คุณต้องใช้สิ่งนี้ในรหัสในภายหลัง
(ไม่บังคับ) คุณทดสอบโปรเซสเซอร์ในคอนโซลได้โดยการอัปโหลดเอกสาร คลิกอัปโหลดเอกสารและเลือกแบบฟอร์มที่จะแยกวิเคราะห์ คุณจะดาวน์โหลดและใช้ตัวอย่างแบบฟอร์มได้หากไม่มีแบบฟอร์มให้ใช้
เอาต์พุตควรมีลักษณะดังนี้
5. ตรวจสอบสิทธิ์คำขอ API
หากต้องการส่งคำขอไปยัง Document AI API คุณต้องใช้บัญชีบริการ บัญชีบริการเป็นของโปรเจ็กต์และไลบรารี Google Client Node.js จะใช้บัญชีนี้เพื่อสร้างคำขอ API บัญชีบริการจะแสดงด้วยอีเมลเช่นเดียวกับบัญชีผู้ใช้อื่นๆ ในส่วนนี้ คุณจะใช้ Cloud SDK เพื่อสร้างบัญชีบริการ จากนั้นจึงสร้างข้อมูลเข้าสู่ระบบที่ต้องใช้เพื่อตรวจสอบสิทธิ์ว่าเป็นบัญชีบริการ
ก่อนอื่นให้ตั้งค่าตัวแปรสภาพแวดล้อมด้วย PROJECT_ID
ซึ่งคุณจะใช้ตลอดทั้ง Codelab นี้
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
ถัดไป ให้สร้างบัญชีบริการใหม่เพื่อเข้าถึง Document AI API โดยใช้สิ่งต่อไปนี้
gcloud iam service-accounts create my-docai-sa \
--display-name "my-docai-service-account"
จากนั้นให้สร้างข้อมูลเข้าสู่ระบบที่โค้ด Node.js ใช้เพื่อเข้าสู่ระบบในฐานะบัญชีบริการใหม่ สร้างข้อมูลเข้าสู่ระบบเหล่านี้และบันทึกเป็นไฟล์ JSON "~/key.json" โดยใช้คำสั่งต่อไปนี้
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-docai-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
สุดท้าย ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS ซึ่งไลบรารีใช้ในการค้นหาข้อมูลเข้าสู่ระบบของคุณ หากต้องการอ่านเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ของแบบฟอร์มนี้ โปรดดูที่คำแนะนำ ควรตั้งค่าตัวแปรสภาพแวดล้อมเป็นเส้นทางแบบเต็มของไฟล์ JSON ของข้อมูลเข้าสู่ระบบที่คุณสร้างขึ้น โดยใช้สิ่งต่อไปนี้
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"
6. ดาวน์โหลดแบบฟอร์มตัวอย่าง
เรามีแบบฟอร์มตัวอย่างสำหรับใช้ในที่เก็บข้อมูลตัวอย่าง Google Cloud Storage สาธารณะของเรา ใช้คำสั่งต่อไปนี้เพื่อดาวน์โหลดไปยังไดเรกทอรีที่ใช้งานอยู่
gsutil cp gs://cloud-samples-data/documentai/form.pdf .
ยืนยันว่าดาวน์โหลดไฟล์ไปยัง Cloud Shell แล้วโดยใช้คำสั่งด้านล่าง
ls -ltr form.pdf
7. ติดตั้งไลบรารีของไคลเอ็นต์
จากนั้นให้ตั้งค่าโค้ดในไดเรกทอรีที่ใช้งานได้
เริ่มต้นแพ็กเกจ Node.js ใหม่:
npm init
ติดตั้งไลบรารีของไคลเอ็นต์ Document AI ดังนี้
npm install @google-cloud/documentai
8. ส่งคำขอเกี่ยวกับเอกสารสำหรับกระบวนการแบบซิงโครนัส
ในขั้นตอนนี้ คุณจะเรียกเอกสารเพื่อประมวลผลโดยใช้ปลายทางแบบซิงโครนัส สำหรับการประมวลผลเอกสารจำนวนมากพร้อมกัน คุณยังสามารถใช้ API แบบอะซิงโครนัส หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ API โปรแกรมแยกวิเคราะห์ โปรดอ่านคำแนะนำที่นี่
สร้างไฟล์ index.js
และวางรหัสต่อไปนี้ กรอกข้อมูลตัวแปรที่เกี่ยวข้องด้วยข้อมูลของผู้ประมวลผลข้อมูล
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;
});
เรียกใช้โค้ดตอนนี้และคุณจะเห็นข้อความต่อไปนี้พิมพ์อยู่ในคอนโซลของคุณ
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
ในขั้นตอนถัดไป คุณจะได้ดึงข้อมูลที่มีโครงสร้างซึ่งสามารถจัดเก็บไว้ในฐานข้อมูลหรือใช้ในแอปพลิเคชันอื่นได้ง่ายขึ้น
9. ดึงข้อมูลคู่คีย์/ค่าของแบบฟอร์ม
ตอนนี้คุณสามารถดึงคู่คีย์-ค่าจากแบบฟอร์มและคะแนนความเชื่อมั่นที่เกี่ยวข้องได้แล้ว ออบเจ็กต์การตอบกลับเอกสารมีรายการหน้าจากเอกสารอินพุต ออบเจ็กต์ page
แต่ละรายการจะมีรายการช่องข้อมูลในแบบฟอร์มและตำแหน่งในข้อความ
โค้ดต่อไปนี้จะทำซ้ำในแต่ละหน้าและแยกคีย์ ค่า และคะแนนความเชื่อมั่นแต่ละรายการ
เพิ่มฟังก์ชันต่อไปนี้ลงในโค้ดของคุณ
/**
* 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;
}
เพิ่มการเรียกไปยังฟังก์ชัน extractFormData()
จากภายในฟังก์ชันหลัก และพิมพ์ออบเจ็กต์ที่ได้เป็นตาราง
/**
* 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);
}
เรียกใช้โค้ดของคุณกันเลย คุณควรเห็นผลลัพธ์ต่อไปนี้หากใช้เอกสารตัวอย่างของเรา:
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. ยินดีด้วย
ยินดีด้วย คุณใช้ Document AI API เพื่อดึงข้อมูลจากแบบฟอร์มที่เขียนด้วยลายมือเสร็จสมบูรณ์แล้ว เราขอแนะนำให้คุณทดลองใช้รูปภาพรูปแบบอื่นๆ
ล้างข้อมูล
โปรดทำดังนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
- ใน Cloud Console ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ของคุณ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์
ดูข้อมูลเพิ่มเติม
- อนาคตของเอกสาร - เพลย์ลิสต์ YouTube
- เอกสารประกอบสำหรับ Document AI
- ข้อมูลอ้างอิงไลบรารีของไคลเอ็นต์ Node.js สำหรับ Document AI
- ตัวอย่าง Node.js สำหรับ Document AI