Địa chỉ tài liệu API

Địa chỉ tài liệu API

sv388 sv288 com,Tải về Bắn cá Haidilao Android,123win city 8888

Sử dụng giao diện Microsoft Azure để trích xuất thông tin từ thẻ căn cước hoặc hộ chiếu bằng công nghệ OCR

Ngày cập nhật: 19-08-2023 | Số lần xem: 2288 | Số từ: 1011 | Phân loại: Nhận dạng hình ảnh
Tìm kiếm

Tài liệu Python SDK

Cài đặt gói cần thiết

1
pip3 install azure-ai-formrecognizer==3.3.0b1

Ví dụ mã nguồn

1
2
3
4
5
6
7
# Tệp mẫu
docUrl = "
# Tạo đối tượng DocumentAnalysisClient và 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ụ trên sử dụng URL của một tệp PDF, trong khi tôi cần xử lý file cục bộ hoặc luồng dữ liệu nhị phân.

Các phương thức khác của DocumentAnalysisClient

Tham khảo thêm tại:

Có ba phương thức chính:

  • begin_analyze_document_from_url: Phương thức được dùng trong ví dụ.
  • begin_analyze_document: Đây là phương thức phù hợp với yêu cầu của tôi.
  • close: Đóng kết nối sau khi xử lý.

Tham số của begin_analyze_document

  • model_id: Là chuỗi xác định mô hình sử dụng (ví dụ: thẻ căn cước, hóa đơn).
  • document: Dòng dữ liệu hoặc tệp có định dạng như JPEG, PNG, PDF, TIFF, BMP hoặc HEIF.
  • locale: Với người dùng Mỹ, bạn nên chọn en-US.

Ví dụ mới sử dụng file địa phương

1
2
3
4
5
with open("đường_dẫn_tệp_mẫu", "rb") as f:
  poller = document_analysis_client.begin_analyze_document(
    "prebuilt-invoice", document=f, locale="en-US"
  )
invoices = poller.result()

Mô hình tương ứng cho thẻ căn cước/hộ chiếu

Theo tài liệu đầu tiên:

Mã model là: prebuilt-idDocument

Phạm vi áp dụng

  • Hộ chiếu quốc tế, thẻ hộ chiếu nhỏ.
  • Giấy phép lái xe, thẻ căn cước, thẻ thường trú (Green Card), thẻ bảo hiểm xã hội, thẻ quân nhân tại Mỹ.
  • Chứng minh thư, giấy phép lái xe, thẻ cư trú tại châu Âu.
  • Giấy phép lái xe, PAN Card, Aadhaar Card tại Ấn Độ.
  • Chứng minh thư, thẻ thường trú (枫叶卡) tại Canada.
  • Chứng minh thư, thẻ có hình ảnh, Key-pass ID (bao gồm phiên bản số) tại Úc.

Hình ảnh thử nghiệm

Tôi đã tìm lại hộ chiếu cũ để thực hiện kiểm tra.

Trường dữ liệu trích xuất

Tùy từng loại giấy tờ sẽ có các trường dữ liệu khác nhau, nhưng vẫn có những trường chung như:

  • FirstName
  • LastName
  • DocumentNumber

Chi phí sử dụng

Chi tiết về giá tại:

Đối với các mô hình dựng sẵn (tài liệu, bố cục, hóa đơn, nhận dạng, W-2, thẻ bảo hiểm y tế, vắc-xin, danh thiếp):

  • $10 cho 1.000 trang, tức khoảng $0.01/trang.
  • 500 lượt miễn phí mỗi tháng.

Hello world – Kiểm tra hộ chiếu

Dưới đây là đoạn code đơn giản với hộ chiếu của tôi:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/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'

print("Thử nghiệm thành công!")

Kết quả trả về đúng như mong đợi.

Trường hợp không thể nhận diện

Tôi đã thử nghiệm với một hình ảnh JPG không phải là hộ chiếu hoặc căn cước:

1
2
3
4
5
6
7
8
>>> 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

Lúc này, chúng ta có thể kiểm tra xem các khóa như FirstName, LastName, DocumentNumber có tồn tại trong fields hay không. Nếu không có hoặc documents là danh sách rỗng, thì chắc chắn đó không phải là tài liệu hợp lệ.

TODO

  • Có thể phát triển tính năng phát hiện giấy tờ giả mạo.

Xung đột giữa các thư viện

Việc cài đặt SDK của Azure có thể gây ra xung đột với các dự án khác như Rasa. Một số lỗi điển hình:

1
ImportError: cannot import name 'LegacyVersion' from 'packaging.version'

Ngoài ra, pip cũng cảnh báo:

1
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed...

Vì vậy, việc sử dụng môi trường ảo hoặc container là rất quan trọng để tránh xung đột.

Giới hạn kích thước hình ảnh

Trong lúc đang ở biển cùng con gái và thử nghiệm dịch vụ OCR qua điện thoại, tôi bất ngờ gặp lỗi hệ thống. Sau khi kiểm tra log, nguyên nhân chính là do kích thước tệp vượt quá giới hạn:

1
2
3
azure.core.exceptions.HttpResponseError: (InvalidRequest) Invalid request.
Code: InvalidContentLength
Message: The input image is too large. Refer to documentation for the maximum file size.

Phiên bản miễn phí của Azure chỉ hỗ trợ tối đa 4MB, còn bản trả phí lên tới 500MB. Tôi đã cân nhắc việc nén hình ảnh trước khi upload và cuối cùng quyết định sử dụng giải pháp nén trên server bằng Python, và mọi thứ đã hoạt động ổn định trở lại.

comments powered by Disqus
Built with Hugo
Theme Stack thiết kế bởi Jimmy