Trích Xuất Dữ Liệu Hóa Đơn Bằng AI OCR Với Script Python Đơn Giản

Trích Xuất Dữ Liệu Hóa Đơn Bằng AI OCR Với Script Python Đơn Giản

Tìm hiểu cách tự động hóa trích xuất dữ liệu hóa đơn bằng AI OCR và Python với API FlowHunt, giúp xử lý tài liệu nhanh, chính xác và mở rộng.

OCR Dựa Trên AI Là Gì?

OCR được điều khiển bởi AI còn vượt qua khả năng của OCR truyền thống ở chỗ nó sử dụng trí tuệ nhân tạo để hiểu ngữ cảnh, xử lý nhiều kiểu bố cục, và trích xuất dữ liệu có cấu trúc chất lượng cao ngay cả từ tài liệu phức tạp nhất. Trong khi OCR truyền thống chỉ nhận diện văn bản từ mẫu cố định, AI OCR có thể xử lý đa dạng các kiểu bố cục phổ biến trong hóa đơn và tài liệu doanh nghiệp.

Tính Năng Chính Của AI OCR

  • Hiểu Ngữ Cảnh: AI OCR sử dụng NLP để hiểu ngữ cảnh trong tài liệu. Nó nhận diện các trường như “Tổng Tiền,” “Ngày Hóa Đơn,” và “Tên Khách Hàng” ngay cả khi xuất hiện ở nhiều vị trí khác nhau.
  • Linh Hoạt: OCR truyền thống thường gặp khó với bố cục bất thường; AI OCR linh hoạt và có thể trích xuất thông tin từ nhiều dạng hóa đơn mà không gặp khó khăn.
  • Cấu Trúc Dữ Liệu: Thường thì AI OCR sẽ trả về kết quả có cấu trúc, dễ dàng xử lý tiếp theo hơn so với đầu ra thô của OCR truyền thống.

Tại Sao Nên Dùng AI OCR Cho Hóa Đơn?

Hóa đơn cần được xử lý hiệu quả và chính xác cao, dù ở bộ phận kế toán, logistics hay mua sắm. AI OCR tự động hóa việc trích xuất dữ liệu, giúp quy trình làm việc trơn tru hơn và nâng cao độ chính xác dữ liệu.

Lợi Ích Của AI OCR Cho Hóa Đơn

  • Tốc Độ & Hiệu Quả: Với AI OCR, số lượng lớn hóa đơn được xử lý trong thời gian ngắn, giải phóng nguồn lực và nhân sự.
  • Độ Chính Xác Cao: Mô hình AI được huấn luyện trên nhiều loại tài liệu giúp giảm sai sót so với nhập liệu thủ công.
  • Quản Lý Dữ Liệu Mượt Mà: Dữ liệu đã có cấu trúc nên dễ dàng nhập vào hệ quản trị cơ sở dữ liệu, phân tích, hay hệ thống ERP.
  • Khả Năng Mở Rộng: AI OCR xử lý khối lượng lớn tài liệu mà không cần thêm nhân sự, lý tưởng cho doanh nghiệp lớn hoặc tăng trưởng nhanh.

ROI Khi Sử Dụng Công Cụ AI OCR Của FlowHunt

Phần lớn doanh nghiệp truyền thống trích xuất dữ liệu hóa đơn thủ công qua nhân viên. Đây là công việc tốn nhiều thời gian và chi phí, có thể tự động hóa cho nhiều lĩnh vực như thuế, pháp lý, tài chính, v.v.

Quá trình này chỉ mất 5 đến 15 giây và tiêu tốn 0.01 – 0.02 credit, trong khi bình thường bạn phải trả $15 – $30 cho mỗi giờ làm việc của nhân viên với cùng tác vụ.

OCR Cost Comparison
Bộ Xử LýChi Phí/NămSố Hóa Đơn Xử Lý/NămChi Phí/Hóa Đơn
Con người$30,00012,000$2.50
FlowHunt$16212,000$0.013
FlowHunt (với $30,000)$30,0002,250,000$0.0133

Có thể thấy FlowHunt hiệu quả hơn rất nhiều lần.

Những Vấn Đề Khi Áp Dụng OCR

Dù OCR rất hữu ích, nhưng vẫn tồn tại một số thách thức:

  1. Chất Lượng Ảnh: Độ chính xác OCR phụ thuộc lớn vào chất lượng hình ảnh. Ảnh mờ hoặc độ phân giải thấp sẽ cho kết quả kém.
  2. Bố Cục Phức Tạp: Tài liệu có bố cục lạ, font chữ hỗn hợp hoặc bảng biểu sẽ cần OCR nâng cao hơn.
  3. Ngôn Ngữ & Bộ Ký Tự: Phần mềm OCR có thể hạn chế về ngôn ngữ, cần mô hình riêng cho ký tự phi Latin.
  4. Tỷ Lệ Lỗi: Không phần mềm OCR nào chính xác 100%, nhất là với chữ viết tay hoặc font không chuẩn, có thể gây lỗi kết quả.

Để khắc phục, bạn nên sử dụng công cụ OCR mạnh mẽ và linh hoạt. API của FlowHunt cung cấp giải pháp OCR vượt trội, xử lý tốt tài liệu phức tạp, lý tưởng cho dự án OCR quy mô lớn.

Thiết Lập Script Python OCR

Để tự động hóa quá trình, bạn cần cài các thư viện Python sau:

pip install requests pdf2image git+https://github.com/QualityUnit/flowhunt-python-sdk.git

Các thư viện này gồm:

  • requests: Gửi HTTP request tới API FlowHunt và tải kết quả OCR.
  • pdf2image: Chuyển trang PDF thành ảnh.
  • flowhunt: FlowHunt Python SDK giúp làm việc với API OCR dễ dàng hơn.

Phân Tích Từng Bước Đoạn Mã

Đoạn mã dưới đây sẽ lấy file PDF, chuyển từng trang thành ảnh, gửi lên FlowHunt để OCR và lưu kết quả ở dạng CSV.

Import Thư Viện

import json
import os
import re
import time
import requests
import flowhunt
from flowhunt.rest import ApiException
from pprint import pprint
from pdf2image import convert_from_path
  • json, os, re, và time hỗ trợ xử lý JSON, quản lý file, regex và thời gian.
  • requests: Dùng để gửi HTTP request, tải kết quả OCR.
  • flowhunt: SDK của FlowHunt xử lý xác thực và giao tiếp với API OCR.
  • pdf2image: Chuyển trang PDF thành ảnh, phục vụ OCR từng trang.

Hàm Chuyển Trang PDF Thành Ảnh

def convert_pdf_to_image(path: str) -> None:
    """
    Convert a PDF file to images, storing each page as a JPEG.
    """
    images = convert_from_path(path)
    for i in range(len(images)):
        images[i].save('data/images/' + 'page' + str(i) + '.jpg', 'JPEG')
  • convert_from_path: Chuyển từng trang PDF thành ảnh.
  • images[i].save: Lưu từng trang thành file JPEG để OCR.

Trích Xuất URL Đính Kèm Kết Quả

def extract_attachment_url(data_string):
    pattern = r'```flowhunt\n({.*})\n```'
    match = re.search(pattern, data_string, re.DOTALL)
    if match:
        json_string = match.group(1)
        try:
            json_data = json.loads(json_string)
            return json_data.get('download_link', None)
        except json.JSONDecodeError:
            print("Error: Failed to decode JSON.")
            return None
    return None
  • Hàm này lấy URL dùng để tải kết quả OCR về.
  • Dùng regex tìm object JSON chứa link tải.

Cấu Hình & Xác Thực API

convert_pdf_to_image("data/test.pdf")
FLOW_ID = "<FLOW_ID_HERE>"

configuration = flowhunt.Configuration(
    host="https://api.flowhunt.io",
    api_key={"APIKeyHeader": "<API_KEY_HERE>"}
)
  • Chuyển PDF thành ảnh.
  • Cấu hình truy cập API với thông tin FlowHunt.

Khởi Tạo API Client

with flowhunt.ApiClient(configuration) as api_client:
    auth_api = flowhunt.AuthApi(api_client)
    api_response = auth_api.get_user()
    workspace_id = api_response.api_key_workspace_id
  • Xác thực và lấy workspace_id để gọi API.

Bắt Đầu Phiên Làm Việc Với Flow

flows_api = flowhunt.FlowsApi(api_client)
from_flow_create_session_req = flowhunt.FlowSessionCreateFromFlowRequest(flow_id=FLOW_ID)
create_session_rsp = flows_api.create_flow_session(workspace_id, from_flow_create_session_req)
  • Khởi tạo phiên làm việc để upload ảnh và xử lý OCR.

Upload Ảnh Để Xử Lý OCR

for image in os.listdir("data/images"):
    image_name, image_extension = os.path.splitext(image)
    with open("data/images/" + image, "rb") as file:
        try:
            flow_sess_attachment = flows_api.upload_attachments(
                create_session_rsp.session_id,
                file.read()
            )
  • Upload từng ảnh lên phiên làm việc để OCR.

Gọi Xử Lý OCR & Kiểm Tra Kết Quả

invoke_rsp = flows_api.invoke_flow_response(
    create_session_rsp.session_id, 
    flowhunt.FlowSessionInvokeRequest(message="")
)
while True:
    get_flow_rsp = flows_api.poll_flow_response(
        create_session_rsp.session_id, invoke_rsp.message_id
    )
    print("Flow response: ", get_flow_rsp)
    if get_flow_rsp.response_status == "S":
        print("done OCR")
        break
    time.sleep(3)
  • Gửi yêu cầu xử lý OCR và kiểm tra trạng thái mỗi 3 giây cho đến khi xong.

Tải Kết Quả OCR Về Máy

attachment_url = extract_attachment_url(get_flow_rsp.final_response[0])
if attachment_url:
    response = requests.get(attachment_url)
    with open("data/results/" + image_name + ".csv", "wb") as file:
        file.write(response.content)
  • Tải file CSV kết quả và lưu về máy.

Chạy Script & Kiểm Tra Kết Quả

Để chạy script này:

  1. Đặt file PDF vào thư mục data/.
  2. Điền <FLOW_ID_HERE><API_KEY_HERE> bằng thông tin FlowHunt của bạn.
  3. Chạy script để chuyển PDF thành ảnh, upload lên OCR và tải kết quả CSV về.

Kết Luận

Script Python này là giải pháp hiệu quả để mở rộng quy trình OCR, phù hợp cho các ngành có nhu cầu xử lý tài liệu lớn. Kết hợp API FlowHunt, giải pháp này giúp chuyển tài liệu sang CSV nhanh chóng, tối ưu hóa quy trình và nâng cao năng suất.

Toàn Bộ Mã Nguồn

Nhấn VÀO ĐÂY để xem bản Gist.

import json
import os
import re
import time
import requests
import flowhunt
from flowhunt.rest import ApiException
from pprint import pprint
from pdf2image import convert_from_path

def convert_pdf_to_image(path: str) -> None:
    """
    Convert a pdf file to an image
    :return:
    """
    images = convert_from_path(path)
    for i in range(len(images)):
        images[i].save('data/images/' + 'page'+ str(i) +'.jpg', 'JPEG')

def extract_attachment_url(data_string):
    pattern = r'```flowhunt\n({.*})\n```'
    match = re.search(pattern, data_string, re.DOTALL)
    if match:
        json_string = match.group(1)
        try:
            json_data = json.loads(json_string)
            return json_data.get('download_link', None)
        except json.JSONDecodeError:
            print("Error: Failed to decode JSON.")
            return None
    return None

convert_pdf_to_image("data/test.pdf")
FLOW_ID = "<FLOW_ID_HERE>"

configuration = flowhunt.Configuration(host = "https://api.flowhunt.io",
                                       api_key = {"APIKeyHeader": "<API_KEY_HERE>"})

with flowhunt.ApiClient(configuration) as api_client:
    auth_api = flowhunt.AuthApi(api_client)
    api_response = auth_api.get_user()
    workspace_id = api_response.api_key_workspace_id

    flows_api = flowhunt.FlowsApi(api_client)
    from_flow_create_session_req = flowhunt.FlowSessionCreateFromFlowRequest(
        flow_id=FLOW_ID
    )
    create_session_rsp = flows_api.create_flow_session(workspace_id, from_flow_create_session_req)

    for image in os.listdir("data/images"):
        image_name, image_extension = os.path.splitext(image)
        with open("data/images/" + image, "rb") as file:
            try:
                flow_sess_attachment = flows_api.upload_attachments(
                    create_session_rsp.session_id,
                    file.read()
                )
                invoke_rsp = flows_api.invoke_flow_response(create_session_rsp.session_id, flowhunt.FlowSessionInvokeRequest(
                    message="",
                ))
                while True:
                    get_flow_rsp = flows_api.poll_flow_response(create_session_rsp.session_id, invoke_rsp.message_id)
                    print("Flow response: ", get_flow_rsp)
                    if get_flow_rsp.response_status == "S":
                        print("done OCR")
                        attachment_url = extract_attachment_url(get_flow_rsp.final_response[0])
                        if attachment_url:
                            print("Attachment URL: ", attachment_url, "\n Downloading the file...")
                            response = requests.get(attachment_url)
                            with open("data/results/" + image_name + ".csv", "wb") as file:
                                file.write(response.content)
                        break
                    time.sleep(3)
            except ApiException as e:
                print("error for file ", image)
                print(e)

Câu hỏi thường gặp

OCR dựa trên AI là gì và khác gì so với OCR truyền thống?

OCR dựa trên AI tận dụng machine learning và NLP để hiểu ngữ cảnh tài liệu, xử lý bố cục phức tạp và trích xuất dữ liệu có cấu trúc từ hóa đơn, trong khi OCR truyền thống chỉ dựa vào nhận diện văn bản theo định dạng cố định.

Lợi ích chính khi dùng AI OCR cho hóa đơn là gì?

AI OCR mang lại tốc độ, độ chính xác, khả năng mở rộng và kết quả có cấu trúc, giảm công việc thủ công, tối thiểu hóa lỗi và dễ dàng tích hợp với các hệ thống doanh nghiệp.

Làm sao tôi có thể tự động hóa OCR hóa đơn với Python và FlowHunt?

Bằng cách sử dụng FlowHunt Python SDK, bạn có thể chuyển PDF sang ảnh, gửi lên API FlowHunt để OCR và nhận dữ liệu có cấu trúc ở dạng CSV, tự động hóa toàn bộ quá trình trích xuất.

Những thách thức nào tồn tại trong xử lý OCR và FlowHunt khắc phục ra sao?

Các thách thức thường gặp gồm chất lượng ảnh kém, bố cục tài liệu phức tạp, đa ngôn ngữ. API của FlowHunt được thiết kế để xử lý những vấn đề này với mô hình AI tiên tiến và khả năng xử lý linh hoạt.

ROI của việc tự động hóa trích xuất dữ liệu hóa đơn với FlowHunt là gì?

AI OCR của FlowHunt có thể xử lý hóa đơn chỉ trong vài giây với chi phí thấp hơn nhiều lần so với con người, mang lại hiệu quả vượt trội và khả năng mở rộng cho doanh nghiệp tăng trưởng nhanh.

Arshia là Kỹ sư Quy trình AI tại FlowHunt. Với nền tảng về khoa học máy tính và niềm đam mê AI, anh chuyên tạo ra các quy trình hiệu quả tích hợp công cụ AI vào các nhiệm vụ hàng ngày, nâng cao năng suất và sự sáng tạo.

Arshia Kahani
Arshia Kahani
Kỹ sư Quy trình AI

Trải nghiệm Công Cụ AI Invoice OCR của FlowHunt

Tự động hóa trích xuất dữ liệu hóa đơn với AI OCR mạnh mẽ của FlowHunt. Tiết kiệm thời gian, giảm sai sót và tối ưu hóa quy trình làm việc chỉ với vài giây chuyển PDF sang dữ liệu có cấu trúc.

Tìm hiểu thêm

Giải quyết các bài toán OCR với AI
Giải quyết các bài toán OCR với AI

Giải quyết các bài toán OCR với AI

Khám phá cách OCR tích hợp AI đang thay đổi việc trích xuất dữ liệu, tự động hóa xử lý tài liệu và thúc đẩy hiệu quả trong các ngành như tài chính, y tế và bán ...

5 phút đọc
AI OCR +5
Trình Trích Xuất Dữ Liệu Hóa Đơn
Trình Trích Xuất Dữ Liệu Hóa Đơn

Trình Trích Xuất Dữ Liệu Hóa Đơn

Khám phá cách một quy trình OCR Trích Xuất Dữ Liệu Hóa Đơn có thể tối ưu hóa quy trình tài chính của bạn bằng cách tự động hóa việc trích xuất và tổ chức dữ liệ...

3 phút đọc
OCR Invoice Automation +3
Nhận diện ký tự quang học (OCR)
Nhận diện ký tự quang học (OCR)

Nhận diện ký tự quang học (OCR)

Nhận diện ký tự quang học (OCR) là công nghệ đột phá giúp chuyển đổi các tài liệu như giấy tờ được quét, PDF hoặc hình ảnh thành dữ liệu có thể chỉnh sửa và tìm...

7 phút đọc
OCR Document Processing +5