Documentation
How to extract information from bank statement using SoceTonAI Script OCRΒΆ
In this guide, Iβll show how to use SoceTonAI Script OCR to automatically extract key information from a bank statements. We begin by collecting the API credentials from soceton.com, then create a YAML script that instructs the OCR engine to read the information we need (YAML is provided at the end of this document). Finally, we send a read request to api.soceton.com to retrieve the structured output.
YAML that I am using for this requestΒΆ
document_type: BankStatement
description: "Extract key information from National ID card using OCR"
development: true
model: model1
return_ocr_output: false
return_full_text: false
fields:
- name: full_name
label: "Name"
find:
type: text
keywords:
- keyword: "Name"
index: 0
position_of_value: [0.5, -0.5, 4.5, 20]
words: 5
debug: false
returns:
- keywords
- words
- position
- name: address
label: "Address"
find:
type: text
keywords:
- keyword: "Address"
index: 0
position_of_value: [0.5, -0.5, 7.5, 50]
words: 10
debug: false
returns:
- keywords
- words
- position
- name: account_no
label: "Account Number"
find:
type: text
keywords:
- keyword: "Account"
index: 2
next_keyword_position: [ 0.5, -0.5, 2, 10 ]
- keyword: "Number"
position_of_value: [0.5, -0.5, 7.2, 20]
words: 10
debug: false
returns:
- keywords
- words
- position
- name: account_type
label: "Account Type"
find:
type: text
keywords:
- keyword: "Account"
index: 3
next_keyword_position: [ 0.5, -0.5, 2, 10 ]
- keyword: "Type"
position_of_value: [0.5, -0.5, 7, 30]
words: 10
debug: false
returns:
- keywords
- words
- position
- name: statement_period
label: "Statement Period"
find:
type: text
keywords:
- keyword: "Statement"
index: 2
next_keyword_position: [ 0.5, -0.5, 5.5, 15 ]
- keyword: "Period"
position_of_value: [0.5, -0.5, 9.5, 30]
words: 10
debug: false
returns:
- keywords
- words
- position
- name: statement_date
label: "Statement Date"
find:
type: text
keywords:
- keyword: "Statement"
index: 3
next_keyword_position: [ 0.5, -0.5, 5.5, 15 ]
- keyword: "Date"
position_of_value: [0.5, -0.5, 9.5, 30]
words: 10
debug: false
returns:
- keywords
- words
- position
- name: transactions
label: "Transactions Table"
find:
type: table
row_orientation: horizontal
y_tolerance: 0.02
debug: false
headers:
- header:
- keyword: "Date"
- header:
- keyword: "Description"
- header:
- keyword: "Amount"
- header:
- keyword: "Balance"
returns:
- headers
- column_words
- name: summary
label: "Summary Table"
find:
type: table
row_orientation: vertical
y_tolerance: 0.02
debug: true
headers:
- header:
- keyword: "Beginning"
- keyword: "Balance"
- header:
- keyword: "Total"
- keyword: "Deposits"
- header:
- keyword: "Total"
- keyword: "Withdrawals"
- header:
- keyword: "Ending"
- keyword: "Balance"
returns:
- headers
- column_words
The imageΒΆ
InΒ [1]:
import json
from PIL import Image
img = Image.open("dummies/images/bank-statement-1_0.jpg")
img = img.convert("RGB")
img
Out[1]:
Sending the requestΒΆ
InΒ [2]:
import requests
from config import SOCETONAI_API_SECRET, SOCETONAI_API_KEY
def generate_result(url, image_path, rules_path, headers):
data = {}
files = {
"doc": open(image_path, "rb"),
"rules": open(rules_path, "r", encoding="utf-8")
}
response = requests.post(url, data=data, headers=headers, files=files)
return response
result = generate_result(
"https://api.soceton.com/script-ocr/read",
"dummies/images/bank-statement-1_0.jpg",
"dummies/ymls/bank-statements-1.yml", {
"X-API-KEY": SOCETONAI_API_KEY,
"X-API-SECRET": SOCETONAI_API_SECRET
})
result = result.json()
values = {}
for k in result["result"].keys():
values[k] = result["result"][k]["value"]
print(json.dumps(values, indent=4))
{
"full_name": "John Doe",
"address": "221 Demo Road , Sampletown , ST 12345",
"account_no": "123456789",
"account_type": ": Checking Account",
"statement_period": "Jan 1 , 2025 - Jan 31 , 2025",
"statement_date": "Feb 1 , 2025",
"transactions": [
[
"Jan 02",
"Jan 05",
"Jan 10",
"Jan 14",
"Jan 20",
"Jan 25",
"Jan 30"
],
[
"Deposit - Payroll",
"Grocery Store",
"Utility Bill Payment",
"ATM Withdrawal",
"Online Subscription",
"Restaurant",
"Phone Bill"
],
[
"+ $ 1,200.00",
"- $ 120.45",
"- $ 85.60",
"- $ 200.00",
"- $ 19.99",
"- $ 60.00",
"- $ 75.00"
],
[
"$ 3,700.00",
"$ 3,579.55",
"$ 3,493.95",
"$ 3,293.95",
"$ 3,273.96",
"$ 3,213.96",
"$ 3,138.96"
]
],
"summary": [
[
"$ 2,500.00"
],
[
"$ 1,200.00"
],
[
"$ 950.00"
],
[
"$ 2,750.00"
]
]
}
Printing the valuesΒΆ
Annotating the result on the image (Optional)ΒΆ
Keywords are in green, value positions are in blue, and value words are in red.
InΒ [3]:
import random
import numpy as np
import cv2
w, h = img.size
img_copy = np.asarray(img).copy()
def annotate_value(key):
try:
thickness = 2
color = (0, 0, 255)
position = result["result"][key]["position"]
top, left, bottom, right = int(position["top"] * h), int(position["left"] * w), int(position["bottom"] * h), int(position["right"] * w)
cv2.rectangle(img_copy, (left, top), (right, bottom), color, thickness)
except KeyError:
pass
try:
thickness = 2
color = (0, 255, 0)
for keyword in result["result"][key]["keywords"]:
y1, x1, y2, x2 = int(keyword["y1"] * h), int(keyword["x1"] * w), int(keyword["y2"] * h), int(keyword["x2"] * w)
cv2.rectangle(img_copy, (x1, y1), (x2, y2), color, thickness)
except KeyError:
pass
try:
thickness = 2
color = (255, 0, 0)
for word in result["result"][key]["words"]:
y1, x1, y2, x2 = int(word["y1"] * h), int(word["x1"] * w), int(word["y2"] * h), int(word["x2"] * w)
cv2.rectangle(img_copy, (x1, y1), (x2, y2), color, thickness)
except KeyError:
pass
try:
thickness = 2
color = (0, 0, random.choice([50, 100, 150, 200, 250]))
for word in result["result"][key]["headers"]:
y1, x1, y2, x2 = int(word["y1"] * h), int(word["x1"] * w), int(word["y2"] * h), int(word["x2"] * w)
cv2.rectangle(img_copy, (x1, y1), (x2, y2), color, thickness)
thickness = 2
for words in result["result"][key]["column_words"]:
for word in words:
y1, x1, y2, x2 = int(word["y1"] * h), int(word["x1"] * w), int(word["y2"] * h), int(word["x2"] * w)
cv2.rectangle(img_copy, (x1, y1), (x2, y2), color, thickness)
except KeyError:
pass
for k in result["result"].keys():
annotate_value(k)
Image.fromarray(img_copy)
Out[3]:
Let's see the resultΒΆ
InΒ [4]:
print(json.dumps(result, indent=4))
{
"success": true,
"result": {
"full_name": {
"value": "John Doe",
"keywords": [
{
"page_idx": 0,
"block_idx": 7,
"line_idx": 0,
"word_idx": 0,
"value": "Name",
"confidence": 0.9909878373146056,
"x1": 0.0459770114942528,
"y1": 0.274903805044891,
"x2": 0.0913490623109497,
"y2": 0.2843095339888841
}
],
"words": [
{
"page_idx": 0,
"block_idx": 7,
"line_idx": 0,
"word_idx": 2,
"value": "John",
"confidence": 0.9917616844177246,
"x1": 0.0986085904416212,
"y1": 0.274903805044891,
"x2": 0.131881427707199,
"y2": 0.2843095339888841
},
{
"page_idx": 0,
"block_idx": 7,
"line_idx": 0,
"word_idx": 3,
"value": "Doe",
"confidence": 0.9842268228530884,
"x1": 0.1373260738052026,
"y1": 0.274903805044891,
"x2": 0.1675741076830006,
"y2": 0.2843095339888841
}
],
"position": {
"top": 0.27020094057289445,
"left": 0.09702056866303682,
"bottom": 0.28901239846088067,
"right": 0.3182093163944342
}
},
"address": {
"value": "221 Demo Road , Sampletown , ST 12345",
"keywords": [
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 0,
"word_idx": 0,
"value": "Address",
"confidence": 0.9920641183853148,
"x1": 0.0447670901391409,
"y1": 0.2898674647285164,
"x2": 0.1070780399274047,
"y2": 0.3001282599401453
}
],
"words": [
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 0,
"word_idx": 2,
"value": "221",
"confidence": 0.9906178712844848,
"x1": 0.1149425287356321,
"y1": 0.2898674647285164,
"x2": 0.1403508771929824,
"y2": 0.3001282599401453
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 0,
"word_idx": 3,
"value": "Demo",
"confidence": 0.9926589727401732,
"x1": 0.147005444646098,
"y1": 0.2898674647285164,
"x2": 0.1899576527525711,
"y2": 0.3001282599401453
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 0,
"word_idx": 4,
"value": "Road",
"confidence": 0.9621464014053344,
"x1": 0.1947973381730187,
"y1": 0.2898674647285164,
"x2": 0.2304900181488203,
"y2": 0.3001282599401453
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 0,
"word_idx": 5,
"value": ",",
"confidence": 0.9633743166923524,
"x1": 0.2310949788263762,
"y1": 0.2898674647285164,
"x2": 0.234724742891712,
"y2": 0.3001282599401453
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 0,
"word_idx": 6,
"value": "Sampletown",
"confidence": 0.9883605241775512,
"x1": 0.2395644283121597,
"y1": 0.2898674647285164,
"x2": 0.3290986085904416,
"y2": 0.3001282599401453
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 0,
"word_idx": 7,
"value": ",",
"confidence": 0.9689765572547911,
"x1": 0.3303085299455535,
"y1": 0.2898674647285164,
"x2": 0.3339382940108893,
"y2": 0.3001282599401453
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 0,
"word_idx": 8,
"value": "ST",
"confidence": 0.9361804127693176,
"x1": 0.338777979431337,
"y1": 0.2898674647285164,
"x2": 0.3551119177253478,
"y2": 0.3001282599401453
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 0,
"word_idx": 9,
"value": "12345",
"confidence": 0.9883021116256714,
"x1": 0.3605565638233515,
"y1": 0.2898674647285164,
"x2": 0.4041137326073805,
"y2": 0.3001282599401453
}
],
"position": {
"top": 0.2847370671227019,
"left": 0.11152882205513782,
"bottom": 0.30525865754595977,
"right": 0.5521562527007176
}
},
"account_no": {
"value": "123456789",
"keywords": [
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 1,
"word_idx": 0,
"value": "Account",
"confidence": 0.95160573720932,
"x1": 0.0447670901391409,
"y1": 0.3052586575459598,
"x2": 0.1766485178463399,
"y2": 0.3133817870884993
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 1,
"word_idx": 1,
"value": "Number",
"confidence": 0.9855195879936218,
"x1": 0.0447670901391409,
"y1": 0.3052586575459598,
"x2": 0.1766485178463399,
"y2": 0.3133817870884993
}
],
"words": [
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 1,
"word_idx": 3,
"value": "123456789",
"confidence": 0.9879831671714784,
"x1": 0.1857229280096793,
"y1": 0.3052586575459598,
"x2": 0.2637628554143981,
"y2": 0.3133817870884993
}
],
"position": {
"top": 0.3011970927746901,
"left": 0.18041655863797415,
"bottom": 0.317443351859769,
"right": 0.5534525970097657
}
},
"account_type": {
"value": ": Checking Account",
"keywords": [
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 2,
"word_idx": 0,
"value": "Account",
"confidence": 0.979244351387024,
"x1": 0.0441621294615849,
"y1": 0.3202223172295853,
"x2": 0.1488203266787658,
"y2": 0.3304831124412142
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 2,
"word_idx": 1,
"value": "Type",
"confidence": 0.9871833324432372,
"x1": 0.0441621294615849,
"y1": 0.3202223172295853,
"x2": 0.1488203266787658,
"y2": 0.3304831124412142
}
],
"words": [
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 2,
"word_idx": 2,
"value": ":",
"confidence": 0.9808991551399232,
"x1": 0.1494252873563218,
"y1": 0.3202223172295853,
"x2": 0.1542649727767695,
"y2": 0.3304831124412142
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 2,
"word_idx": 3,
"value": "Checking",
"confidence": 0.9847918748855592,
"x1": 0.1578947368421052,
"y1": 0.3202223172295853,
"x2": 0.2238354506957048,
"y2": 0.3304831124412142
},
{
"page_idx": 0,
"block_idx": 8,
"line_idx": 2,
"word_idx": 4,
"value": "Account",
"confidence": 0.9778603315353394,
"x1": 0.2274652147610405,
"y1": 0.3202223172295853,
"x2": 0.2891712038717483,
"y2": 0.3304831124412142
}
],
"position": {
"top": 0.3150919196237708,
"left": 0.1488203266787658,
"bottom": 0.33561351004702866,
"right": 0.5973554576095411
}
},
"statement_period": {
"value": "Jan 1 , 2025 - Jan 31 , 2025",
"keywords": [
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 0,
"value": "Statement",
"confidence": 0.9850192666053772,
"x1": 0.0447670901391409,
"y1": 0.1902522445489525,
"x2": 0.1796733212341197,
"y2": 0.2005130397605814
},
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 1,
"value": "Period",
"confidence": 0.9779066443443298,
"x1": 0.0447670901391409,
"y1": 0.1902522445489525,
"x2": 0.1796733212341197,
"y2": 0.2005130397605814
}
],
"words": [
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 3,
"value": "Jan",
"confidence": 0.9878277778625488,
"x1": 0.1881427707199032,
"y1": 0.1902522445489525,
"x2": 0.2105263157894736,
"y2": 0.2005130397605814
},
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 4,
"value": "1",
"confidence": 0.977897882461548,
"x1": 0.2165759225650332,
"y1": 0.1902522445489525,
"x2": 0.2220205686630369,
"y2": 0.2005130397605814
},
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 5,
"value": ",",
"confidence": 0.9658589363098145,
"x1": 0.2244404113732607,
"y1": 0.1902522445489525,
"x2": 0.2286751361161524,
"y2": 0.2005130397605814
},
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 6,
"value": "2025",
"confidence": 0.986684799194336,
"x1": 0.2329098608590441,
"y1": 0.1902522445489525,
"x2": 0.2679975801572897,
"y2": 0.2005130397605814
},
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 7,
"value": "-",
"confidence": 0.8954929709434509,
"x1": 0.2728372655777374,
"y1": 0.1902522445489525,
"x2": 0.278886872353297,
"y2": 0.2005130397605814
},
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 8,
"value": "Jan",
"confidence": 0.9696277976036072,
"x1": 0.279491833030853,
"y1": 0.1902522445489525,
"x2": 0.3024803387779794,
"y2": 0.2005130397605814
},
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 9,
"value": "31",
"confidence": 0.9766777157783508,
"x1": 0.3079249848759831,
"y1": 0.1902522445489525,
"x2": 0.323049001814882,
"y2": 0.2005130397605814
},
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 10,
"value": ",",
"confidence": 0.9655014276504515,
"x1": 0.3254688445251059,
"y1": 0.1902522445489525,
"x2": 0.3303085299455535,
"y2": 0.2005130397605814
},
{
"page_idx": 0,
"block_idx": 4,
"line_idx": 0,
"word_idx": 11,
"value": "2025",
"confidence": 0.9837534427642822,
"x1": 0.3339382940108893,
"y1": 0.1902522445489525,
"x2": 0.3690260133091349,
"y2": 0.2005130397605814
}
],
"position": {
"top": 0.18512184694313805,
"left": 0.18716811185050738,
"bottom": 0.20564343736639584,
"right": 0.6293607582173824
}
},
"statement_date": {
"value": "Feb 1 , 2025",
"keywords": [
{
"page_idx": 0,
"block_idx": 5,
"line_idx": 0,
"word_idx": 0,
"value": "Statement",
"confidence": 0.990697979927063,
"x1": 0.0447670901391409,
"y1": 0.2163317657118426,
"x2": 0.1669691470054446,
"y2": 0.2248824283882
},
{
"page_idx": 0,
"block_idx": 5,
"line_idx": 0,
"word_idx": 1,
"value": "Date",
"confidence": 0.9839366674423218,
"x1": 0.0447670901391409,
"y1": 0.2163317657118426,
"x2": 0.1669691470054446,
"y2": 0.2248824283882
}
],
"words": [
{
"page_idx": 0,
"block_idx": 5,
"line_idx": 0,
"word_idx": 3,
"value": "Feb",
"confidence": 0.99306321144104,
"x1": 0.1772534785238959,
"y1": 0.2163317657118426,
"x2": 0.2020568663036902,
"y2": 0.2248824283882
},
{
"page_idx": 0,
"block_idx": 5,
"line_idx": 0,
"word_idx": 4,
"value": "1",
"confidence": 0.9854211807250975,
"x1": 0.2075015124016939,
"y1": 0.2163317657118426,
"x2": 0.2123411978221415,
"y2": 0.2248824283882
},
{
"page_idx": 0,
"block_idx": 5,
"line_idx": 0,
"word_idx": 5,
"value": ",",
"confidence": 0.9835394620895386,
"x1": 0.2153660012099213,
"y1": 0.2163317657118426,
"x2": 0.2189957652752571,
"y2": 0.2248824283882
},
{
"page_idx": 0,
"block_idx": 5,
"line_idx": 0,
"word_idx": 6,
"value": "2025",
"confidence": 0.9870045185089112,
"x1": 0.2238354506957048,
"y1": 0.2163317657118426,
"x2": 0.2589231699939504,
"y2": 0.2248824283882
}
],
"position": {
"top": 0.2120564343736639,
"left": 0.17375815016468368,
"bottom": 0.2291577597263787,
"right": 0.5743093365597902
}
},
"transactions": {
"columns": [
"Date",
"Description",
"Amount",
"Balance"
],
"value": [
[
"Jan 02",
"Jan 05",
"Jan 10",
"Jan 14",
"Jan 20",
"Jan 25",
"Jan 30"
],
[
"Deposit - Payroll",
"Grocery Store",
"Utility Bill Payment",
"ATM Withdrawal",
"Online Subscription",
"Restaurant",
"Phone Bill"
],
[
"+ $ 1,200.00",
"- $ 120.45",
"- $ 85.60",
"- $ 200.00",
"- $ 19.99",
"- $ 60.00",
"- $ 75.00"
],
[
"$ 3,700.00",
"$ 3,579.55",
"$ 3,493.95",
"$ 3,293.95",
"$ 3,273.96",
"$ 3,213.96",
"$ 3,138.96"
]
],
"headers": [
{
"page_idx": 0,
"block_idx": 21,
"line_idx": 0,
"word_idx": 0,
"value": "Date",
"confidence": 0.9853469729423524,
"x1": 0.0550514216575922,
"y1": 0.5643437366395896,
"x2": 0.0901391409558378,
"y2": 0.5724668661821292
},
{
"page_idx": 0,
"block_idx": 22,
"line_idx": 0,
"word_idx": 0,
"value": "Description",
"confidence": 0.9836230874061584,
"x1": 0.191167574107683,
"y1": 0.5639162035057717,
"x2": 0.278886872353297,
"y2": 0.5737494655835828
},
{
"page_idx": 0,
"block_idx": 23,
"line_idx": 0,
"word_idx": 0,
"value": "Amount",
"confidence": 0.9786460995674132,
"x1": 0.5493042952208107,
"y1": 0.5639162035057717,
"x2": 0.6128251663641864,
"y2": 0.5720393330483112
},
{
"page_idx": 0,
"block_idx": 24,
"line_idx": 0,
"word_idx": 0,
"value": "Balance",
"confidence": 0.9913010001182556,
"x1": 0.7658802177858439,
"y1": 0.5639162035057717,
"x2": 0.8257713248638838,
"y2": 0.5716117999144934
}
],
"column_words": [
[
{
"page_idx": 0,
"block_idx": 25,
"line_idx": 0,
"word_idx": 0,
"value": "Jan 02",
"confidence": 0.9908632636070251,
"x1": 0.0514216575922565,
"y1": 0.5899957246686618,
"x2": 0.0973986690865093,
"y2": 0.6002565198802907
},
{
"page_idx": 0,
"block_idx": 29,
"line_idx": 0,
"word_idx": 0,
"value": "Jan 05",
"confidence": 0.9901143312454224,
"x1": 0.0508166969147005,
"y1": 0.6156477126977341,
"x2": 0.0967937084089534,
"y2": 0.6276186404446344
},
{
"page_idx": 0,
"block_idx": 33,
"line_idx": 0,
"word_idx": 0,
"value": "Jan 10",
"confidence": 0.9890975952148438,
"x1": 0.0514216575922565,
"y1": 0.6430098332620778,
"x2": 0.0980036297640653,
"y2": 0.6536981616075246
},
{
"page_idx": 0,
"block_idx": 37,
"line_idx": 0,
"word_idx": 0,
"value": "Jan 14",
"confidence": 0.988424450159073,
"x1": 0.0508166969147005,
"y1": 0.66866182129115,
"x2": 0.0973986690865093,
"y2": 0.6802052159042326
},
{
"page_idx": 0,
"block_idx": 41,
"line_idx": 0,
"word_idx": 0,
"value": "Jan 20",
"confidence": 0.9896500706672668,
"x1": 0.0508166969147005,
"y1": 0.6955964087216759,
"x2": 0.0980036297640653,
"y2": 0.7071398033347585
},
{
"page_idx": 0,
"block_idx": 45,
"line_idx": 0,
"word_idx": 0,
"value": "Jan 25",
"confidence": 0.9522523283958435,
"x1": 0.0514216575922565,
"y1": 0.7225309961522018,
"x2": 0.0973986690865093,
"y2": 0.7332193244976486
},
{
"page_idx": 0,
"block_idx": 49,
"line_idx": 0,
"word_idx": 0,
"value": "Jan 30",
"confidence": 0.9862283170223236,
"x1": 0.0508166969147005,
"y1": 0.7494655835827276,
"x2": 0.0980036297640653,
"y2": 0.7605814450619923
}
],
[
{
"page_idx": 0,
"block_idx": 26,
"line_idx": 0,
"word_idx": 0,
"value": "Deposit - Payroll",
"confidence": 0.9477608601252238,
"x1": 0.191167574107683,
"y1": 0.5908507909362976,
"x2": 0.3091349062310949,
"y2": 0.6006840530141085
},
{
"page_idx": 0,
"block_idx": 30,
"line_idx": 0,
"word_idx": 0,
"value": "Grocery Store",
"confidence": 0.96384397149086,
"x1": 0.190562613430127,
"y1": 0.6165027789653699,
"x2": 0.2903811252268602,
"y2": 0.6280461735784524
},
{
"page_idx": 0,
"block_idx": 34,
"line_idx": 0,
"word_idx": 0,
"value": "Utility Bill Payment",
"confidence": 0.9809253414471945,
"x1": 0.191167574107683,
"y1": 0.6425823001282599,
"x2": 0.3284936479128856,
"y2": 0.6545532278751603
},
{
"page_idx": 0,
"block_idx": 38,
"line_idx": 0,
"word_idx": 0,
"value": "ATM Withdrawal",
"confidence": 0.9885604381561279,
"x1": 0.1899576527525711,
"y1": 0.6695168875587858,
"x2": 0.3097398669086509,
"y2": 0.6784950833689611
},
{
"page_idx": 0,
"block_idx": 42,
"line_idx": 0,
"word_idx": 0,
"value": "Online Subscription",
"confidence": 0.9820176064968109,
"x1": 0.191167574107683,
"y1": 0.695168875587858,
"x2": 0.3333333333333333,
"y2": 0.7071398033347585
},
{
"page_idx": 0,
"block_idx": 46,
"line_idx": 0,
"word_idx": 0,
"value": "Restaurant",
"confidence": 0.993459403514862,
"x1": 0.1917725347852389,
"y1": 0.7242411286874733,
"x2": 0.2704174228675136,
"y2": 0.7315091919623771
},
{
"page_idx": 0,
"block_idx": 50,
"line_idx": 0,
"word_idx": 0,
"value": "Phone Bill",
"confidence": 0.9906934797763824,
"x1": 0.191167574107683,
"y1": 0.7507481829841812,
"x2": 0.2631578947368421,
"y2": 0.758443779392903
}
],
[
{
"page_idx": 0,
"block_idx": 27,
"line_idx": 0,
"word_idx": 0,
"value": "+ $ 1,200.00",
"confidence": 0.9447394609451294,
"x1": 0.5505142165759226,
"y1": 0.589568191534844,
"x2": 0.6279491833030852,
"y2": 0.599401453612655
},
{
"page_idx": 0,
"block_idx": 31,
"line_idx": 0,
"word_idx": 0,
"value": "- $ 120.45",
"confidence": 0.966041107972463,
"x1": 0.5499092558983666,
"y1": 0.6177853783668235,
"x2": 0.6110102843315185,
"y2": 0.6254809747755451
},
{
"page_idx": 0,
"block_idx": 35,
"line_idx": 0,
"word_idx": 0,
"value": "- $ 85.60",
"confidence": 0.96690966685613,
"x1": 0.5493042952208107,
"y1": 0.6430098332620778,
"x2": 0.6019358741681791,
"y2": 0.652415562206071
},
{
"page_idx": 0,
"block_idx": 39,
"line_idx": 0,
"word_idx": 0,
"value": "- $ 200.00",
"confidence": 0.9629251559575399,
"x1": 0.5499092558983666,
"y1": 0.6707994869602394,
"x2": 0.6110102843315185,
"y2": 0.6784950833689611
},
{
"page_idx": 0,
"block_idx": 43,
"line_idx": 0,
"word_idx": 0,
"value": "- $ 19.99",
"confidence": 0.95598437388738,
"x1": 0.5493042952208107,
"y1": 0.6973065412569475,
"x2": 0.6013309134906231,
"y2": 0.7050021376656691
},
{
"page_idx": 0,
"block_idx": 47,
"line_idx": 0,
"word_idx": 0,
"value": "- $ 60.00",
"confidence": 0.9687166015307108,
"x1": 0.5499092558983666,
"y1": 0.7238135955536554,
"x2": 0.6025408348457351,
"y2": 0.731936725096195
},
{
"page_idx": 0,
"block_idx": 51,
"line_idx": 0,
"word_idx": 0,
"value": "- $ 75.00",
"confidence": 0.9721207221349082,
"x1": 0.5499092558983666,
"y1": 0.7507481829841812,
"x2": 0.6019358741681791,
"y2": 0.7588713125267208
}
],
[
{
"page_idx": 0,
"block_idx": 28,
"line_idx": 0,
"word_idx": 0,
"value": "$ 3,700.00",
"confidence": 0.9800870418548584,
"x1": 0.7658802177858439,
"y1": 0.5908507909362976,
"x2": 0.8354506957047791,
"y2": 0.599401453612655
},
{
"page_idx": 0,
"block_idx": 32,
"line_idx": 0,
"word_idx": 0,
"value": "$ 3,579.55",
"confidence": 0.9688910841941833,
"x1": 0.7652752571082879,
"y1": 0.6177853783668235,
"x2": 0.8348457350272233,
"y2": 0.6263360410431809
},
{
"page_idx": 0,
"block_idx": 36,
"line_idx": 0,
"word_idx": 0,
"value": "$ 3,493.95",
"confidence": 0.9685926139354706,
"x1": 0.7652752571082879,
"y1": 0.6434373663958957,
"x2": 0.8342407743496673,
"y2": 0.652415562206071
},
{
"page_idx": 0,
"block_idx": 40,
"line_idx": 0,
"word_idx": 0,
"value": "$ 3,293.95",
"confidence": 0.9672244489192963,
"x1": 0.7652752571082879,
"y1": 0.6707994869602394,
"x2": 0.8348457350272233,
"y2": 0.678922616502779
},
{
"page_idx": 0,
"block_idx": 44,
"line_idx": 0,
"word_idx": 0,
"value": "$ 3,273.96",
"confidence": 0.9737949073314667,
"x1": 0.7652752571082879,
"y1": 0.6973065412569475,
"x2": 0.8342407743496673,
"y2": 0.7058572039333049
},
{
"page_idx": 0,
"block_idx": 48,
"line_idx": 0,
"word_idx": 0,
"value": "$ 3,213.96",
"confidence": 0.9681384563446045,
"x1": 0.7652752571082879,
"y1": 0.7238135955536554,
"x2": 0.8342407743496673,
"y2": 0.7327917913638307
},
{
"page_idx": 0,
"block_idx": 52,
"line_idx": 0,
"word_idx": 0,
"value": "$ 3,138.96",
"confidence": 0.9669766128063202,
"x1": 0.7652752571082879,
"y1": 0.7511757161179992,
"x2": 0.8348457350272233,
"y2": 0.7597263787943566
}
]
]
},
"summary": {
"columns": [
"Beginning Balance",
"Total Deposits",
"Total Withdrawals",
"Ending Balance"
],
"value": [
[
"$ 2,500.00"
],
[
"$ 1,200.00"
],
[
"$ 950.00"
],
[
"$ 2,750.00"
]
],
"headers": [
{
"page_idx": 0,
"block_idx": 11,
"line_idx": 0,
"word_idx": 0,
"value": "Beginning Balance",
"confidence": 0.9827412366867065,
"x1": 0.0550514216575922,
"y1": 0.410431808465156,
"x2": 0.1893526920750151,
"y2": 0.4241128687473279
},
{
"page_idx": 0,
"block_idx": 12,
"line_idx": 0,
"word_idx": 0,
"value": "Total Deposits",
"confidence": 0.9889151453971864,
"x1": 0.0538415003024803,
"y1": 0.4373663958956819,
"x2": 0.1578947368421052,
"y2": 0.4497648567764001
},
{
"page_idx": 0,
"block_idx": 13,
"line_idx": 0,
"word_idx": 0,
"value": "Total Withdrawals",
"confidence": 0.9875452518463134,
"x1": 0.0544464609800363,
"y1": 0.4660111158614792,
"x2": 0.1845130066545674,
"y2": 0.4741342454040188
},
{
"page_idx": 0,
"block_idx": 14,
"line_idx": 0,
"word_idx": 0,
"value": "Ending Balance",
"confidence": 0.9834097325801849,
"x1": 0.0544464609800363,
"y1": 0.4908080376229157,
"x2": 0.1724137931034483,
"y2": 0.5032064985036341
}
],
"column_words": [
[
{
"page_idx": 0,
"block_idx": 17,
"line_idx": 0,
"word_idx": 0,
"value": "$ 2,500.00",
"confidence": 0.9813665747642517,
"x1": 0.6303690260133091,
"y1": 0.4129970072680632,
"x2": 0.6999395039322444,
"y2": 0.4215476699444206
}
],
[
{
"page_idx": 0,
"block_idx": 18,
"line_idx": 0,
"word_idx": 0,
"value": "$ 1,200.00",
"confidence": 0.9824519455432892,
"x1": 0.6303690260133091,
"y1": 0.4395040615647713,
"x2": 0.6999395039322444,
"y2": 0.4480547242411287
}
],
[
{
"page_idx": 0,
"block_idx": 19,
"line_idx": 0,
"word_idx": 0,
"value": "$ 950.00",
"confidence": 0.9811762273311614,
"x1": 0.6303690260133091,
"y1": 0.4664386489952971,
"x2": 0.6866303690260133,
"y2": 0.4741342454040188
}
],
[
{
"page_idx": 0,
"block_idx": 20,
"line_idx": 0,
"word_idx": 0,
"value": "$ 2,750.00",
"confidence": 0.9831894338130951,
"x1": 0.6303690260133091,
"y1": 0.4916631038905515,
"x2": 0.6999395039322444,
"y2": 0.5014963659683626
}
]
]
}
}
}