Ekstrakcja danych z faktur za pomocą AI OCR i prostego skryptu w Pythonie

Dowiedz się, jak zautomatyzować ekstrakcję danych z faktur za pomocą AI OCR i Pythona z API FlowHunt, umożliwiając szybkie, dokładne i skalowalne przetwarzanie dokumentów.

Ekstrakcja danych z faktur za pomocą AI OCR i prostego skryptu w Pythonie

Czym jest AI OCR?

OCR wspierany przez sztuczną inteligencję wykracza poza możliwości tradycyjnego OCR, ponieważ wykorzystuje AI do rozumienia kontekstu, obsługi wielu typów układów oraz zapewniania wysokiej jakości, ustrukturyzowanej ekstrakcji nawet z najbardziej złożonych dokumentów. Podczas gdy tradycyjne OCR służy do odczytywania tekstu w stałych układach, AI OCR radzi sobie z wieloma rodzajami formatów i konfiguracji typowych dla faktur i dokumentów biznesowych.

Kluczowe cechy AI OCR

  • Zrozumienie kontekstu: AI OCR wykorzystuje NLP do analizy kontekstowej dokumentów. Rozpoznaje pola takie jak „Kwota całkowita”, „Data faktury” czy „Nazwa klienta”, niezależnie od ich położenia.
  • Elastyczność: Tradycyjne OCR gubi się przy nieregularnych układach; AI OCR jest elastyczne i wyciąga informacje z różnych formatów faktur bez problemu.
  • Strukturyzacja danych: AI OCR często dostarcza już ustrukturyzowane wyniki, które łatwiej wykorzystać dalej niż surowy tekst z tradycyjnego OCR.

Dlaczego warto używać AI OCR do faktur?

Faktury muszą być przetwarzane szybko i z dużą dokładnością — niezależnie od tego, czy dotyczy to księgowości, logistyki czy działu zakupów. AI OCR automatyzuje ekstrakcję danych i usprawnia procesy, poprawiając jakość danych.

Korzyści z AI OCR dla faktur

  • Szybkość i wydajność: Dzięki AI OCR można przetwarzać duże ilości faktur w krótkim czasie, oszczędzając zasoby i pracę ludzką.
  • Większa dokładność: Modele AI wytrenowane na wielu formatach dokumentów redukują błędy typowe dla ręcznego wprowadzania danych.
  • Łatwiejsze zarządzanie danymi: Dane są już ustrukturyzowane, więc łatwo integrują się z bazami danych, narzędziami analitycznymi czy systemami ERP.
  • Skalowalność: AI OCR może obsłużyć ogromne ilości dokumentów bez zwiększania zatrudnienia, co jest idealne dla dużych lub szybko rosnących firm.

ROI z wykorzystania AI OCR FlowHunt

W większości firm ekstrakcja danych z faktur odbywa się ręcznie przez pracowników. To bardzo czasochłonny i kosztowny proces, który można zautomatyzować w wielu branżach, m.in. podatkowej, prawnej, finansowej i innych.

Ten proces zajmuje 5 do 15 sekund i kosztuje 0,01 – 0,02 kredytu, podczas gdy za tę samą pracę pracownikowi trzeba zapłacić 15–30 dolarów za godzinę.

Porównanie kosztów OCR
ProcesorKoszt rocznyLiczba faktur rocznieKoszt za fakturę
Człowiek$30,00012,000$2.50
FlowHunt$16212,000$0.013
FlowHunt (przy $30,000)$30,0002,250,000$0.0133

Można więc powiedzieć, że FlowHunt jest znacznie efektywniejszy.

Problemy przy wdrażaniu OCR

Mimo licznych zalet, OCR niesie ze sobą pewne wyzwania:

  1. Jakość obrazu: Skuteczność OCR w dużej mierze zależy od jakości obrazu. Rozmazane lub niskiej rozdzielczości zdjęcia dają słabe wyniki.
  2. Złożony układ: Dokumenty o skomplikowanych układach, mieszanych czcionkach czy tabelach mogą wymagać zaawansowanego OCR.
  3. Języki i zestawy znaków: Oprogramowanie OCR może mieć ograniczoną obsługę języków, przez co dla znaków spoza alfabetu łacińskiego wymagane są wyspecjalizowane modele.
  4. Wskaźnik błędów: Żaden system OCR nie jest w 100% dokładny, zwłaszcza przy pisankach lub nietypowych czcionkach, co może generować błędy w wynikach.

Aby rozwiązać te problemy, warto korzystać z wydajnego i elastycznego narzędzia OCR. API FlowHunt zapewnia solidne rozwiązanie OCR, radząc sobie ze złożonymi strukturami dokumentów — idealne do projektów na dużą skalę.

Konfiguracja skryptu OCR w Pythonie

Aby zautomatyzować proces, zainstaluj poniższe biblioteki Pythona:

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

Zainstalujesz w ten sposób:

  • requests: Do wysyłania żądań HTTP do API FlowHunt i pobierania wyników OCR.
  • pdf2image: Do konwersji stron PDF na obrazy.
  • flowhunt: SDK Pythona do FlowHunt, ułatwiające komunikację z API OCR.

Krok po kroku – opis działania kodu

Kod pobiera plik PDF, zamienia go na obrazy, przesyła każdy obraz do FlowHunt do przetworzenia OCR i zapisuje wynik w formacie CSV.

Import bibliotek

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, time — obsługa JSON, zarządzanie plikami, wyrażenia regularne i odstępy czasowe.
  • requests: Obsługuje żądania HTTP, np. pobieranie wyników OCR.
  • flowhunt: SDK FlowHunt do uwierzytelniania i komunikacji z API OCR.
  • pdf2image: Konwertuje strony PDF na obrazy, umożliwiając OCR pojedynczych stron.

Funkcja konwertująca strony PDF na obrazy

def convert_pdf_to_image(path: str) -> None:
    """
    Konwertuje plik PDF na obrazy, zapisując każdą stronę jako 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: Zamienia każdą stronę PDF na obraz.
  • images[i].save: Zapisuje każdą stronę jako osobny plik JPEG do przetwarzania OCR.

Ekstrakcja URL załącznika z wynikiem

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
  • Funkcja pobiera URL do pobrania wyniku OCR.
  • Wykorzystuje regex do znalezienia obiektu JSON z linkiem do pobrania.

Konfiguracja API i uwierzytelnienie

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>"}
)
  • Konwertuje PDF na obrazy.
  • Ustawia dostęp do API przez dane FlowHunt.

Inicjalizacja klienta API

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
  • Uwierzytelnia i pobiera workspace_id do dalszych wywołań API.

Rozpoczęcie sesji 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)
  • Tworzy sesję do przesyłania obrazów i przetwarzania OCR.

Przesyłanie obrazów do 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()
            )
  • Przesyła każdy obraz w ramach sesji do przetwarzania OCR.

Wywołanie przetwarzania OCR i czekanie na wynik

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)
  • Uruchamia OCR i co 3 sekundy sprawdza, czy przetwarzanie się zakończyło.

Pobieranie i zapisywanie wyniku OCR

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)
  • Pobiera wynik w CSV i zapisuje lokalnie.

Uruchomienie skryptu i testowanie wyników

Aby uruchomić ten skrypt:

  1. Umieść swój plik PDF w folderze data/.
  2. Uzupełnij <FLOW_ID_HERE> i <API_KEY_HERE> swoimi danymi FlowHunt.
  3. Uruchom skrypt — PDF zostanie skonwertowany, obrazy przesłane do OCR, a wynik pobrany w CSV.

Podsumowanie

Ten skrypt w Pythonie to wydajne rozwiązanie do skalowania procesów OCR — idealne dla branż wymagających intensywnego przetwarzania dokumentów. Dzięki API FlowHunt uzyskasz konwersję dokumentów do CSV, usprawniając obieg dokumentów i zwiększając produktywność.

Pełny kod

Kliknij TUTAJ, aby zobaczyć wersję 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)

Najczęściej zadawane pytania

Czym jest AI OCR i czym różni się od tradycyjnego OCR?

AI OCR wykorzystuje uczenie maszynowe i NLP do rozumienia kontekstu dokumentów, obsługi złożonych układów i wyodrębniania ustrukturyzowanych danych z faktur, w przeciwieństwie do tradycyjnego OCR, które opiera się na rozpoznawaniu tekstu w stałym układzie.

Jakie są główne korzyści z używania AI OCR do faktur?

AI OCR zapewnia szybkość, dokładność, skalowalność i ustrukturyzowane wyniki, ograniczając pracę ręczną, minimalizując błędy i umożliwiając łatwą integrację z systemami biznesowymi.

Jak mogę wdrożyć automatyzację OCR faktur w Pythonie i FlowHunt?

Korzystając z Python SDK FlowHunt, możesz konwertować PDF-y na obrazy, przesyłać je do API FlowHunt w celu OCR i pobierać dane w formacie CSV, automatyzując cały proces ekstrakcji.

Jakie wyzwania występują w przetwarzaniu OCR i jak FlowHunt je rozwiązuje?

Typowe wyzwania to słaba jakość obrazu, złożone układy dokumentów i różne języki. API FlowHunt radzi sobie z nimi dzięki zaawansowanym modelom AI i elastycznym możliwościom przetwarzania.

Jaki jest zwrot z inwestycji (ROI) z automatyzacji ekstrakcji danych z faktur za pomocą FlowHunt?

AI OCR FlowHunt potrafi przetwarzać faktury w kilka sekund, przy ułamku kosztów pracy ludzkiej, zapewniając ogromny wzrost efektywności i skalowalność dla rozwijających się firm.

Arshia jest Inżynierką Przepływów Pracy AI w FlowHunt. Z wykształceniem informatycznym i pasją do sztucznej inteligencji, specjalizuje się w tworzeniu wydajnych przepływów pracy, które integrują narzędzia AI z codziennymi zadaniami, zwiększając produktywność i kreatywność.

Arshia Kahani
Arshia Kahani
Inżynierka Przepływów Pracy AI

Wypróbuj narzędzie FlowHunt AI Invoice OCR

Automatyzuj ekstrakcję danych z faktur dzięki wydajnemu AI OCR FlowHunt. Oszczędzaj czas, minimalizuj błędy i usprawnij swoje procesy konwertując PDF-y na dane strukturalne w kilka sekund.

Dowiedz się więcej