AI OCR Factuurgegevens Extractie met een Eenvoudig Python-script

Leer hoe je factuurgegevens automatisch extraheert met AI-gebaseerde OCR en Python via FlowHunt’s API, voor snelle, nauwkeurige en schaalbare documentverwerking.

AI OCR Factuurgegevens Extractie met een Eenvoudig Python-script

Wat is AI-gebaseerde OCR?

AI-gestuurde OCR gaat verder dan de mogelijkheden van traditionele OCR doordat het kunstmatige intelligentie gebruikt om context te begrijpen, talloze lay-outvarianten aan te kunnen en hoogwaardige gestructureerde data te extraheren uit zelfs de meest complexe documenten. Waar traditionele OCR is ontworpen om tekst uit een vast formaat te halen, kan AI OCR omgaan met veel verschillende lay-outs en configuraties die vaak voorkomen in facturen en andere zakelijke documenten.

Belangrijkste kenmerken van AI-gebaseerde OCR

  • Contextueel Begrip: AI OCR gebruikt NLP voor contextueel begrip in documenten. Het herkent velden als “Totaalbedrag”, “Factuurdatum” en “Klantnaam”, ook als die op verschillende plekken staan.
  • Flexibiliteit: Traditionele OCR raakt vaak in de war bij onregelmatige lay-outs; AI OCR is flexibel en kan informatie uit verschillende soorten factuurformaten halen zonder problemen.
  • Datastructurering: Vaak levert AI OCR direct gestructureerde outputs die eenvoudiger zijn voor nabewerking dan de ruwe tekstoutput van traditionele OCR.

Waarom AI OCR gebruiken voor facturen?

Facturen moeten efficiënt en met hoge nauwkeurigheid verwerkt worden, of het nu gaat om de boekhouding, logistiek of inkoopafdeling. AI OCR automatiseert gegevens­extractie en stroomlijnt workflows, waardoor de datanauwkeurigheid verbetert.

Voordelen van AI OCR voor facturen

  • Snelheid en efficiëntie: Met AI OCR kan een groot aantal facturen in minimale tijd worden verwerkt, waardoor middelen en mankracht vrijkomen.
  • Verbeterde nauwkeurigheid: AI-modellen, getraind op een grote verscheidenheid aan documentformaten, verminderen fouten die gepaard gaan met handmatige gegevensinvoer.
  • Soepeler datamanagement: Doordat de data al gestructureerd is, kan het eenvoudig worden geïntegreerd in databases, analysetools en zelfs ERP-systemen.
  • Schaalbaarheid: AI OCR kan grote hoeveelheden documenten verwerken zonder dat er meer personeel nodig is, ideaal voor grote organisaties of bedrijven die snel groeien.

Het rendement van FlowHunt’s AI OCR-tool

De meeste conventionele bedrijven halen gegevens uit facturen handmatig door medewerkers hiervoor in te zetten. Dit is een zeer tijdrovende en kostbare operatie die in veel verschillende sectoren en bedrijven geautomatiseerd kan worden, zoals belasting-, juridische en financiële bedrijven, en meer.

Dit proces duurt 5 tot 15 seconden en kost 0,01 – 0,02 credits, terwijl je normaal $15 – $30 per uur zou moeten betalen voor een medewerker om dezelfde taak uit te voeren.

OCR Cost Comparison
ProcessorKosten per jaarFacturen per jaar verwerktKosten per factuur
Menselijk$30.00012.000$2,50
FlowHunt$16212.000$0,013
FlowHunt (bij $30.000)$30.0002.250.000$0,0133

Ik zou zeggen dat FlowHunt veel efficiënter is, met een enorme marge.

Uitdagingen bij het implementeren van OCR

Hoewel OCR veel voordelen biedt, zijn er ook enkele uitdagingen:

  1. Beeldkwaliteit: De nauwkeurigheid van OCR hangt sterk af van de beeldkwaliteit. Wazige of lage resolutie afbeeldingen leveren slechte resultaten op.
  2. Complexe opmaak: Documenten met complexe lay-outs, gemengde lettertypes of tabellen vereisen geavanceerdere OCR-verwerking.
  3. Taal en tekenset: OCR-software heeft mogelijk beperkte taalondersteuning, waardoor gespecialiseerde modellen nodig zijn voor niet-Latijnse tekens.
  4. Foutmarge: Geen enkele OCR-software is 100% nauwkeurig, vooral bij handschrift of onregelmatige lettertypes, wat fouten in de uitvoer kan veroorzaken.

Om deze uitdagingen aan te pakken, is het essentieel om een krachtige en flexibele OCR-tool te gebruiken. FlowHunt’s API biedt een robuuste OCR-oplossing die complexe documentstructuren aankan, en is daardoor ideaal voor grootschalige OCR-projecten.

Het Python OCR-script instellen

Om het proces te automatiseren, dien je de volgende Python-bibliotheken te installeren:

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

Dit installeert:

  • requests: Voor het versturen van HTTP-verzoeken naar FlowHunt’s API en het downloaden van OCR-resultaten.
  • pdf2image: Voor het converteren van PDF-pagina’s naar afbeeldingen.
  • flowhunt: FlowHunt’s Python SDK, die de interactie met de OCR API vereenvoudigt.

Stap-voor-stap Uitleg van de Code

Deze code neemt een PDF, converteert deze naar afbeeldingen, stuurt elke afbeelding naar FlowHunt voor OCR-verwerking en slaat het resultaat op in CSV-formaat.

Bibliotheken importeren

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, en time helpen bij JSON-verwerking, bestandsbeheer, reguliere expressies en tijdsintervallen.
  • requests: Wordt gebruikt voor HTTP-verzoeken, zoals het downloaden van de OCR-resultaten.
  • flowhunt: FlowHunt’s SDK regelt de authenticatie en communicatie met de OCR API.
  • pdf2image: Converteert PDF-pagina’s naar afbeeldingen, zodat elke pagina apart kan worden verwerkt.

Functie om PDF-pagina’s naar afbeeldingen te converteren

def convert_pdf_to_image(path: str) -> None:
    """
    Converteer een PDF-bestand naar afbeeldingen, waarbij elke pagina als JPEG wordt opgeslagen.
    """
    images = convert_from_path(path)
    for i in range(len(images)):
        images[i].save('data/images/' + 'page' + str(i) + '.jpg', 'JPEG')
  • convert_from_path: Converteert elke PDF-pagina naar een afbeelding.
  • images[i].save: Slaat elke pagina op als een aparte JPEG voor OCR-verwerking.

De output attachment-URL extraheren

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
  • De functie haalt de URL op waarmee het OCR-resultaat kan worden gedownload.
  • Gebruikt regex om het JSON-object met de downloadlink te vinden.

API-configuratie en authenticatie

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>"}
)
  • Converteert de PDF naar afbeeldingen.
  • Stelt API-toegang in met FlowHunt-gegevens.

De API-client initialiseren

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
  • Authenticeert en haalt de workspace_id op voor volgende API-aanvragen.

Een Flow-sessie starten

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)
  • Zet een sessie op voor het uploaden van afbeeldingen en de OCR-verwerking.

Afbeeldingen uploaden voor OCR-verwerking

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()
            )
  • Uploadt elke afbeelding in de sessie voor OCR-verwerking.

OCR-verwerking starten en peilen naar resultaat

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)
  • Start het OCR-proces en controleert elke 3 seconden of het voltooid is.

OCR-uitvoer downloaden en opslaan

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)
  • Downloadt het CSV-resultaat en slaat het lokaal op.

Het script uitvoeren en resultaat testen

Om dit script uit te voeren:

  1. Plaats je PDF in de map data/.
  2. Vul <FLOW_ID_HERE> en <API_KEY_HERE> in met je FlowHunt-gegevens.
  3. Voer het script uit om de PDF te converteren, afbeeldingen te uploaden voor OCR en de gestructureerde CSV-resultaten te downloaden.

Conclusie

Dit Python-script biedt een efficiënte oplossing voor het opschalen van OCR-processen, ideaal voor sectoren met een hoge documentverwerkingsbehoefte. Met de FlowHunt API verwerkt deze oplossing document-naar-CSV-conversie, stroomlijnt workflows en verhoogt de productiviteit.

Volledig Code-overzicht

Klik HIER voor de Gist-versie.

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)

Veelgestelde vragen

Wat is AI-gebaseerde OCR en hoe verschilt het van traditionele OCR?

AI-gebaseerde OCR maakt gebruik van machine learning en NLP om documentcontext te begrijpen, complexe lay-outs te verwerken en gestructureerde data uit facturen te halen, in tegenstelling tot traditionele OCR die afhankelijk is van tekstherkenning in vaste formaten.

Wat zijn de belangrijkste voordelen van AI OCR voor facturen?

AI OCR biedt snelheid, nauwkeurigheid, schaalbaarheid en gestructureerde output, waardoor handmatig werk wordt verminderd, fouten worden geminimaliseerd en naadloze integratie met bedrijfsxadsystemen mogelijk is.

Hoe kan ik OCR-automatisering voor facturen implementeren met Python en FlowHunt?

Door gebruik te maken van FlowHunt’s Python SDK kun je PDF’s omzetten naar afbeeldingen, deze naar FlowHunt’s API sturen voor OCR en gestructureerde data ophalen in CSV-formaat, waarmee het hele extractieproces wordt geautomatiseerd.

Welke uitdagingen zijn er bij OCR-verwerking en hoe pakt FlowHunt deze aan?

Veelvoorkomende uitdagingen zijn slechte beeldkwaliteit, complexe documentlay-outs en verschillende talen. FlowHunt’s API is ontworpen om deze aan te pakken met geavanceerde AI-modellen en flexibele verwerkingsmogelijkheden.

Wat is het rendement (ROI) van het automatiseren van factuurgegevens-extractie met FlowHunt?

FlowHunt’s AI OCR kan facturen in enkele seconden verwerken tegen een fractie van de menselijke kosten, wat enorme efficiëntiewinst en schaalbaarheid oplevert voor groeiende bedrijven.

Arshia is een AI Workflow Engineer bij FlowHunt. Met een achtergrond in computerwetenschappen en een passie voor AI, specialiseert zij zich in het creëren van efficiënte workflows die AI-tools integreren in dagelijkse taken, waardoor productiviteit en creativiteit worden verhoogd.

Arshia Kahani
Arshia Kahani
AI Workflow Engineer

Probeer FlowHunt's AI Factuur OCR Tool

Automatiseer factuurgegevens-extractie met FlowHunt’s krachtige AI OCR. Bespaar tijd, verminder fouten en stroomlijn je workflows door PDF's om te zetten naar gestructureerde data in enkele seconden.

Meer informatie