05. tháng 5 2025
pip3 install azure-ai-formrecognizer==3.3.0b1
# Tài liệu mẫu
docUrl = ""
# Tạo instance của `DocumentAnalysisClient` và biến `AzureKeyCredential`
document_analysis_client = DocumentAnalysisClient(endpoint=endpoint, credential=AzureKeyCredential(key))
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-document", docUrl)
result = poller.result()
Tuy nhiên, ví dụ này sử dụng URL tài liệu PDF làm ví dụ. Tôi cần tải lên tệp cục bộ hoặc luồng dữ liệu nhị phân.
Có tồn tại các giao diện khác cho DocumentAnalysisClient không?
DocumentAnalysisClient có ba phương pháp:
with open(path_to_sample_documents, "rb") as f:
poller = document_analysis_client.begin_analyze_document(
"prebuilt-invoice", document=f, locale="en-US"
)
invoices = poller.result() [tỉ số ngoại hạng anh](/blog/azure-ocr-id-passpor/)
Quay lại tài liệu đầu tiên:
model_id là: prebuilt-idDocument
Tôi đã tìm thấy hộ chiếu mà tôi đã làm cách đây nhiều năm.
Các trường tương ứng với loại tài liệu khác nhau. Nhưng vẫn có những phần chung:
Đối với mô hình dựng sẵn: Tài liệu, bố cục, biên lai, hóa đơn, ID, W-2, thẻ (bảo hiểm, vaccine, danh thiếp): Mỗi 1,000 trang $10 USD. Nghĩa là mỗi lần 0.01 USD. Miễn phí 500 lần đầu tiên mỗi tháng.
Ví dụ, với hộ chiếu của tôi:
#!/usr/bin/env python3
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = "xxx" // Cần thay thế
key = "xxx" // Cần thay thế
print("Hello world!")
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
with open("./test.jpg", "rb") as f:
poller = document_analysis_client.begin_analyze_document(
"prebuilt-idDocument", document=f, locale="en-US"
)
result = poller.result()
# >>> result.documents[0].fields["FirstName"].value
# 'ZHONGWEI'
# >>> result.documents[0].fields["LastName"].value
# 'SUN.'
# >>> result.documents[0].fields["DocumentNumber"].value
# 'xxxxxxxxx'
Thử nghiệm thành công.
Tôi đã thử một hình ảnh JPG không phải CMND/hộ chiếu để xác nhận định dạng trả về khi không hợp lệ:
>>> print(result.documents[0].fields)
{'CountryRegion': DocumentField(value_type=countryRegion, value='USA', content=None, bounding_regions=[], spans=[], confidence=0.995), 'Region': DocumentField(value_type=string, value='South Carolina', content=None, bounding_regions=[], spans=[], confidence=0.99)}
>>> print(result.documents[0].fields["FirstName"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'FirstName'
>>> "FirstName" in result.documents[0].fields
False
Chỉ cần kiểm tra xem các key này có tồn tại trong fields hay không. Không được!! Còn một trường hợp nữa là documents trực tiếp là một danh sách rỗng.
Việc cài đặt azure sdk sẽ gây xung đột phiên bản phụ thuộc với rasa, sau khi cài đặt, rasa sẽ cá độ bóng đá không khởi động được. Lỗi báo:
ImportError: không thể nhập tên 'LegacyVersion' từ 'packaging.version' (/home/zhongwei/.local/lib/python3.8/site-packages/packaging/version.py)
Thực tế là khi cài đặt azure sdk, đã có thông báo trước đó:
ERROR: trình giải quyết phụ thuộc của pip hiện tại không tính đến tất cả các gói đã cài đặt. Hành vi này là nguồn gốc của các xung đột phụ thuộc sau đây. rasa 3.4.6 yêu cầu attrs<22.2,>=19.3, nhưng bạn có attrs 23.1.0 không tương thích. rasa 3.4.6 yêu cầu jsonschema<4.17,>=3.2, nhưng bạn có jsonschema 4.19.0 không tương thích. rasa 3.4.6 yêu cầu packaging<21.0,>=20.0, nhưng bạn có packaging 23.1 không tương thích. rasa 3.4.6 yêu cầu prompt-toolkit<3.0.29,>=3.0, nhưng bạn có prompt-toolkit 3.0.39 không tương thích.
tmuxp 1.9.4 yêu cầu click<8.1,>7, nhưng bạn có click 8.1.6 không tương thích.
Do đó, vẫn cần một phương án cô lập môi trường phát triển.
Khi đang tắm biển cùng con gái, tôi thử dịch vụ OCR bằng điện thoại, bất ngờ phát hiện dịch vụ hoạt động bất thường, đoán rằng vấn đề nằm ở cổng hoặc kích thước hình ảnh. Vì vậy, tôi vội vàng trở về nhà...
Xem qua nhật ký, quả thật vấn đề nằm ở hạn chế kích thước hình ảnh:
azure.core.exceptions.HttpResponseError: (InvalidRequest) Yêu cầu không hợp lệ.
Code: InvalidRequest
Message: Yêu cầu không hợp lệ.
Lỗi nội bộ: {
"code": "InvalidContentLength",
"message": "Hình ảnh đầu vào quá lớn. Tham khảo tài liệu cho kích thước tệp tối đa."
}
Sử dụng mức miễn phí của dịch vụ OCR Azure, hình ảnh có giới hạn 4MB. Phần trả phí có thể đạt tới 500MB. Sau khi cân nhắc việc nén trước khi tải lên ở phía JS hoặc sử dụng Python để nén ở phía máy chủ, cuối cùng tôi đã chọn phương án nén ở phía máy chủ. Kết quả là mọi thứ đã hoạt động tốt.