beginanalyzedocument Chính là cái tôi cần - rồng hổ

/imgposts/0scs59ke.jpg
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:

  • begin_analyze_document_from_url: Phương pháp được sử dụng trong ví dụ trên.
  • begin_analyze_document: Chính là cái tôi cần.
  • close
  • model_id: ID mô hình, thực tế là một chuỗi, đại diện cho tên mô hình được sử dụng. Ví dụ: CMND, hóa đơn.
  • document: Luồng tệp hoặc byte dạng JPEG, PNG, PDF, TIFF, BMP, hoặc HEIF.
  • locale: Đối với người dùng khu vực Mỹ, chỉ cần đặt là en-US.
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

  • Toàn cầu: Sổ hộ chiếu, thẻ hộ chiếu
  • Hoa Kỳ: Giấy phép lái xe, CMND, giấy phép cư trú (thẻ xanh), thẻ an sinh xã hội, thẻ căn cước quân nhân
  • Châu Âu: Giấy phép lái xe, CMND, giấy phép cư trú
  • Ấn Độ: Giấy phép lái xe, thẻ PAN, thẻ Aadhaar
  • Canada: Giấy phép lái xe, CMND, giấy phép cư trú (thẻ lá phong)
  • Úc: Giấy phép lái xe, thẻ ảnh, Key-pass ID (bao gồm phiên bản số)

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:

  • FirstName
  • LastName
  • DocumentNumber

Đố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.

  • Có thể phát hiện hộ chiếu/CMND giả mạo khô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.