<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ocr → Unstract.com</title>
	<atom:link href="https://staging.unstract.com/blog/tag/ocr/feed/" rel="self" type="application/rss+xml" />
	<link>https://staging.unstract.com</link>
	<description></description>
	<lastBuildDate>Wed, 25 Mar 2026 13:19:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://staging.unstract.com/wp-content/uploads/2024/03/unstract-u-79x79.png</url>
	<title>ocr → Unstract.com</title>
	<link>https://staging.unstract.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Best OCR Software in 2026 — A Tool Comparison &#038; Evaluation Guide</title>
		<link>https://staging.unstract.com/blog/best-pdf-ocr-software/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=best-pdf-ocr-software</link>
		
		<dc:creator><![CDATA[Nuno Bispo]]></dc:creator>
		<pubDate>Wed, 05 Mar 2025 06:57:16 +0000</pubDate>
				<category><![CDATA[Product]]></category>
		<category><![CDATA[document data extraction]]></category>
		<category><![CDATA[ocr]]></category>
		<category><![CDATA[OCR PDF]]></category>
		<category><![CDATA[optical character recognition]]></category>
		<guid isPermaLink="false">https://staging.unstract.com/?p=12250</guid>

					<description><![CDATA[<img src="https://staging.unstract.com/wp-content/uploads/2025/03/best-ocr-tool-2025-1.png" style="display: block; margin: 1em auto"><p>This article evaluates the best OCR software for 2025, focusing on their features, capabilities, and performance to aid your decision-making. We'll test five leading solutions— LLMWhisperer, Tesseract, Paddle OCR, Azure Document Intelligence, Amazon Textract</p>
<p>The post <a href="https://staging.unstract.com/blog/best-pdf-ocr-software/">Best OCR Software in 2026 — A Tool Comparison & Evaluation Guide</a> first appeared on <a href="https://staging.unstract.com">Unstract.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<img src="https://staging.unstract.com/wp-content/uploads/2025/03/best-ocr-tool-2025-1.png" style="display: block; margin: 1em auto"><p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">Optical Character Recognition (OCR) technology has become indispensable in today&#8217;s digital landscape.</p>



<p class="wp-block-paragraph">By converting various document types—such as scanned papers, PDF files, and images—into editable and searchable text, OCR software significantly enhances productivity and efficiency.</p>



<p class="wp-block-paragraph">This is particularly crucial in industries that handle large volumes of documents, including finance, healthcare, legal, and education.</p>



<p class="wp-block-paragraph">The effectiveness of OCR software can greatly impact workflows, data accuracy, and overall operational efficiency. As businesses increasingly rely on digital transformation, selecting the right OCR tool is more important than ever.</p>



<p class="wp-block-paragraph">This article aims to provide a comprehensive overview of the best OCR software available in 2026. We will compare their features, capabilities, and performance to help you make an informed decision.&nbsp;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>This article provides a comprehensive overview of the top OCR tools in 2026. We will compare: <br></strong><br>1. Tesseract,<br>2. Paddle OCR,<br>3. Azure Document Intelligence<br>4. Amazon Textract<br>5. LLMWhisperer.<br><br><strong>We will test each of the tools on two sample documents. We will evaluate and asses each of these tools based on: <br></strong><br>1. Accuracy<br>2. Multi-language support<br>3. Complex layout handling<br>4. Structured data extraction<br>5. Deployment flexilbity <br>6. Ease of use<br>7. Cost<br>8. Custom training<br>9. Integration<br>10. Security and compliance.<br><br><a href="#JumpSeperator" title="Click here to directly go to the tool evaluation section.">Click here to jump directly to the tool evaluation section.</a></p>
</blockquote>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Understanding OCR Software</h2>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">What is OCR Software?</h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">OCR software is a powerful tool designed to interpret and convert different types of documents—such as scanned papers, PDF files, and images—into machine-readable text.</p>



<p class="wp-block-paragraph">This technology is widely used in various applications, including data entry, archiving, document management, and digital transformation initiatives.</p>



<p class="wp-block-paragraph">By converting physical or static digital documents into editable and searchable text, OCR software enables businesses to streamline workflows, improve data accessibility, and enhance overall operational efficiency.</p>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">How Does OCR Software Work?</h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">OCR software works by analyzing the shapes and patterns of characters in document images and converting them into corresponding text characters.&nbsp;</p>



<p class="wp-block-paragraph">The process typically involves several steps:</p>



<p class="wp-block-paragraph"><strong>Image Pre-processing:</strong></p>



<ul class="wp-block-list">
<li><strong>Enhancement:</strong> Improving the quality of the document image by adjusting brightness, contrast, and resolution.</li>



<li><strong>Noise Reduction:</strong> Removing any unwanted artifacts or distortions that could interfere with text recognition.</li>



<li><strong>Binarization:</strong> Converting the image to a binary format (black and white) to simplify the recognition process.</li>
</ul>



<p class="wp-block-paragraph"><strong>Character Recognition:</strong></p>



<ul class="wp-block-list">
<li><strong>Segmentation:</strong> Identifying and separating individual characters, words, and lines of text within the image.</li>



<li><strong>Pattern Matching:</strong> Comparing the shapes of characters in the image with a predefined set of character templates to determine the corresponding text.</li>



<li><strong>Machine Learning:</strong> Utilizing advanced algorithms and neural networks to improve recognition accuracy, especially for complex or handwritten text.</li>
</ul>



<p class="wp-block-paragraph"><strong>Post-processing:</strong></p>



<ul class="wp-block-list">
<li><strong>Error Correction:</strong> Identifying and correcting any errors in the recognized text, such as misspelled words or incorrect characters.</li>



<li><strong>Formatting:</strong> Applying appropriate formatting to the text, including paragraphs, headings, and tables, to maintain the original document structure.</li>



<li><strong>Validation:</strong> Verifying the accuracy of the recognized text through various checks, such as dictionary lookups and context analysis.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong><a href="https://pg.llmwhisperer.unstract.com/" target="_blank" rel="noopener" title="LLMWhisperer">LLMWhisperer</a></strong>: The Best OCR for LLMs<br><br><strong>If your solution involves using Large Language Models(LLMs) to process and extract document data:<br></strong><br>LLMs are powerful, but their output is as good as the input you provide. Documents can be a mess: widely varying formats and encodings, scans of images, numbered sections, and complex tables.<br><br><a href="https://staging.unstract.com/llmwhisperer/" title="LLMWhisperer">LLMWhisperer</a> is a technology that presents data from complex documents to LLMs in a way they’re able to best understand it.</p>



<p class="wp-block-paragraph">If you want to quickly take it for test drive, you can <a href="https://pg.llmwhisperer.unstract.com/" target="_blank" rel="noopener" title=" checkout our free playground."> checkout our free playground.</a></p>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 1292 / 720;" width="1292" controls loop src="https://staging.unstract.com/wp-content/uploads/2024/09/LLMWhisperer-OCR-tool-for-document-extraction-1.mp4"></video></figure>



<p class="wp-block-paragraph"></p>
</blockquote>



<h3 class="wp-block-heading">Key Features to Look for in OCR Software</h3>



<p class="wp-block-paragraph">When selecting OCR software, it’s important to consider the following features to ensure it meets your specific needs:</p>



<ul class="wp-block-list">
<li><strong>Accuracy:</strong> The ability to correctly recognize and convert text, even in challenging conditions such as low-quality images, handwritten text, or complex layouts.</li>



<li><strong>Language Support:</strong> Compatibility with multiple languages, including support for special characters, accents, and non-Latin text.</li>



<li><strong>Speed:</strong> The processing speed, especially for large documents or high-volume workflows, to ensure efficient and timely conversion.</li>



<li><strong>Ease of Integration:</strong> Ability to integrate seamlessly with other software systems, such as document management systems, enterprise resource planning (ERP) systems, and customer relationship management (CRM) platforms.</li>



<li><strong>Cost:</strong> Evaluating whether the software is free or paid, and assessing its cost-effectiveness based on your specific requirements and budget.</li>



<li><strong>User Interface:</strong> The ease of use and intuitiveness of the software&#8217;s interface, ensuring that users can quickly learn and effectively utilize its features.</li>



<li><strong>Customization:</strong> The ability to customize the software to meet specific needs, such as adding custom dictionaries, training the OCR engine with specific fonts, or configuring workflows.</li>



<li><strong>Security:</strong> Ensuring that the software provides robust security measures to protect sensitive data, including encryption, access controls, and compliance with industry standards.</li>
</ul>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity" id="JumpSeperator"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Comparing Locally Runnable OCR Software</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">For reference, the sample documents used to test the different libraries are these:</p>



<p class="wp-block-paragraph"><strong>Document 1: </strong><a href="https://23511495.fs1.hubspotusercontent-na1.net/hubfs/23511495/bill-of-sale.pdf" target="_blank" rel="noopener" title="">bill-of-sale.pdf</a><br><strong>Document 2: </strong><a href="https://23511495.fs1.hubspotusercontent-na1.net/hubfs/23511495/nasa-apollo.pdf" target="_blank" rel="noopener" title="">nasa-apollo.pdf</a></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="515" src="https://staging.unstract.com/wp-content/uploads/2024/09/PDF-OCR-data-extraction-sample-test-documents-1024x515.png" alt="Best OCR Software in 2024: Test documents for OCR feature comparison" class="wp-image-12255" srcset="https://staging.unstract.com/wp-content/uploads/2024/09/PDF-OCR-data-extraction-sample-test-documents-1024x515.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/09/PDF-OCR-data-extraction-sample-test-documents-300x151.png 300w, https://staging.unstract.com/wp-content/uploads/2024/09/PDF-OCR-data-extraction-sample-test-documents-768x386.png 768w, https://staging.unstract.com/wp-content/uploads/2024/09/PDF-OCR-data-extraction-sample-test-documents-1536x772.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/09/PDF-OCR-data-extraction-sample-test-documents-2048x1030.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em>Test documents for comparing OCR (Optical Character Recognition) tool capabilities</em></figcaption></figure>
</div>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="120" height="120" src="https://staging.unstract.com/wp-content/uploads/2024/09/gitlogo-1.png" alt="" class="wp-image-12263" style="width:75px;height:auto" srcset="https://staging.unstract.com/wp-content/uploads/2024/09/gitlogo-1.png 120w, https://staging.unstract.com/wp-content/uploads/2024/09/gitlogo-1-79x79.png 79w" sizes="(max-width: 120px) 100vw, 120px" /></figure>



<p class="wp-block-paragraph">All the source code for this OCR tool evaluation project&nbsp;<a href="https://github.com/nunombispo/BestOCR_Article" target="_blank" rel="noopener" title="">can be found here on Github</a>.</p>
</blockquote>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Tesseract OCR</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><a href="https://github.com/tesseract-ocr/tesseract" target="_blank" rel="noopener" title="Tesseract OCR is an open-source tool">Tesseract OCR is an open-source tool</a> for recognizing text in images. It was first created by Hewlett-Packard and later made open-source by Google. It is known for being very accurate and flexible, which makes it one of the most popular OCR tools available.</p>



<h3 class="wp-block-heading">Main Features and Capabilities:</h3>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li><strong>Neural Network-Based Recognition</strong>: Tesseract 4 introduced a new OCR engine based on Long Short-Term Memory (LSTM) neural networks, which greatly improves accuracy, especially for recognizing lines of text. It still works with the older OCR engine from Tesseract 3.</li>



<li><strong>Broad Language Support</strong>: Tesseract can recognize over 100 languages right out of the box, including support for Unicode (UTF-8), which covers a wide range of character sets.</li>



<li><strong>Diverse Output Formats</strong>: It supports various output formats such as plain text, hOCR (HTML), PDF, TSV, ALTO, and PAGE, making it adaptable for different uses.</li>



<li><strong>Image Format Compatibility</strong>: Tesseract can process various image formats including PNG, JPEG, and TIFF. However, to get the best OCR results, the quality of the input image often needs to be improved.</li>



<li><strong>No Built-In GUI</strong>: Tesseract primarily operates via the command line, but there are several third-party graphical user interfaces (GUIs) available for those who prefer a visual interface.</li>



<li><strong>Custom Training Capabilities</strong>: Users can train Tesseract to recognize new languages or improve their accuracy with specific fonts or handwriting styles. This makes it highly customizable for specialized OCR needs.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Installation and Setup Process</h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Here’s how you can install and set up Tesseract OCR using Python:</p>



<ul class="wp-block-list">
<li>First, you need to make sure that you have the Tesseract OCR library installed, details <a href="https://tesseract-ocr.github.io/tessdoc/Installation.html"> here</a>.</li>



<li>Then you can install a Python wrapper, in this case will use tesserocr, more details about the wrapper <a href="https://github.com/sirfz/tesserocr"> are here</a>. For installation requirements of the wrapper, you can check the official GitHub <a href="https://pypi.org/project/tesserocr/"> page</a>.</li>
</ul>



<p class="wp-block-paragraph">Since Tesseract OCR cannot process PDF files directly, we need to first extract the contents of the sample PDF files into images.</p>



<p class="wp-block-paragraph">For this, we will use the library <a href="https://github.com/pypdfium2-team/pypdfium2"> pypdfium2</a> and also the PIL library for additional image support:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>pip install pillow pypdfium2</code></pre></div>



<p class="wp-block-paragraph">Then we can write the following code to perform the OCR from the sample documents:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import tesserocr
import pypdfium2 as pdfium


# Load a document
pdf = pdfium.PdfDocument(&quot;bill-of-sale.pdf&quot;)


# Loop over pages and render
for i in range(len(pdf)):
   page = pdf[i]
   image = page.render(scale=5).to_pil()
   print(tesserocr.image_to_text(image))</code></pre></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Here&#8217;s a description of what the code does:</strong></p>



<ul class="wp-block-list">
<li>The script loads a PDF document named &#8220;bill-of-sale.pdf&#8221; using <code>pdfium.PdfDocument</code>.</li>



<li>It then loops over each page in the PDF:
<ul class="wp-block-list">
<li>The page is rendered as an image with a scale factor of 5 (to increase the resolution) using <code>page.render(scale=5).to_pil()</code>. The <code>to_pil()</code> method converts the rendered image to a PIL (Pillow) image object.</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">The <code>tesserocr.image_to_text(image)</code> function is used to perform OCR on the image and extract text, which is then printed to the console.</p>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Performance Test</h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">We tested Tesseract against the two sample documents. Here are the results:</p>



<p class="wp-block-paragraph"><strong>Document 1:</strong> Medium accuracy, missed several of the items lines of the bill of sale.</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>PION OF SPALDING SALES CORPORATION

FAMOUS FOR ATHLETIC EQUIPMENT

Sold To 6/1/39

BKLYN EAGLES 8 B CLUB

EMANLEY -
101 MONTGOMERY STREET

NEWARK, N.J.

DATE

ADDRESS

TOWN STATE

TERMS:
2% CASH [0 DAYS-NET 30 DAYS-

PLEASE REMIT TO SPALDING SALES CORP,

a oi ¢

STORE NO.

INVOICE No. S 2812

CUSTOMER&#39;S
ORDER NO.

DELD TQ DIRK LUNDY

Ship To

ADDRESS

TOWN

VIA

Class | OEALER

Inst, |GOLF PRO,| ORDER TAKEN BY

-- -- --

NO,

SALESMAN&#39;S NAME

OF

BALE GOODWIN

TAGUER

RB ITEM

NO DESCRIPTION OF ARTICLE

125
120
200

130

Form F 71 139-M

3 | 106

AMOUNT

QUANTITY
ORDERED | SHIPPED

15| 75
175
00

80
30

xe

bie

6
2
26
/
Y

NO RETURN OF MERCHANDISE FROM THIS INVOICE WILL BE ACCEPTED UNLESS YOU HAVE OUR WRITTEN PERMISSION.</code></pre></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Document 2:</strong> High accuracy, extracted almost completely the total information from the document</p>



<p class="wp-block-paragraph"></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>Using a 10 day interval, the values in the third column will be 10 times
the mean motion, n, and those in the fourth column will be 200 times the
acceleration coefficient. As outlined in vrevious I1TCP Bulletins, predictions
may ve made by interpolation in sucn a table. Its form is comparable to that
of the Daily Satellite Ephenmerides.

The prediction procedure involves the calculation of a time, JNL, at
which the satellite is expected to appear at a particular position such as
the point of local culmination. For this position, we will have calculated
a value of PRY. The observation then represents a measurement of the actual
time at which the satellite appeared at, or very near this position. As &
meticulous observer, I will have measured this time to + ofo0000001. I will
then use this actual time to recalculate the position and will correct for
differences between the calculated and actual point of observation. I will
also make corrections for effects of the pear shape and the ellipticity of
the equator. All of this is done with the objective of obtaining a measured
value of PRM that is accurate to about + 0%00001.

Another observer, Mr. X, may either be less meticulous or may lack the
means for making precise observations. l!e may simply use the predicted value
of PRM as a measured value to correspond with his measurement of the time.

Ge can assume that his accuracy is + of00001 in timing and + otoot in PRM.

Let us then assume that Mr. X and I both start tracking 1960 Nu 2, using

the above table and the Gear Ratio Elements. For convenience, we will also
assume that his location is the same as mine and that he makes each observation

at the same time that I do. After about 60 days, our records of observations
night compare as shown in Table V.

TABLE V

RECORD OF OBSERVATIONS

Comparin of a Meticulous Observer (W.P.O
with of a Casual Observer -X
Predicted Wie P.O. Kr. X
JNL PRM PRN st«éRR@SAd PRY. Resid.
58462.40113315  16699.946438  16899.946518 +80  16899.9469 +400
3848205088329 171656472894 171654473397 = 4503 1716544752 = +300
38484.04727861  17192.450126 17192450724 4598 1719264512 +1100
3848508494712 172060472112 172066472747 = +635 172064728 = +700
38486 604369964 17219427707 172194428590 4683 1721924280 +300
38494 .02957430 173272340616 175276341718 = +1102 1732723416 +1000
38495 .06723367 173410362480 = 173410565653 «+1173 --17341.5642 = +1700
38497 006365582 173684340068 173682341367 +1299 =: 1736823410 = +900

Wie can assume thet Mr. X&#39;s values of JNL will be the same as mine (in the first

column) except that they will include only five digits to the right of the

decimal.

In the above table, each &quot;residual&quot; column represents the difference

between the observed valuesand the predicted values, which are in the second
column. As we proceed, Mr. X and I will both plot these residuals against time,

as shown in Figure 2.

12</code></pre></div>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Paddle OCR</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><a href="https://github.com/PaddlePaddle/PaddleOCR" title="PaddleOCR">PaddleOCR</a> is a free, open-source toolkit for OCR created by the PaddlePaddle community.</p>



<p class="wp-block-paragraph">It&#8217;s designed to be practical and lightweight, supporting over 80 languages, which makes it very versatile for many different OCR uses.</p>



<p class="wp-block-paragraph">Built on the advanced deep learning framework PaddlePaddle, it offers strong tools for training, deploying, and integrating OCR models on various platforms like servers, mobile devices, embedded systems, and IoT devices.</p>



<h3 class="wp-block-heading">Key Features of PaddleOCR:</h3>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li><strong>Multilingual Support</strong>: PaddleOCR can recognize over 80 languages, including complex ones like Chinese, Japanese, and Korean. This makes it a global solution for OCR needs.</li>



<li><strong>Comprehensive Tools</strong>: The toolkit provides a full set of tools for OCR tasks, from labeling data and training models to compressing models and deploying them. This includes high-quality models like PP-OCR, PP-Structure, and PP-ChatOCR, which are optimized for different OCR tasks.</li>



<li><strong>Deployment Flexibility</strong>: PaddleOCR is designed to be easily used on various platforms. Whether you&#8217;re working on a server, a mobile app, or an embedded system, PaddleOCR has the tools and support to integrate OCR capabilities efficiently.</li>



<li><strong>Lightweight and Fast</strong>: One of the main goals of PaddleOCR is to stay lightweight and fast without losing accuracy. This makes it great for real-time applications where performance is important.</li>



<li><strong>Community and Documentation</strong>: PaddleOCR has an active community behind it, offering lots of documentation and resources to help developers get started and solve problems. The project is licensed under Apache License 2.0, which encourages its wide use and contributions.</li>
</ul>



<h3 class="wp-block-heading">Installation and Setup Process</h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">To install Paddle OCR, the following command can be used:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>pip install paddlepaddle paddleocr</code></pre></div>



<p class="wp-block-paragraph">This will install Paddle OCR with CPU support. If we want to use GPU support, we can run:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>pip install paddlepaddle-gpu paddleocr</code></pre></div>



<p class="wp-block-paragraph">Then we can write the following code:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>from paddleocr import PaddleOCR, draw_ocr
import pypdfium2 as pdfium
from PIL import Image

# Load a document
pdf = pdfium.PdfDocument(&quot;bill-of-sale.pdf&quot;)

# Initialize PaddleOCR and load English model
ocr = PaddleOCR(use_angle_cls=True, lang=&#39;en&#39;)

# Loop over pages and render
for i in range(len(pdf)):
    page = pdf[i]
    image = page.render(scale=5).to_pil()
    image.save(f&#39;image{i}.jpg&#39;)

    # OCR the image
    result = ocr.ocr(f&#39;image{i}.jpg&#39;, cls=True)
    for idx in range(len(result)):
        res = result[idx]
        # Print the OCR result
        for line in res:
            print(line)

    # Optionally, draw the OCR result on the image
    result = result[0]
    image = Image.open(f&#39;image{i}.jpg&#39;).convert(&#39;RGB&#39;)
    boxes = [line[0] for line in result]
    texts = [line[1][0] for line in result]
    scores = [line[1][1] for line in result]
    im_show = draw_ocr(image, boxes, texts, scores, font_path=&#39;C:\\\\Windows\\\\Fonts\\\\Arial.ttf&#39;)
    im_show = Image.fromarray(im_show)
    im_show.save(f&#39;result{i}.jpg&#39;)</code></pre></div>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Performance Test</h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">We tested PaddleOCR on the same two sample documents:</p>



<p class="wp-block-paragraph"><strong>Document 1:</strong> High accuracy, extracted almost completely the total information from the document</p>



<pre class="wp-block-code"><code>&#91;&#91;&#91;361.0, 158.0], &#91;1389.0, 178.0], &#91;1385.0, 362.0], &#91;357.0, 341.0]], ('HG.spalding+Bros.', 0.8403503894805908)]
&#91;&#91;&#91;2094.0, 267.0], &#91;3152.0, 267.0], &#91;3152.0, 314.0], &#91;2094.0, 314.0]], ('PLEASE REMIT TO SPALDING SALES CORP.', 0.9451443552970886)]
&#91;&#91;&#91;412.0, 317.0], &#91;950.0, 310.0], &#91;950.0, 357.0], &#91;413.0, 364.0]], ('ION OF SPAIDING SALES', 0.8258334398269653)]
&#91;&#91;&#91;950.0, 321.0], &#91;1241.0, 321.0], &#91;1241.0, 357.0], &#91;950.0, 357.0]], ('CORPORATION', 0.95151287317276)]
&#91;&#91;&#91;2320.0, 480.0], &#91;2406.0, 480.0], &#91;2406.0, 555.0], &#91;2320.0, 555.0]], ('#1', 0.9487408995628357)]
&#91;&#91;&#91;2570.0, 502.0], &#91;2827.0, 493.0], &#91;2830.0, 573.0], &#91;2573.0, 581.0]], ('FOLIOC', 0.916832685470581)]
&#91;&#91;&#91;1968.0, 526.0], &#91;2237.0, 526.0], &#91;2237.0, 577.0], &#91;1968.0, 577.0]], ('STORE NO.', 0.9377260208129883)]
&#91;&#91;&#91;269.0, 653.0], &#91;1524.0, 653.0], &#91;1524.0, 703.0], &#91;269.0, 703.0]], ('FAMOUSFOR ATHLETIC EQUIPMENT', 0.9647388458251953)]
&#91;&#91;&#91;2370.0, 682.0], &#91;2982.0, 674.0], &#91;2983.0, 746.0], &#91;2371.0, 754.0]], ('INVOICE NO.S 2812', 0.9267123341560364)]
&#91;&#91;&#91;197.0, 800.0], &#91;534.0, 800.0], &#91;534.0, 891.0], &#91;197.0, 891.0]], ('Sold To', 0.9875026941299438)]
&#91;&#91;&#91;1760.0, 793.0], &#91;2108.0, 793.0], &#91;2108.0, 898.0], &#91;1760.0, 898.0]], ('Ship To', 0.9982296228408813)]
&#91;&#91;&#91;2381.0, 797.0], &#91;2707.0, 797.0], &#91;2707.0, 844.0], &#91;2381.0, 844.0]], ("CUSTOMER'S", 0.9869886636734009)]
&#91;&#91;&#91;1107.0, 814.0], &#91;1342.0, 823.0], &#91;1339.0, 906.0], &#91;1103.0, 897.0]], ('6/1/39', 0.9966378211975098)]
&#91;&#91;&#91;810.0, 840.0], &#91;950.0, 840.0], &#91;950.0, 891.0], &#91;810.0, 891.0]], ('DATE', 0.9967975616455078)]
&#91;&#91;&#91;2374.0, 836.0], &#91;2661.0, 840.0], &#91;2660.0, 891.0], &#91;2373.0, 887.0]], ('ORDER NO.', 0.9327320456504822)]
&#91;&#91;&#91;2108.0, 945.0], &#91;2789.0, 941.0], &#91;2790.0, 1002.0], &#91;2108.0, 1006.0]], ('DELD TO DIRK LUNDY', 0.9053958058357239)]
&#91;&#91;&#91;505.0, 956.0], &#91;1308.0, 948.0], &#91;1309.0, 1009.0], &#91;506.0, 1017.0]], ('BKLYN EAGLES BB CLUB', 0.9151082038879395)]
&#91;&#91;&#91;509.0, 1028.0], &#91;817.0, 1028.0], &#91;817.0, 1089.0], &#91;509.0, 1089.0]], ('EMANLEY-', 0.9936221241950989)]
&#91;&#91;&#91;1717.0, 1060.0], &#91;1958.0, 1060.0], &#91;1958.0, 1111.0], &#91;1717.0, 1111.0]], ('ADDRESS', 0.9848356246948242)]
&#91;&#91;&#91;204.0, 1071.0], &#91;437.0, 1071.0], &#91;437.0, 1111.0], &#91;204.0, 1111.0]], ('ADDRESS', 0.9969754815101624)]
&#91;&#91;&#91;513.0, 1096.0], &#91;1305.0, 1096.0], &#91;1305.0, 1147.0], &#91;513.0, 1147.0]], ('1O1 MONTGOMERY STREET', 0.9420073628425598)]
&#91;&#91;&#91;503.0, 1157.0], &#91;1047.0, 1165.0], &#91;1046.0, 1230.0], &#91;502.0, 1222.0]], ('NEWARKN.J.', 0.9448561668395996)]
&#91;&#91;&#91;1020.0, 1182.0], &#91;1202.0, 1191.0], &#91;1199.0, 1245.0], &#91;1017.0, 1236.0]], ('STATE', 0.9939748644828796)]
&#91;&#91;&#91;1712.0, 1182.0], &#91;1873.0, 1191.0], &#91;1870.0, 1245.0], &#91;1709.0, 1236.0]], ('TOWN', 0.9983097314834595)]
&#91;&#91;&#91;197.0, 1193.0], &#91;355.0, 1193.0], &#91;355.0, 1244.0], &#91;197.0, 1244.0]], ('TOWN', 0.9977961778640747)]
&#91;&#91;&#91;2553.0, 1190.0], &#91;2718.0, 1190.0], &#91;2718.0, 1240.0], &#91;2553.0, 1240.0]], ('STATE', 0.9975801706314087)]
&#91;&#91;&#91;201.0, 1258.0], &#91;394.0, 1258.0], &#91;394.0, 1309.0], &#91;201.0, 1309.0]], ('TERMS:', 0.978973925113678)]
&#91;&#91;&#91;1710.0, 1305.0], &#91;1803.0, 1305.0], &#91;1803.0, 1359.0], &#91;1710.0, 1359.0]], ('VIA', 0.9877907633781433)]
&#91;&#91;&#91;197.0, 1316.0], &#91;1047.0, 1305.0], &#91;1047.0, 1356.0], &#91;198.0, 1367.0]], ('2%CASH 10DAYS-NET3ODAYS-', 0.9155265688896179)]
&#91;&#91;&#91;437.0, 1439.0], &#91;610.0, 1439.0], &#91;610.0, 1478.0], &#91;437.0, 1478.0]], ('DEALER', 0.9933333992958069)]
&#91;&#91;&#91;670.0, 1435.0], &#91;1058.0, 1435.0], &#91;1058.0, 1482.0], &#91;670.0, 1482.0]], ('INST.GOLF PRO', 0.9222421050071716)]
&#91;&#91;&#91;1251.0, 1435.0], &#91;1624.0, 1435.0], &#91;1624.0, 1482.0], &#91;1251.0, 1482.0]], ('ORDER TAKEN BY', 0.9442328810691833)]
&#91;&#91;&#91;2073.0, 1435.0], &#91;2467.0, 1439.0], &#91;2467.0, 1478.0], &#91;2072.0, 1475.0]], ("SALESMAN'S NAME", 0.9187303781509399)]
&#91;&#91;&#91;2926.0, 1435.0], &#91;3012.0, 1435.0], &#91;3012.0, 1489.0], &#91;2926.0, 1489.0]], ('NO,', 0.9488022923469543)]
&#91;&#91;&#91;233.0, 1460.0], &#91;366.0, 1460.0], &#91;366.0, 1500.0], &#91;233.0, 1500.0]], ('CLASS', 0.9968454241752625)]
&#91;&#91;&#91;262.0, 1511.0], &#91;337.0, 1511.0], &#91;337.0, 1550.0], &#91;262.0, 1550.0]], ('OF', 0.9905343055725098)]
&#91;&#91;&#91;2904.0, 1511.0], &#91;3026.0, 1511.0], &#91;3026.0, 1583.0], &#91;2904.0, 1583.0]], ('106', 0.9961721897125244)]
&#91;&#91;&#91;1198.0, 1529.0], &#91;1466.0, 1529.0], &#91;1466.0, 1590.0], &#91;1198.0, 1590.0]], ('GOODWIN', 0.9962643384933472)]
&#91;&#91;&#91;1879.0, 1522.0], &#91;2112.0, 1522.0], &#91;2112.0, 1586.0], &#91;1879.0, 1586.0]], ('TAGUER', 0.9955328106880188)]
&#91;&#91;&#91;778.0, 1536.0], &#91;821.0, 1536.0], &#91;821.0, 1590.0], &#91;778.0, 1590.0]], ('A', 0.9980504512786865)]
&#91;&#91;&#91;247.0, 1554.0], &#91;359.0, 1554.0], &#91;359.0, 1594.0], &#91;247.0, 1594.0]], ('SALE', 0.8504327535629272)]
&#91;&#91;&#91;1897.0, 1637.0], &#91;2101.0, 1637.0], &#91;2101.0, 1677.0], &#91;1897.0, 1677.0]], ('QUANTITY', 0.9966365694999695)]
&#91;&#91;&#91;893.0, 1659.0], &#91;1431.0, 1659.0], &#91;1431.0, 1705.0], &#91;893.0, 1705.0]], ('DESCRIPTION OF ARTICLE', 0.9516414999961853)]
&#91;&#91;&#91;2237.0, 1659.0], &#91;2348.0, 1659.0], &#91;2348.0, 1709.0], &#91;2237.0, 1709.0]], ('UNIT', 0.9896126985549927)]
&#91;&#91;&#91;2546.0, 1659.0], &#91;2678.0, 1659.0], &#91;2678.0, 1709.0], &#91;2546.0, 1709.0]], ('PRICE', 0.9961897730827332)]
&#91;&#91;&#91;2890.0, 1659.0], &#91;3073.0, 1659.0], &#91;3073.0, 1709.0], &#91;2890.0, 1709.0]], ('AMOUNT', 0.9908974170684814)]
&#91;&#91;&#91;319.0, 1687.0], &#91;405.0, 1687.0], &#91;405.0, 1727.0], &#91;319.0, 1727.0]], ('NO,', 0.849390983581543)]
&#91;&#91;&#91;1786.0, 1687.0], &#91;2201.0, 1687.0], &#91;2201.0, 1734.0], &#91;1786.0, 1734.0]], ('ORDERED OHIPPED', 0.8947080373764038)]
&#91;&#91;&#91;2277.0, 1893.0], &#91;2370.0, 1893.0], &#91;2370.0, 1969.0], &#91;2277.0, 1969.0]], ('EA', 0.9961373209953308)]
&#91;&#91;&#91;2896.0, 1884.0], &#91;2986.0, 1899.0], &#91;2973.0, 1979.0], &#91;2883.0, 1964.0]], ('15', 0.9982523322105408)]
&#91;&#91;&#91;158.0, 1904.0], &#91;269.0, 1904.0], &#91;269.0, 1979.0], &#91;158.0, 1979.0]], ('125', 0.9140155911445618)]
&#91;&#91;&#91;566.0, 1904.0], &#91;731.0, 1904.0], &#91;731.0, 1969.0], &#91;566.0, 1969.0]], ('BATS', 0.9960408806800842)]
&#91;&#91;&#91;1864.0, 1904.0], &#91;1915.0, 1904.0], &#91;1915.0, 1979.0], &#91;1864.0, 1979.0]], ('9', 0.9854689240455627)]
&#91;&#91;&#91;2094.0, 1904.0], &#91;2144.0, 1904.0], &#91;2144.0, 1979.0], &#91;2094.0, 1979.0]], ('9', 0.5181447863578796)]
&#91;&#91;&#91;2660.0, 1897.0], &#91;2750.0, 1897.0], &#91;2750.0, 1976.0], &#91;2660.0, 1976.0]], ('75', 0.9985846281051636)]
&#91;&#91;&#91;3005.0, 1897.0], &#91;3091.0, 1897.0], &#91;3091.0, 1976.0], &#91;3005.0, 1976.0]], ('75', 0.9977871179580688)]
&#91;&#91;&#91;2592.0, 1907.0], &#91;2642.0, 1907.0], &#91;2642.0, 1958.0], &#91;2592.0, 1958.0]], ('1', 0.9921799898147583)]
&#91;&#91;&#91;1861.0, 2008.0], &#91;1922.0, 2008.0], &#91;1922.0, 2077.0], &#91;1861.0, 2077.0]], ('1', 0.9759079217910767)]
&#91;&#91;&#91;2277.0, 2005.0], &#91;2370.0, 2005.0], &#91;2370.0, 2077.0], &#91;2277.0, 2077.0]], ('EA', 0.9966272115707397)]
&#91;&#91;&#91;3005.0, 2001.0], &#91;3094.0, 2001.0], &#91;3094.0, 2084.0], &#91;3005.0, 2084.0]], ('75', 0.9976346492767334)]
&#91;&#91;&#91;154.0, 2012.0], &#91;272.0, 2012.0], &#91;272.0, 2080.0], &#91;154.0, 2080.0]], ('120', 0.9948965907096863)]
&#91;&#91;&#91;566.0, 2012.0], &#91;731.0, 2012.0], &#91;731.0, 2077.0], &#91;566.0, 2077.0]], ('BATS', 0.9785612225532532)]
&#91;&#91;&#91;2090.0, 2012.0], &#91;2137.0, 2012.0], &#91;2137.0, 2073.0], &#91;2090.0, 2073.0]], ('1', 0.948710024356842)]
&#91;&#91;&#91;2926.0, 2012.0], &#91;2972.0, 2012.0], &#91;2972.0, 2073.0], &#91;2926.0, 2073.0]], ('1', 0.9829316735267639)]
&#91;&#91;&#91;1864.0, 2127.0], &#91;1911.0, 2127.0], &#91;1911.0, 2196.0], &#91;1864.0, 2196.0]], ('6', 0.958515465259552)]
&#91;&#91;&#91;2094.0, 2124.0], &#91;2144.0, 2124.0], &#91;2144.0, 2199.0], &#91;2094.0, 2199.0]], ('9', 0.6393207907676697)]
&#91;&#91;&#91;2277.0, 2127.0], &#91;2370.0, 2127.0], &#91;2370.0, 2203.0], &#91;2277.0, 2203.0]], ('EA', 0.9971687197685242)]
&#91;&#91;&#91;2653.0, 2127.0], &#91;2746.0, 2127.0], &#91;2746.0, 2199.0], &#91;2653.0, 2199.0]], ('00', 0.9670082926750183)]
&#91;&#91;&#91;154.0, 2135.0], &#91;269.0, 2135.0], &#91;269.0, 2203.0], &#91;154.0, 2203.0]], ('200', 0.9990455508232117)]
&#91;&#91;&#91;2592.0, 2138.0], &#91;2646.0, 2138.0], &#91;2646.0, 2192.0], &#91;2592.0, 2192.0]], ('1', 0.8707045316696167)]
&#91;&#91;&#91;3005.0, 2131.0], &#91;3091.0, 2131.0], &#91;3091.0, 2199.0], &#91;3005.0, 2199.0]], ('00', 0.9527323246002197)]
&#91;&#91;&#91;570.0, 2142.0], &#91;728.0, 2142.0], &#91;728.0, 2196.0], &#91;570.0, 2196.0]], ('BATS', 0.9951581358909607)]
&#91;&#91;&#91;3005.0, 2239.0], &#91;3094.0, 2239.0], &#91;3094.0, 2315.0], &#91;3005.0, 2315.0]], ('80', 0.9814289808273315)]
&#91;&#91;&#91;158.0, 2254.0], &#91;262.0, 2254.0], &#91;262.0, 2329.0], &#91;158.0, 2329.0]], ('130', 0.9975236058235168)]
&#91;&#91;&#91;566.0, 2254.0], &#91;728.0, 2254.0], &#91;728.0, 2318.0], &#91;566.0, 2318.0]], ('BATS', 0.9968507289886475)]
&#91;&#91;&#91;1864.0, 2254.0], &#91;1911.0, 2254.0], &#91;1911.0, 2315.0], &#91;1864.0, 2315.0]], ('2', 0.9978007674217224)]
&#91;&#91;&#91;2097.0, 2254.0], &#91;2144.0, 2254.0], &#91;2144.0, 2315.0], &#91;2097.0, 2315.0]], ('2', 0.9970558881759644)]
&#91;&#91;&#91;2280.0, 2254.0], &#91;2366.0, 2254.0], &#91;2366.0, 2322.0], &#91;2280.0, 2322.0]], ('EA', 0.9969485998153687)]
&#91;&#91;&#91;2592.0, 2257.0], &#91;2646.0, 2257.0], &#91;2646.0, 2308.0], &#91;2592.0, 2308.0]], ('1', 0.873385488986969)]
&#91;&#91;&#91;2660.0, 2254.0], &#91;2739.0, 2254.0], &#91;2739.0, 2318.0], &#91;2660.0, 2318.0]], ('40', 0.9988534450531006)]
&#91;&#91;&#91;2929.0, 2250.0], &#91;2972.0, 2250.0], &#91;2972.0, 2311.0], &#91;2929.0, 2311.0]], ('2', 0.9969152212142944)]
&#91;&#91;&#91;2886.0, 2329.0], &#91;2972.0, 2329.0], &#91;2972.0, 2405.0], &#91;2886.0, 2405.0]], ('26', 0.9959961175918579)]
&#91;&#91;&#91;3005.0, 2340.0], &#91;3091.0, 2340.0], &#91;3091.0, 2409.0], &#91;3005.0, 2409.0]], ('30', 0.9916164875030518)]
&#91;&#91;&#91;2642.0, 2369.0], &#91;2729.0, 2369.0], &#91;2729.0, 2448.0], &#91;2642.0, 2448.0]], ('er', 0.551166296005249)]
&#91;&#91;&#91;2987.0, 2405.0], &#91;3094.0, 2405.0], &#91;3094.0, 2477.0], &#91;2987.0, 2477.0]], ('50', 0.5353686213493347)]
&#91;&#91;&#91;2919.0, 2416.0], &#91;2962.0, 2416.0], &#91;2962.0, 2473.0], &#91;2919.0, 2473.0]], ('/', 0.5241718888282776)]
&#91;&#91;&#91;2854.0, 2506.0], &#91;2965.0, 2506.0], &#91;2965.0, 2564.0], &#91;2854.0, 2564.0]], ('24', 0.64298415184021)]
&#91;&#91;&#91;1483.0, 2645.0], &#91;1874.0, 2681.0], &#91;1866.0, 2772.0], &#91;1475.0, 2736.0]], ('SEP1', 0.9770590662956238)]
&#91;&#91;&#91;262.0, 3050.0], &#91;588.0, 3050.0], &#91;588.0, 3097.0], &#91;262.0, 3097.0]], ('FormF21139-M', 0.9208917021751404)]
&#91;&#91;&#91;477.0, 3112.0], &#91;2926.0, 3112.0], &#91;2926.0, 3159.0], &#91;477.0, 3159.0]], ('NO RETURN OF MERCHANDISE FROM THIS INVOICE WILL BE ACCEPTED UNLESS YOU HAVE OUR WRITTEN PERMISSION.', 0.9201523065567017)]</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Document 2:</strong> High accuracy, extracted almost completely the total information from the document</p>



<pre class="wp-block-code"><code>&#91;&#91;&#91;553.0, 311.0], &#91;2408.0, 298.0], &#91;2408.0, 359.0], &#91;554.0, 373.0]], ('Using a 10 day interval, the values in the third colurn will be 10 times', 0.9857205152511597)]
&#91;&#91;&#91;434.0, 417.0], &#91;2430.0, 403.0], &#91;2431.0, 460.0], &#91;434.0, 474.0]], ('acceleration coefficient. As outlined in previous ITcp Bulletins, predictions', 0.9794966578483582)]
&#91;&#91;&#91;434.0, 469.0], &#91;2404.0, 452.0], &#91;2404.0, 513.0], &#91;434.0, 531.0]], ('may be made by interpolation in such a table. Its form is comparable to that', 0.9822374582290649)]
&#91;&#91;&#91;438.0, 517.0], &#91;1346.0, 517.0], &#91;1346.0, 574.0], &#91;438.0, 574.0]], ('of the Daily Satellite Ephenerides.', 0.9848372340202332)]
&#91;&#91;&#91;562.0, 632.0], &#91;2315.0, 623.0], &#91;2316.0, 684.0], &#91;562.0, 693.0]], ('The prediction procedure involves the calculation of a time, JNL, at', 0.99403977394104)]
&#91;&#91;&#91;438.0, 689.0], &#91;2337.0, 675.0], &#91;2338.0, 732.0], &#91;439.0, 746.0]], ('which the satellite is expected to appear at a particular position such as', 0.9948274493217468)]
&#91;&#91;&#91;438.0, 895.0], &#91;2182.0, 881.0], &#91;2183.0, 938.0], &#91;439.0, 952.0]], ('meticulous observer, I will have measured this time to + Odoooooo1.', 0.9829939603805542)]
&#91;&#91;&#91;2183.0, 886.0], &#91;2355.0, 886.0], &#91;2355.0, 930.0], &#91;2183.0, 930.0]], ('I will', 0.996565580368042)]
&#91;&#91;&#91;443.0, 943.0], &#91;2342.0, 930.0], &#91;2342.0, 991.0], &#91;443.0, 1004.0]], ('then use this actual time to recalculate the position and will correct for', 0.9911159873008728)]
&#91;&#91;&#91;447.0, 996.0], &#91;2165.0, 987.0], &#91;2165.0, 1044.0], &#91;447.0, 1053.0]], ('differences between the calculated and actual point of observation..', 0.9875534176826477)]
&#91;&#91;&#91;2200.0, 991.0], &#91;2355.0, 991.0], &#91;2355.0, 1035.0], &#91;2200.0, 1035.0]], ('I will', 0.9729122519493103)]
&#91;&#91;&#91;438.0, 1048.0], &#91;2346.0, 1035.0], &#91;2347.0, 1092.0], &#91;439.0, 1105.0]], ("also make corrections for effects of' the pear shape and the ellipticity of.", 0.9852278828620911)]
&#91;&#91;&#91;757.0, 1096.0], &#91;2390.0, 1087.0], &#91;2391.0, 1144.0], &#91;757.0, 1153.0]], ('All of this is done with the objective of obtaining a measured', 0.9988162517547607)]
&#91;&#91;&#91;452.0, 1110.0], &#91;775.0, 1110.0], &#91;775.0, 1153.0], &#91;452.0, 1153.0]], ('the equator..', 0.9692018032073975)]
&#91;&#91;&#91;566.0, 1250.0], &#91;2368.0, 1237.0], &#91;2369.0, 1298.0], &#91;567.0, 1311.0]], ('Another observer, Mr. X, may either be less meticulous or may lack the', 0.9877793192863464)]
&#91;&#91;&#91;438.0, 1303.0], &#91;2417.0, 1289.0], &#91;2417.0, 1346.0], &#91;439.0, 1360.0]], ('means for making precise observations. He may simply use the predicted value', 0.9835277199745178)]
&#91;&#91;&#91;438.0, 1351.0], &#91;2337.0, 1337.0], &#91;2338.0, 1399.0], &#91;439.0, 1412.0]], ('of PRt as a measured value to correspond with his measurement of the time.', 0.9732710123062134)]
&#91;&#91;&#91;438.0, 1403.0], &#91;2342.0, 1390.0], &#91;2342.0, 1447.0], &#91;439.0, 1460.0]], ('Fhdd ut loogo+ pue 3ugngg ut loooopo+ st Ronannn sty goyn aunsse uuo a!', 0.5953871011734009)]
&#91;&#91;&#91;443.0, 1452.0], &#91;2297.0, 1443.0], &#91;2298.0, 1500.0], &#91;443.0, 1509.0]], ('Let us then assune that lr. X and I both start tracking 1960 Nu 2, using', 0.97115159034729)]
&#91;&#91;&#91;1447.0, 1553.0], &#91;2470.0, 1543.0], &#91;2471.0, 1601.0], &#91;1448.0, 1610.0]], (' mine and that he makes each observation', 0.9914621114730835)]
&#91;&#91;&#91;447.0, 1566.0], &#91;1470.0, 1557.0], &#91;1470.0, 1601.0], &#91;447.0, 1610.0]], ('assume that his location is the same as.', 0.9801846742630005)]
&#91;&#91;&#91;443.0, 1658.0], &#91;1328.0, 1653.0], &#91;1328.0, 1715.0], &#91;443.0, 1719.0]], ('might conpare as shown in Table V.', 0.9593335390090942)]
&#91;&#91;&#91;1386.0, 1833.0], &#91;1616.0, 1833.0], &#91;1616.0, 1881.0], &#91;1386.0, 1881.0]], ('TABLE V', 0.9975382089614868)]
&#91;&#91;&#91;1142.0, 1930.0], &#91;1846.0, 1930.0], &#91;1846.0, 1987.0], &#91;1142.0, 1987.0]], ('RECORD OF OBSERVATIONS', 0.9988337159156799)]
&#91;&#91;&#91;925.0, 2035.0], &#91;2085.0, 2030.0], &#91;2085.0, 2087.0], &#91;925.0, 2092.0]], ('Comparing Log of a Meticulous Observer (W.P.O)', 0.9923900961875916)]
&#91;&#91;&#91;1045.0, 2088.0], &#91;1965.0, 2083.0], &#91;1966.0, 2144.0], &#91;1045.0, 2149.0]], ('with Log of a Casual Observer (Mr. X)', 0.9935088157653809)]
&#91;&#91;&#91;956.0, 2237.0], &#91;1195.0, 2237.0], &#91;1195.0, 2285.0], &#91;956.0, 2285.0]], ('Predicted', 0.9988049268722534)]
&#91;&#91;&#91;1492.0, 2237.0], &#91;1704.0, 2237.0], &#91;1704.0, 2285.0], &#91;1492.0, 2285.0]], ('W. P. O.', 0.8736283183097839)]
&#91;&#91;&#91;2054.0, 2232.0], &#91;2191.0, 2232.0], &#91;2191.0, 2280.0], &#91;2054.0, 2280.0]], ('Mr. X', 0.9575027227401733)]
&#91;&#91;&#91;1032.0, 2289.0], &#91;1124.0, 2289.0], &#91;1124.0, 2342.0], &#91;1032.0, 2342.0]], ('PRM', 0.9898760318756104)]
&#91;&#91;&#91;1974.0, 2285.0], &#91;2063.0, 2285.0], &#91;2063.0, 2333.0], &#91;1974.0, 2333.0]], ('PR', 0.9861990213394165)]
&#91;&#91;&#91;2225.0, 2283.0], &#91;2382.0, 2265.0], &#91;2388.0, 2326.0], &#91;2231.0, 2344.0]], ('Resid.', 0.9992003440856934)]
&#91;&#91;&#91;633.0, 2294.0], &#91;717.0, 2294.0], &#91;717.0, 2346.0], &#91;633.0, 2346.0]], ('JNL', 0.8906293511390686)]
&#91;&#91;&#91;1426.0, 2294.0], &#91;1505.0, 2294.0], &#91;1505.0, 2329.0], &#91;1426.0, 2329.0]], ('PRM', 0.9811756014823914)]
&#91;&#91;&#91;1690.0, 2295.0], &#91;1848.0, 2284.0], &#91;1852.0, 2336.0], &#91;1694.0, 2347.0]], ('Resid.', 0.9998622536659241)]
&#91;&#91;&#91;1749.0, 2368.0], &#91;1842.0, 2368.0], &#91;1842.0, 2421.0], &#91;1749.0, 2421.0]], ('+80', 0.9984487891197205)]
&#91;&#91;&#91;1899.0, 2359.0], &#91;2169.0, 2359.0], &#91;2169.0, 2421.0], &#91;1899.0, 2421.0]], ('16899.9469', 0.9996829032897949)]
&#91;&#91;&#91;2262.0, 2359.0], &#91;2373.0, 2359.0], &#91;2373.0, 2412.0], &#91;2262.0, 2412.0]], ('+400', 0.9191010594367981)]
&#91;&#91;&#91;505.0, 2377.0], &#91;868.0, 2377.0], &#91;868.0, 2434.0], &#91;505.0, 2434.0]], ('38462.40113315', 0.9995452165603638)]
&#91;&#91;&#91;934.0, 2377.0], &#91;1248.0, 2377.0], &#91;1248.0, 2425.0], &#91;934.0, 2425.0]], ('16899.946438', 0.9993425011634827)]
&#91;&#91;&#91;1315.0, 2373.0], &#91;1629.0, 2373.0], &#91;1629.0, 2421.0], &#91;1315.0, 2421.0]], ('16899.946518', 0.9998354911804199)]
&#91;&#91;&#91;1731.0, 2473.0], &#91;1837.0, 2473.0], &#91;1837.0, 2526.0], &#91;1731.0, 2526.0]], ('+503', 0.9993162155151367)]
&#91;&#91;&#91;1899.0, 2465.0], &#91;2174.0, 2465.0], &#91;2174.0, 2526.0], &#91;1899.0, 2526.0]], ('17165.4732', 0.9999091029167175)]
&#91;&#91;&#91;2267.0, 2465.0], &#91;2377.0, 2465.0], &#91;2377.0, 2517.0], &#91;2267.0, 2517.0]], ('+300', 0.9997279644012451)]
&#91;&#91;&#91;509.0, 2487.0], &#91;868.0, 2487.0], &#91;868.0, 2530.0], &#91;509.0, 2530.0]], ('38482.05088329', 0.9956350922584534)]
&#91;&#91;&#91;920.0, 2478.0], &#91;1252.0, 2468.0], &#91;1254.0, 2530.0], &#91;922.0, 2540.0]], ('17165.472894', 0.9996970295906067)]
&#91;&#91;&#91;1315.0, 2478.0], &#91;1629.0, 2478.0], &#91;1629.0, 2526.0], &#91;1315.0, 2526.0]], ('17165.473397', 0.9995167851448059)]
&#91;&#91;&#91;1731.0, 2574.0], &#91;1842.0, 2574.0], &#91;1842.0, 2627.0], &#91;1731.0, 2627.0]], ('+598', 0.9998121857643127)]
&#91;&#91;&#91;1899.0, 2565.0], &#91;2178.0, 2565.0], &#91;2178.0, 2627.0], &#91;1899.0, 2627.0]], ('17192.4512', 0.9999018907546997)]
&#91;&#91;&#91;500.0, 2579.0], &#91;867.0, 2574.0], &#91;868.0, 2635.0], &#91;501.0, 2640.0]], ('38484.04727861', 0.9995495080947876)]
&#91;&#91;&#91;1319.0, 2579.0], &#91;1634.0, 2579.0], &#91;1634.0, 2627.0], &#91;1319.0, 2627.0]], ('17192.450724', 0.9986034035682678)]
&#91;&#91;&#91;2240.0, 2570.0], &#91;2377.0, 2570.0], &#91;2377.0, 2618.0], &#91;2240.0, 2618.0]], ('+1100', 0.9997634887695312)]
&#91;&#91;&#91;934.0, 2583.0], &#91;1248.0, 2583.0], &#91;1248.0, 2631.0], &#91;934.0, 2631.0]], ('17192.450126', 0.9997585415840149)]
&#91;&#91;&#91;1319.0, 2679.0], &#91;1629.0, 2679.0], &#91;1629.0, 2728.0], &#91;1319.0, 2728.0]], ('17206.472747', 0.9998332858085632)]
&#91;&#91;&#91;1735.0, 2675.0], &#91;1842.0, 2675.0], &#91;1842.0, 2728.0], &#91;1735.0, 2728.0]], ('+635', 0.999264121055603)]
&#91;&#91;&#91;1908.0, 2675.0], &#91;2174.0, 2675.0], &#91;2174.0, 2723.0], &#91;1908.0, 2723.0]], ('17206.4728', 0.9994878768920898)]
&#91;&#91;&#91;2267.0, 2671.0], &#91;2382.0, 2671.0], &#91;2382.0, 2723.0], &#91;2267.0, 2723.0]], ('+700', 0.9996985197067261)]
&#91;&#91;&#91;500.0, 2684.0], &#91;872.0, 2679.0], &#91;872.0, 2741.0], &#91;501.0, 2746.0]], ('38485.08494712', 0.9998096823692322)]
&#91;&#91;&#91;939.0, 2684.0], &#91;1253.0, 2684.0], &#91;1253.0, 2732.0], &#91;939.0, 2732.0]], ('17206.472112', 0.9997091889381409)]
&#91;&#91;&#91;1727.0, 2761.0], &#91;1853.0, 2774.0], &#91;1846.0, 2839.0], &#91;1720.0, 2827.0]], ('+683', 0.999439537525177)]
&#91;&#91;&#91;1319.0, 2780.0], &#91;1629.0, 2780.0], &#91;1629.0, 2829.0], &#91;1319.0, 2829.0]], ('17219.428390', 0.9997485280036926)]
&#91;&#91;&#91;1904.0, 2772.0], &#91;2178.0, 2772.0], &#91;2178.0, 2833.0], &#91;1904.0, 2833.0]], ('17219.4280', 0.9998974800109863)]
&#91;&#91;&#91;2271.0, 2772.0], &#91;2382.0, 2772.0], &#91;2382.0, 2824.0], &#91;2271.0, 2824.0]], ('+300', 0.9997367858886719)]
&#91;&#91;&#91;504.0, 2785.0], &#91;876.0, 2780.0], &#91;877.0, 2842.0], &#91;505.0, 2846.0]], ('38486.04369964', 0.9973931908607483)]
&#91;&#91;&#91;939.0, 2789.0], &#91;1248.0, 2789.0], &#91;1248.0, 2837.0], &#91;939.0, 2837.0]], ('17219.427707', 0.9997722506523132)]
&#91;&#91;&#91;1898.0, 2877.0], &#91;2181.0, 2867.0], &#91;2183.0, 2929.0], &#91;1901.0, 2939.0]], ('17327.3416', 0.9986153841018677)]
&#91;&#91;&#91;2240.0, 2868.0], &#91;2386.0, 2868.0], &#91;2386.0, 2929.0], &#91;2240.0, 2929.0]], ('+1000', 0.9997513890266418)]
&#91;&#91;&#91;509.0, 2890.0], &#91;877.0, 2890.0], &#91;877.0, 2947.0], &#91;509.0, 2947.0]], ('38494.02957430', 0.999668300151825)]
&#91;&#91;&#91;929.0, 2886.0], &#91;1256.0, 2876.0], &#91;1258.0, 2938.0], &#91;931.0, 2948.0]], ('17327.340616', 0.9951233267784119)]
&#91;&#91;&#91;1319.0, 2881.0], &#91;1634.0, 2881.0], &#91;1634.0, 2929.0], &#91;1319.0, 2929.0]], ('17327.341718', 0.9993224740028381)]
&#91;&#91;&#91;1704.0, 2881.0], &#91;1846.0, 2881.0], &#91;1846.0, 2929.0], &#91;1704.0, 2929.0]], ('+1102', 0.9996550679206848)]
&#91;&#91;&#91;929.0, 2987.0], &#91;1260.0, 2977.0], &#91;1262.0, 3039.0], &#91;931.0, 3048.0]], ('17341.362480', 0.9986879825592041)]
&#91;&#91;&#91;1315.0, 2982.0], &#91;1642.0, 2982.0], &#91;1642.0, 3043.0], &#91;1315.0, 3043.0]], ('17341.363653', 0.9986193776130676)]
&#91;&#91;&#91;1704.0, 2986.0], &#91;1842.0, 2986.0], &#91;1842.0, 3035.0], &#91;1704.0, 3035.0]], ('+1173', 0.9992446899414062)]
&#91;&#91;&#91;1903.0, 2978.0], &#91;2181.0, 2968.0], &#91;2183.0, 3030.0], &#91;1905.0, 3040.0]], ('17341.3642', 0.9991554021835327)]
&#91;&#91;&#91;2245.0, 2978.0], &#91;2382.0, 2978.0], &#91;2382.0, 3026.0], &#91;2245.0, 3026.0]], ('+1700', 0.9995923042297363)]
&#91;&#91;&#91;509.0, 2991.0], &#91;877.0, 2991.0], &#91;877.0, 3048.0], &#91;509.0, 3048.0]], ('38495.06723367', 0.9991346001625061)]
&#91;&#91;&#91;1315.0, 3087.0], &#91;1634.0, 3087.0], &#91;1634.0, 3136.0], &#91;1315.0, 3136.0]], ('17368.341367', 0.999509871006012)]
&#91;&#91;&#91;1704.0, 3087.0], &#91;1842.0, 3087.0], &#91;1842.0, 3136.0], &#91;1704.0, 3136.0]], ('+1299', 0.9989592432975769)]
&#91;&#91;&#91;1908.0, 3079.0], &#91;2178.0, 3079.0], &#91;2178.0, 3140.0], &#91;1908.0, 3140.0]], ('17368.3410', 0.9998946189880371)]
&#91;&#91;&#91;2271.0, 3079.0], &#91;2382.0, 3079.0], &#91;2382.0, 3131.0], &#91;2271.0, 3131.0]], ('006+', 0.9992048144340515)]
&#91;&#91;&#91;509.0, 3096.0], &#91;881.0, 3096.0], &#91;881.0, 3153.0], &#91;509.0, 3153.0]], ('38497.06365582', 0.9980858564376831)]
&#91;&#91;&#91;929.0, 3092.0], &#91;1260.0, 3082.0], &#91;1262.0, 3144.0], &#91;931.0, 3154.0]], ('17368.340068', 0.9978811144828796)]
&#91;&#91;&#91;451.0, 3403.0], &#91;2372.0, 3385.0], &#91;2373.0, 3460.0], &#91;452.0, 3478.0]], ('column) except that they will include only five digits to the right of the', 0.9924128651618958)]
&#91;&#91;&#91;465.0, 3469.0], &#91;682.0, 3469.0], &#91;682.0, 3517.0], &#91;465.0, 3517.0]], ('decimal.', 0.9990857243537903)]
&#91;&#91;&#91;580.0, 3561.0], &#91;2346.0, 3539.0], &#91;2347.0, 3609.0], &#91;581.0, 3631.0]], ('In the above table, each "residual" column represents the difference', 0.9948480129241943)]
&#91;&#91;&#91;460.0, 3666.0], &#91;2519.0, 3648.0], &#91;2519.0, 3710.0], &#91;461.0, 3728.0]], ('colunn. As we proceed, Mr. X and I will both plot these residuals against time,', 0.986700713634491)]
&#91;&#91;&#91;460.0, 3723.0], &#91;1014.0, 3723.0], &#91;1014.0, 3780.0], &#91;460.0, 3780.0]], ('as showm in Figure 2..', 0.9618627429008484)]
&#91;&#91;&#91;1501.0, 3807.0], &#91;1558.0, 3807.0], &#91;1558.0, 3846.0], &#91;1501.0, 3846.0]], ('12', 0.9994889497756958)]</code></pre>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h2 class="wp-block-heading alignwide has-text-align-center">LLMWhisperer: Best OCR to Extract Data from Handwritten Forms</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Let&#8217;s see how to process challenging PDFs that contain hand-filled forms with elements like checkboxes and radiobuttons and also bad scan pages the unfriendly orientations with LLMWhisperer. LLMWhisperer is a text extraction service that specifically targets large language models (LLMs).</p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Using LLMWhisperer to Extract Data from Handwritten Forms" width="1170" height="658" src="https://www.youtube.com/embed/L6Q9jvmilAQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph"></p>
</blockquote>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Comparing Cloud-Based OCR Services</h2>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Azure Document Intelligence</h2>



<p class="wp-block-paragraph"><a href="https://azure.microsoft.com/en-us/products/ai-services/ai-document-intelligence" target="_blank" rel="noopener" title="Azure Document Intelligence,">Azure Document Intelligence,</a> which used to be called Azure Form Recognizer, is a cloud-based service from Microsoft Azure.</p>



<p class="wp-block-paragraph">It offers advanced features for extracting text, key-value pairs, tables, and other structured data from documents.</p>



<p class="wp-block-paragraph">This service is part of Azure&#8217;s AI and Cognitive Services, aimed at automating the processing and analysis of forms and documents on a large scale.</p>



<h3 class="wp-block-heading">Key Features of Azure Document Intelligence:</h3>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li><strong>Text Extraction and OCR</strong>: Azure Document Intelligence uses Optical Character Recognition (OCR) technology to accurately extract text from various document types like PDFs, images, and handwritten forms. It can handle both printed and cursive handwriting, making it useful for different situations.</li>



<li><strong>Pre-built Models</strong>: The service provides ready-made models for specific document types, such as invoices, receipts, business cards, and ID documents. These models automatically recognize and extract relevant information, reducing the need for manual data entry.</li>



<li><strong>Custom Models</strong>: Users can create custom models to recognize and extract data from documents with unique structures. This is particularly helpful for organizations working with specialized forms or documents that don&#8217;t fit standard templates.</li>



<li><strong>Table Extraction</strong>: Azure Document Intelligence is excellent at extracting tables from documents, keeping the structure and relationships between cells intact. This is important for cases where tabular data needs to be imported into databases or spreadsheets.</li>



<li><strong>Integration and Scalability</strong>: As a cloud service, Azure Document Intelligence can be easily integrated with other Azure services. This lets users build scalable document processing workflows and create end-to-end automation solutions with tools like Azure Logic Apps and Power Automate.</li>



<li><strong>Security and Compliance</strong>: Being a Microsoft Azure service, it follows Azure’s strict security and compliance standards. This makes it suitable for handling sensitive documents and data in industries like finance, healthcare, and government.</li>
</ul>



<h3 class="wp-block-heading"><strong>Installation and Setup Process</strong></h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">First, you will need an account with Azure to retrieve your API credentials. You can sign up<a href="https://azure.microsoft.com/en-in/products/ai-services/ai-document-intelligence"> here</a> and get 500 pages for free each month.</p>



<p class="wp-block-paragraph">Then you can install the Python SDK with:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>pip install azure-ai-documentintelligence</code></pre></div>



<p class="wp-block-paragraph">Now you can write the following code:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>from azure.core.credentials import AzureKeyCredential
from azure.ai.documentintelligence import DocumentIntelligenceClient
from azure.ai.documentintelligence.models import AnalyzeDocumentRequest

# set `&lt;your-endpoint&gt;` and `&lt;your-key&gt;` variables with the values from the Azure portal
endpoint = &quot;&lt;your-endpoint&gt;&quot;
key = &quot;&lt;your-key&gt;&quot;

def analyze_invoice():
    # Create a Document Intelligence client
    document_intelligence_client = DocumentIntelligenceClient(
        endpoint=endpoint, credential=AzureKeyCredential(key)
    )

    # Read PDF to bytes
    with open(&quot;bill-of-sale.pdf&quot;, &quot;rb&quot;) as f:
        # Analyze the document
        poller = document_intelligence_client.begin_analyze_document(
            &quot;prebuilt-invoice&quot;, analyze_request=f, content_type=&quot;application/pdf&quot;
        )
        invoices = poller.result()

        print(invoices.content)

if __name__ == &quot;__main__&quot;:
    analyze_invoice()</code></pre></div>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Performance Test</strong></h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Testing Azure Document Intelligence:</p>



<ul class="wp-block-list">
<li><strong>Document 1:</strong> High accuracy, recognized the majority of the invoice elements.</li>
</ul>



<pre class="wp-block-code"><code>Al, Spalding &amp; Bros.
SPALDING
PLEASE REMIT TO SPALDING SALES CORP.
SION OF SPALDING SALES CORPORATION
#1
STORE NO.
FOLIO C
FAMOUS FOR ATHLETIC EQUIPMENT
INVOICE NO.
S 2812
Sold To
6/1/39
Ship To
CUSTOMER'S
DATE
ORDER NO.
BKLYN EAGLES B B CLUB
DELD TO DIRK LUNDY
EMANLEY -
ADDRESS
101 MONTGOMERY STREET
ADDRESS
TOWN
NEWARK, N.J.
STATE
TOWN
STATE
TERMS:
2% CASH 10 DAYS-NET 30 DAYS-
VIA
CLASS
DEALER
INST.
GOLF PRO.
ORDER TAKEN BY
SALESMAN'S NAME
NO,
OF
BALE
A
GOODWIN
TAGUER
106
86
ITEM
QUANTITY
NO.
DESCRIPTION OF ARTICLE
ORDERED SHIPPED
UNIT
PRICE
AMOUNT
125
BATS
9
9
EA
1
75
15
75
120
BATS
1
1
EA
1
75
-
200
BATS
6
6
EA
1
00
6
00
1 30
BATS
2
2
EA
1
40
2
80
26
30
DI
/
50
-
$24.80
SEP 1 / 1933
-
Form F 21 1-39-M
NO RETURN OF MERCHANDISE FROM THIS INVOICE WILL BE ACCEPTED UNLESS YOU HAVE OUR WRITTEN PERMISSION.</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Document 2:</strong> High accuracy, extracted the complete information from the document.</p>



<pre class="wp-block-code"><code>Using a 10 day interval, the values in the third column will be 10 times
the mean motion, n, and those in the fourth column will be 200 times the
acceleration coefficient. As outlined in previous ITCP Bulletins, predictions
may be made by interpolation in such a table. Its form is comparable to that
of the Daily Satellite Ephemerides.
The prediction procedure involves the calculation of a time, JNL, at
which the satellite is expected to appear at a particular position such as
the point of local culmination. For this position, we will have calculated
a value of PRM. The observation then represents a measurement of the actual
time at which the satellite appeared at, or very near this position. As a
meticulous observer, I will have measured this time to + 090000001. I will
then use this actual time to recalculate the position and will correct for
differences between the calculated and actual point of observation. I will
also make corrections for effects of the pear shape and the ellipticity of
the equator. All of this is done with the objective of obtaining a measured
value of PRM that is accurate to about + 0500001.
Another observer, Mr. X, may either be less meticulous or may lack the
means for making precise observations. He may simply use the predicted value
of PRM as a measured value to correspond with his measurement of the time.
We can assume that his accuracy is + 0900001 in timing and + 0f001 in PRM.
Let us then assume that Mr. X and I both start tracking 1960 Nu 2, using
the above table and the Gear Ratio Elements. For convenience, we will also
assume that his location is the same as mine and that he makes each observation
at the same time that I do. After about 60 days, our records of observations
might compare as shown in Table V.
TABLE V
RECORD OF OBSERVATIONS
Comparing Log of a Meticulous Observer (W. P.O)
with Log of a Casual Observer (Mr. X)
Predicted
V. P. 0.
Mr. X
JNL
PRM
PRM
Resid.
PRM
Resid.
38462.40113315
16899.946438
16899.946518
+80
16899.9469
+400
38482.05088329
17165.472894
17165.473397
+503
17165.4732
+300
38484.04727861
17192.450126
17192.450724
+598
17192.4512
+1100
38485.08494712
17206.472112
17206.472747
+635
17206.4728
+700
38486.04369964
17219.427707
17219.428390
¥683
17219.4280
+300
38494.02957430
17327.340616
17327.341718
+1102
17327.3416
+1000
38495.06723367
17341.362480
17341.363653
+1173
17341.3642
+1700
38497.06365582
17368.340068
17368.341367
+1299
17368.3410
+900
We can assume that Mr. X's values of JNL will be the same as mine (in the first
column ) except that they will include only five digits to the right of the
decimal.
In the above table, each "residual" column represents the difference
between the observed values and the predicted values, which are in the second
column. As we proceed, Mr. X and I will both plot these residuals against time,
as shown in Figure 2.
12 :selected: :selected:</code></pre>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Amazon Textract</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><a href="https://aws.amazon.com/textract/" target="_blank" rel="noopener" title="Amazon Textract">Amazon Textract</a> is a fully managed machine learning service offered by Amazon Web Services (AWS) that automatically extracts text, handwriting, and other data from scanned documents.</p>



<p class="wp-block-paragraph">It goes beyond simple Optical Character Recognition (OCR) by not only identifying text but also extracting structured data like tables, forms, and fields.</p>



<p class="wp-block-paragraph">This makes it particularly powerful for processing complex documents.</p>



<h3 class="wp-block-heading">Key Features of Amazon Textract:</h3>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li><strong>Text and Handwriting Extraction</strong>: Amazon Textract can extract both printed text and handwriting from scanned documents, including forms, invoices, receipts, and more. It supports a wide range of document formats, such as PDFs and images (PNG, JPEG, TIFF).</li>



<li><strong>Form and Table Extraction</strong>: One of Textract’s standout features is its ability to detect and extract structured data from forms and tables. It not only extracts the text but also preserves the relationship between fields and data. This is crucial for accurately capturing information from complex documents.</li>



<li><strong>Scalability and Integration</strong>: As a cloud-native service, Amazon Textract scales automatically to handle large volumes of documents. It can be easily integrated with other AWS services like Amazon S3 for storage, Amazon Lambda for serverless computing, and Amazon Comprehend for further text analysis. This makes it a robust component for building comprehensive document processing workflows.</li>



<li><strong>Security and Compliance</strong>: Amazon Textract adheres to AWS&#8217;s rigorous security standards, including encryption of data in transit and at rest. This makes it suitable for handling sensitive and regulated information. It also complies with various industry standards such as HIPAA for healthcare data and GDPR for data protection.</li>



<li><strong>Automatic Language Detection</strong>: Textract supports automatic detection of multiple languages within documents, enabling it to process documents in different languages without requiring prior specification.</li>



<li><strong>Machine Learning-Based Accuracy</strong>: Unlike traditional OCR, which might struggle with complex layouts or variations in text size and alignment, Textract leverages machine learning to improve accuracy in text extraction and interpretation, particularly in documents with irregular layouts.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Installation and Setup Process</strong></h3>



<p class="wp-block-paragraph">First, you will need to install the Python library to interface with AWS APIs:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>pip install boto3</code></pre></div>



<p class="wp-block-paragraph">Then you can write the following code:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import boto3
from textractprettyprinter.t_pretty_print_expense import get_string, Textract_Expense_Pretty_Print, Pretty_Print_Table_Format

# AWS credentials
AWS_ACCESS_KEY_ID = &quot;AKIAXBTCFDEFMHROHVGD&quot;
AWS_SECRET_ACCESS_KEY = &quot;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&quot;

# Initialize Textract client
textract = boto3.Session(aws_access_key_id=AWS_ACCESS_KEY_ID,
                         aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                         region_name=&#39;eu-central-1&#39;).client(&#39;textract&#39;)

# Call Textract to extract text from the document
response = textract.analyze_document(
    Document={
        &#39;S3Object&#39;: {
            &#39;Bucket&#39;: &quot;nunobispo-text&quot;,
            &#39;Name&#39;: &quot;bill-of-sale.pdf&quot;
        }
    },
    FeatureTypes=[&quot;TABLES&quot;, &quot;FORMS&quot;]
)

# Print the extracted text
for block in response[&#39;Blocks&#39;]:
    if block[&#39;BlockType&#39;] == &#39;LINE&#39;:
        print(&#39;Detected text: &#39; + block[&#39;Text&#39;])
    elif block[&#39;BlockType&#39;] == &#39;KEY_VALUE_SET&#39; and &#39;KEY&#39; in block[&#39;EntityTypes&#39;]:
        print(&#39;Key: &#39; + block[&#39;Text&#39;])
    elif block[&#39;BlockType&#39;] == &#39;TABLE&#39;:
        print(&#39;Table detected:&#39;)
        for relationship in block[&#39;Relationships&#39;]:
            for id in relationship[&#39;Ids&#39;]:
                for cell in response[&#39;Blocks&#39;]:
                    if cell[&#39;Id&#39;] == id:
                        print(&#39;Cell text: &#39; + cell[&#39;Text&#39;])</code></pre></div>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><strong>Performance Test</strong></h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Testing Amazon Textract:</p>



<p class="wp-block-paragraph"><strong>Document 1:</strong> Extremely accurate, especially with printed text.</p>



<pre class="wp-block-code"><code>Detected text: Ahspalding &amp; Bros.
Detected text: mone
Detected text: PALDIN
Detected text: PLEASE REMIT TO SPALDING SALES CORP.
Detected text: SION OF SPALDING SALES CORPORATION
Detected text: MARK
Detected text: #1
Detected text: STORE NO.
Detected text: FOLIO C
Detected text: FAMOUS FOR ATHLETIC EQUIPMENT
Detected text: INVOICE NO. S 2812
Detected text: Sold To
Detected text: Ship To
Detected text: CUSTOMER'S
Detected text: DATE
Detected text: 6/1/39
Detected text: ORDER NO.
Detected text: BKLYN EAGLES B B CLUB
Detected text: DELD TO DIRK LUNDY
Detected text: EMANLEY-
Detected text: ADDRESS
Detected text: ADDRESS
Detected text: 101 MONTGOMERY STREET
Detected text: TOWN
Detected text: NEWARK, N.J. STATE
Detected text: TOWN
Detected text: STATE
Detected text: TERMS:
Detected text: 2% CASH 10 DAYS-NET 30 DAYS-
Detected text: VIA
Detected text: DEALER
Detected text: INST.
Detected text: GOLF PRO.
Detected text: ORDER TAKEN BY
Detected text: SALESMAN'S NAME
Detected text: CLASS
Detected text: NO,
Detected text: OF
Detected text: SALE
Detected text: A
Detected text: GOODWIN
Detected text: TAGUER
Detected text: 106
Detected text: 86
Detected text: ITEM
Detected text: QUANTITY
Detected text: DESCRIPTION OF ARTICLE
Detected text: UNIT
Detected text: y
Detected text: PRICE
Detected text: AMOUNT
Detected text: NO.
Detected text: ORDERED
Detected text: SHIPPED
Detected text: -
Detected text: 125
Detected text: BATS
Detected text: 9
Detected text: 9
Detected text: EA
Detected text: 1
Detected text: 75
Detected text: 15
Detected text: 75
Detected text: 120
Detected text: BATS
Detected text: 1
Detected text: 1
Detected text: EA
Detected text: 1
Detected text: 75
Detected text: -
Detected text: -
Detected text: 200
Detected text: BATS
Detected text: 6
Detected text: 6
Detected text: EA
Detected text: 1
Detected text: 00
Detected text: 6
Detected text: 00
Detected text: -
Detected text: -
Detected text: 130
Detected text: BATS
Detected text: 2
Detected text: 2
Detected text: EA
Detected text: 1
Detected text: 40
Detected text: 2
Detected text: 80
Detected text: -
Detected text: 26
Detected text: Cr
Detected text: 30
Detected text: -
Detected text: /
Detected text: 50
Detected text: -
Detected text: BAB
Detected text: memo
Detected text: 80
Detected text: -
Detected text: 24
Detected text: -
Detected text: -
Detected text: SEP /
Detected text: -
Detected text: -
Detected text: -
Detected text: it
Detected text: -
Detected text: Form F 21 1-39-M
Detected text: NO RETURN OF MERCHANDISE FROM THIS INVOICE WILL BE ACCEPTED UNLESS YOU HAVE OUR WRITTEN PERMISSION.
Table detected:</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Document 2:</strong> Excellent table and form extraction.</p>



<pre class="wp-block-code"><code>Detected text: Using a 10 day interval, the values in the third column will be 10 times
Detected text: the mean motion, n, and those in the fourth column will be 200 times the
Detected text: acceleration coefficient. As outlined in previous ITCP Bulletins, predictions
Detected text: may be made by interpolation in such a table. Its form is comparable to that
Detected text: of the Daily Satellite Ephemerides.
Detected text: The prediction procedure involves the calculation of a time, JNL, at
Detected text: which the satellite is expected to appear at a particular position such as
Detected text: the point of local culmination. For this position, we will have calculated
Detected text: a value of PRM. The observation then represents a measurement of the actual
Detected text: time at which the satellite appeared at, or very near this position. As a
Detected text: meticulous observer, I will have measured this time to + 0.0000001. I will
Detected text: then use this actual time to recalculate the position and will correct for
Detected text: differences between the calculated and actual point of observation. I will
Detected text: also make corrections for effects of the pear shape and the ellipticity of
Detected text: the equator. All of this is done with the objective of obtaining a measured
Detected text: value of PRM that is accurate to about 0.00001.
Detected text: Another observer, Mr. X, may either be less meticulous or may lack the
Detected text: means for making precise observations. He may simply use the predicted value
Detected text: of PRM as a measured value to correspond with his measurement of the time.
Detected text: We can assume that his accuracy is 000001 in timing and + 0.001 in PRM.
Detected text: Let us then assume that Mr. X and I both start tracking 1960 Nu 2, using
Detected text: the above table and the Gear Ratio Elements. For convenience, we will also
Detected text: assume that his location is the same as mine and that he makes each observation
Detected text: at the same time that I do. After about 60 days, our records of observations
Detected text: might compare as shown in Table V.
Detected text: TABLE V
Detected text: RECORD OF OBSERVATIONS
Detected text: Comparing Log of a Meticulous Observer (W.P.O)
Detected text: with Log of a Casual Observer (Mr. X)
Detected text: Predicted
Detected text: V. P. O.
Detected text: Mr. X
Detected text: JNL
Detected text: PRM
Detected text: PRM
Detected text: Resid.
Detected text: PRM
Detected text: Resid.
Detected text: 38462.40113315
Detected text: 16899.946438
Detected text: 16899.946518
Detected text: +80
Detected text: 16899.9469
Detected text: +400
Detected text: 38482.05088329
Detected text: 17165.472894
Detected text: 17165.473397
Detected text: +503
Detected text: 17165.4732
Detected text: +300
Detected text: 38484.04727861
Detected text: 17192.450126
Detected text: 17192.450724
Detected text: +598
Detected text: 17192.4512
Detected text: +1100
Detected text: 38485.08494712
Detected text: 17206.472112
Detected text: 17206.472747
Detected text: +635
Detected text: 17206.4728
Detected text: +700
Detected text: 38486.04369964
Detected text: 17219.427707
Detected text: 17219.428390
Detected text: +683
Detected text: 17219.4280
Detected text: +300
Detected text: 38494.02957430
Detected text: 17327.340616
Detected text: 17327.341718
Detected text: +1102
Detected text: 17327.3416
Detected text: +1000
Detected text: 38495.06723367
Detected text: 17341.362480
Detected text: 17341.363653
Detected text: +1173
Detected text: 17341.3642
Detected text: +1700
Detected text: 38497.06365582
Detected text: 17368.340068
Detected text: 17368.341367
Detected text: +1299
Detected text: 17368.3410
Detected text: +900
Detected text: We can assume that Mr. X's values of JNL will be the same as mine (in the first
Detected text: column) except that they will include only five digits to the right of the
Detected text: decimal.
Detected text: In the above table, each "residual" column represents the difference
Detected text: between the observed values and the predicted values, which are in the second
Detected text: column. As we proceed, Mr. X and I will both plot these residuals against time,
Detected text: as shown in Figure 2.
Detected text: 12</code></pre>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Introducing LLMWhisperer: The Best OCR for LLMs</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><a href="https://staging.unstract.com/llmwhisperer/" title="LLMWhisperer is a tool that helps make complex documents easier for large language models (LLMs) to understand.">LLMWhisperer is a tool that helps make complex documents easier for large language models (LLMs) to understand.</a> It&#8217;s great at pulling text out of different types of documents, like scanned forms, PDFs, and images with unusual layouts.</p>



<p class="wp-block-paragraph">It keeps the structure of the document so the LLM can process it accurately. It can switch between text extraction and OCR ( Optical Character Recognition) modes automatically, depending on the type of document, and it can handle even poorly scanned or misaligned documents.</p>



<h2 class="wp-block-heading">Key Features</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Key features of LLMWhisperer include:</p>



<ul class="wp-block-list">
<li><strong>Automatic Mode Switching</strong>: It can easily switch between extracting text and using OCR based on the type of document, making sure it gets the best results from both digital text and scanned images.</li>



<li><strong>Layout Preservation</strong>: LLMWhisperer keeps the original layout of documents when it extracts text. This is important for keeping the context and accuracy when the data is used by large language models.</li>



<li><strong>Checkbox and Radio Button Recognition</strong>: It accurately identifies and converts checkboxes and radio buttons from forms into a text format that language models can easily understand, making it better for processing form-based data.</li>



<li><strong>Document Preprocessing</strong>: The tool has advanced options for preprocessing documents, like applying filters and adjusting image settings. This helps improve the quality of text extraction, especially from poorly scanned documents.</li>



<li><strong>Structured Data Output</strong>: LLMWhisperer can produce structured data outputs, like JSON, making it easier to use the extracted information in other systems and workflows.</li>



<li><strong>SaaS and On-Premise Deployment</strong>: It offers flexible deployment options, including a fully managed online service and an on-premise version for handling sensitive data securely.</li>
</ul>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h4 class="wp-block-heading has-text-align-left">PDF hell and practical RAG applications<br></h4>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Extracting text from PDFs for use in applications like Retrieval-Augmented Generation (RAG) and Natural Language Processing (NLP) is challenging due to their <a href="https://staging.unstract.com/blog/pdf-hell-and-practical-rag-applications/" title="fixed layout structure and lack of semantic organization">fixed layout structure and lack of semantic organization</a>.</p>



<p class="wp-block-paragraph">Learn how faithfully reproducing the structure of tables and other elements by preserving the original PDF layout is crucial for better performance in LLM and RAG applications.</p>



<p class="wp-block-paragraph"><a href="https://staging.unstract.com/blog/pdf-hell-and-practical-rag-applications/" title="Learn more →">Learn more →</a></p>
</blockquote>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h2 class="wp-block-heading alignwide has-text-align-center">LLMWhisperer: Best OCR for PDF Checkbox Extraction</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">PDF forms have checkboxes and radiobuttons that can be filled out by the user. These form elements are used to collect data from the user. In this video, we will show how to extract these form elements using LLMWhisperer in a way that LLMs can understand.</p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="PDF Checkbox Extraction with LLMWhisperer" width="1170" height="658" src="https://www.youtube.com/embed/dC7EhnEIdDA?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
</blockquote>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Installation and Setup Process</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">To use LLMWhisperer, you need to install the llmwhisperer-client package and obtain an API key from the LLMWhisperer website.&nbsp;</p>



<p class="wp-block-paragraph">Follow these steps to get started:</p>



<p class="wp-block-paragraph"><strong>Sign Up for an API Key:</strong> Visit the <a href="https://llmwhisperer.unstract.com/"> LLMWhisperer website</a> and sign up for an account. You will receive an API key that you need to use in your code.<br><strong>Install the LLMWhisperer Client:</strong> Use pip to install the llmwhisperer-client package.</p>



<p class="wp-block-paragraph"></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>pip install llmwhisperer-client</code></pre></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Then you can write the following code:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>from unstract.llmwhisperer.client import LLMWhispererClient

# Initialize the client with your API key
client = LLMWhispererClient(base_url=&quot;&lt;https://llmwhisperer-api.unstract.com/v1&gt;&quot;, api_key=&#39;&lt;YOUR_API_KEY&gt;&#39;)

# Extract tables from the PDF
result = client.whisper(file_path=&quot;bill-of-sale.pdf&quot;)
extracted_text = result[&quot;extracted_text&quot;]
print(extracted_text)</code></pre></div>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading" id="h.dznvajynubey">Performance Test</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Testing LLMWhisperer on the two documents:</p>



<p class="wp-block-paragraph"><strong>Document 1:</strong>&nbsp;Exceptional accuracy, especially with complex layouts and handwritten text.</p>



<pre class="wp-block-code"><code>Al, Spalding              Bros.        SPALDING           PLEASE REMIT TO SPALDING SALES CORP.
       SION OF SPALDING SALES CORPORATION     MARK

                                                                        #1
                                                            STORE NO.           FOLIO C

  FAMOUS FOR ATHLETIC EQUIPMENT
                                                                          INVOICE NO. S 2812 

                                                                          CUSTOMER'S
Sold    To           DATE      6/1/39                Ship To              ORDER NO.

           BKLYN EAGLES B B CLUB                                 DELD TO DIRK LUNDY
           EMANLEY -
ADDRESS                                            ADDRESS
           101 MONTGOMERY STREET
TOWN       NEWARK, N.J.      STATE                  TOWN                        STATE
 TERMS:
2% CASH TO DAYS-NET 30 DAYS-                       VIA

        DEALER INST. GOLF PRO.      ORDER TAKEN BY             SALESMAN'S NAME              NO,
 CLASS
   OF
  BALE              A             GOODWIN                TAGUER                             106 

    ITEM                                                 QUANTITY
86 NO.                  DESCRIPTION OF ARTICLE        ORDERED SHIPPED UNIT      PRICE      AMOUNT

125           BATS                                       9       9     EA         1 75      15 75 
-
120           BATS                                        1      1      EA                    1 75 
-
200           BATS                                       6       6      EA        1 00       6 00 

                                                                                 1 40 
1 30          BATS                                        2      2      EA                    2 80 
                                                                                           26 30 
                                                                                            150 
-
                                                                                               80-

-

                                            SEP / / 1933 

  Form F 21 1-39-M
          NO RETURN OF MERCHANDISE FROM THIS INVOICE WILL BE ACCEPTED UNLESS YOU HAVE OUR WRITTEN PERMISSION.
&lt;&lt;&lt;</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Document 2:</strong>&nbsp;Superior structured data extraction compared to other tools.</p>



<pre class="wp-block-code"><code>Using a 10 day interval, the values in the third column will be 10 times
the mean motion, n, and those in the fourth column will be 200 times the
acceleration coefficient. As outlined in previous ITCP Bulletins, predictions
may be made by interpolation in such a table. Its form is comparable to that
of the Daily Satellite Ephemerides.

    The prediction procedure involves the calculation of a time, JNL, at
which the satellite is expected to appear at a particular position such as 
the point of local culmination. For this position, we will have calculated
a value of PRM. The observation then represents a measurement of the actual
time at which the satellite appeared at, or very near this position. As a
meticulous observer, I will have measured this time to + 090000001. I will
then use this actual time to recalculate the position and will correct for 
differences between the calculated and actual point of observation. I will
also make corrections for effects of the pear shape and the ellipticity of
the equator. All of this is done with the objective of obtaining a measured
value of PRM that is accurate to about + 0500001. 

    Another observer, Mr. X, may either be less meticulous or may lack the
means for making precise observations. He may simply use the predicted value
of PRM as a measured value to correspond with his measurement of the time.
We can assume that his accuracy is + 0900001 in timing and + 0f001 in PRM.
Let us then assume that Mr. X and I both start tracking 1960 Nu 2, using
the above table and the Gear Ratio Elements. For convenience, we will also
assume that his location is the same as mine and that he makes each observation
at the same time that I do. After about 60 days, our records of observations
might compare as shown in Table V.

                                TABLE V

                        RECORD OF OBSERVATIONS

                Comparing Log of a Meticulous Observer (W.P.O)
                    with Log of a Casual Observer (Mr. &#91;X] X)

                 Predicted          W. P. O.           Mr. X
      JNL           PRM          PRM       Resid.    PRM      Resid.

 38462.40113315 16899.946438 16899.946518    +80 16899.9469    +400 

 38482.05088329 17165.472894 17165.473397   +503 17165.4732    +300 

 38484.04727861 17192.450126 17192.450724   +598 17192.4512   +1100 

 38485.08494712 17206.472112 17206.472747   +635 17206.4728    +700 

 38486.04369964 17219.427707 17219.428390   +683 17219.4280    +300 

 38494.02957430 17327.340616 17327.341718 +1102   17327.3416 +1000 

 38495.06723367 17341.362480 17341.363653 +1173   17341.3642 +1700 

 38497.06365582 17368.340068 17368.341367 +1299   17368.3410   +900 

We can assume that Mr. X's values of JNL will be the same as mine (in the first
column ) except that they will include only five digits to the right of the
decimal.

    In the above table, each "residual" column represents the difference
between the observed values and the predicted values, which are in the second
column. As we proceed, Mr. X and I will both plot these residuals against time,
as shown in Figure 2.
                                    12
&lt;&lt;&lt;</code></pre>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading has-text-align-center">Best OCR Software: Comparison of Main Features, Capabilities, and Precision</h2>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center wp-block-paragraph">In this section, we will compare the four OCR tools—Tesseract, PaddleOCR, Azure Document Intelligence, and Amazon Textract—along with LLMWhisperer. We&#8217;ll focus on their main features, abilities, accuracy, and overall performance.</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table><thead><tr><th>Feature</th><th>Tesseract</th><th><strong>PaddleOCR</strong></th><th><strong>Azure Document Intelligence</strong></th><th><strong>Amazon Textract</strong></th><th><strong>LLMWhisperer</strong></th></tr></thead><tbody><tr><td><strong>Accuracy</strong></td><td>High</td><td>Very High</td><td>Very High</td><td>Extremely High</td><td>Superior</td></tr><tr><td><strong>Language Support</strong></td><td>100+</td><td>80+</td><td>Multi-language</td><td>Multi-language</td><td>Multi-language</td></tr><tr><td><strong>Complex Layouts Handling</strong></td><td>Moderate</td><td>High</td><td>Very High</td><td>Very High</td><td>Superior</td></tr><tr><td><strong>Structured Data Extraction</strong></td><td>Low</td><td>Moderate</td><td>Very High</td><td>Extremely High</td><td>Superior</td></tr><tr><td><strong>Deployment Flexibility</strong></td><td>High (Local)</td><td>High (Local)</td><td>High (Cloud)</td><td>High (Cloud)</td><td>High (Cloud)</td></tr><tr><td><strong>Ease of Use</strong></td><td>Moderate</td><td>Easy</td><td>Easy</td><td>Moderate</td><td>Easy</td></tr><tr><td><strong>Cost</strong></td><td>Free</td><td>Free</td><td>Paid</td><td>Paid</td><td>Paid</td></tr><tr><td><strong>Custom Training</strong></td><td>Yes</td><td>Yes</td><td>Yes</td><td>No</td><td>Yes</td></tr><tr><td><strong>Integration</strong></td><td>Moderate</td><td>High</td><td>High</td><td>High</td><td>High</td></tr><tr><td><strong>Security and Compliance</strong></td><td>N/A</td><td>N/A</td><td>High</td><td>High</td><td>High</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading has-text-align-center" id="h.6iqp6bboru7">Evaluating the Best OCR Software: Analysis of Performance Tests</h2>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center wp-block-paragraph">When evaluating these tools against the sample documents, several factors come into play, including their ability to accurately extract text, handle complex layouts, and maintain the structure of the document.</p>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading" id="h.a4ilrdax77sk">Tesseract OCR:</h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Strengths:</strong></p>



<ul class="wp-block-list">
<li>Tesseract performs well with clean, high-quality images and provides solid accuracy for straightforward text recognition tasks.</li>



<li>It supports a wide range of languages and allows for custom training to improve recognition.</li>
</ul>



<p class="wp-block-paragraph"><strong>Weaknesses:</strong></p>



<ul class="wp-block-list">
<li>It struggles with complex layouts and handwritten text, which can result in lower accuracy and missed data in such cases.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading" id="h.imi4zfj7q6kp">PaddleOCR:</h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Strengths:</strong></p>



<ul class="wp-block-list">
<li>PaddleOCR excels in recognizing text in multi-language documents and handles complex layouts better than Tesseract.</li>



<li>It is also lightweight and fast, making it suitable for real-time applications.</li>
</ul>



<p class="wp-block-paragraph"><strong>Weaknesses:</strong></p>



<ul class="wp-block-list">
<li>While it performs well, its structured data extraction capabilities are less advanced compared to cloud-based services like Azure Document Intelligence and Amazon Textract.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading" id="h.263cvhjnc9qm">Azure Document Intelligence:</h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Strengths:</strong></p>



<ul class="wp-block-list">
<li>Azure Document Intelligence offers excellent accuracy and handles structured data extraction extremely well, especially in documents with tables and forms.</li>



<li>Its pre-built models simplify the extraction process for common document types.</li>
</ul>



<p class="wp-block-paragraph"><strong>Weaknesses:</strong></p>



<ul class="wp-block-list">
<li>As a cloud-based service, it requires a paid subscription, and its performance is dependent on internet connectivity.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading" id="h.8a76jppedwis"><strong>Amazon Textract:</strong></h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Strengths:</strong></p>



<ul class="wp-block-list">
<li>Textract is highly accurate, particularly with complex documents and forms.</li>



<li>It excels in structured data extraction and is well-integrated with other AWS services, making it a powerful tool for large-scale document processing.</li>
</ul>



<p class="wp-block-paragraph"><strong>Weaknesses:</strong></p>



<ul class="wp-block-list">
<li>Similar to Azure, it is a paid service and requires integration into the AWS ecosystem, which might be a barrier for some users.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading" id="h.4z5zyzag5o"><strong>LLMWhisperer:</strong></h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Strengths:</strong></p>



<ul class="wp-block-list">
<li>LLMWhisperer stands out with its ability to handle complex layouts, extract structured data with superior accuracy, and maintain the original document structure.</li>



<li>It is particularly effective for documents that combine various types of content, such as text, images, and forms.</li>
</ul>



<p class="wp-block-paragraph"><strong>Weaknesses:</strong></p>



<ul class="wp-block-list">
<li>Being a new entrant, it might have limited community support compared to more established tools.</li>



<li>It is also a paid service.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading" id="h.sjghgqanz2zr">Choosing the Right OCR Tool: Aligning with Your Project Needs</h3>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">In summary, the best OCR tool depends on your specific needs:</p>



<ul class="wp-block-list">
<li><strong>Tesseract</strong>&nbsp;is ideal for those who need a free, highly customizable tool for simple OCR tasks.</li>



<li><strong>PaddleOCR</strong>&nbsp;is a great choice for users who require a lightweight, fast, and highly accurate OCR solution with support for multiple languages.</li>



<li><strong>Azure Document Intelligence</strong>&nbsp;and&nbsp;<strong>Amazon Textract</strong>&nbsp;are top choices for businesses that need advanced structured data extraction and can afford a cloud-based, paid solution.</li>



<li><strong>LLMWhisperer</strong>&nbsp;is recommended for those who need superior accuracy and the ability to handle complex documents with various content types.</li>
</ul>



<p class="wp-block-paragraph">Ultimately, the choice of OCR tool should align with the specific requirements of your projects, whether it’s cost-effectiveness, accuracy, language support, or the ability to process complex document layouts.</p>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">For the curious. Who are we, and why are we writing about OCR?</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">We are building Unstract.&nbsp;<a href="https://staging.unstract.com/"><strong>Unstract</strong>&nbsp;is a no-code platform</a>&nbsp;to eliminate manual processes involving unstructured data using the power of LLMs. The entire process discussed above can be set up without writing a single line of code. And that’s only the beginning. The extraction you set up can be deployed in one click as an API or ETL pipeline.</p>



<p class="wp-block-paragraph">With API deployments, you can expose an API to which you send a PDF or an image and get back structured data in JSON format. Or with an ETL deployment, you can just put files into a Google Drive, Amazon S3 bucket or choose from a variety of sources and the platform will run extractions and store the extracted data into a database or a warehouse like Snowflake automatically. Unstract is an open-source software and is available at&nbsp;<a href="https://github.com/Zipstack/unstract" target="_blank" rel="noreferrer noopener">https://github.com/Zipstack/unstract</a>.</p>



<p class="wp-block-paragraph">Sign up for our free trial if you want to try it out quickly. More information&nbsp;<a href="https://staging.unstract.com/" target="_blank" rel="noreferrer noopener">here</a><a href="https://staging.unstract.com/">.</a>&nbsp;</p>



<p class="wp-block-paragraph"></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://staging.unstract.com/start-for-free/">Sign up for a free trial</a></div>
</div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><a href="https://staging.unstract.com/llmwhisperer/"><strong>LLMWhisperer</strong>&nbsp;is a document-to-text converter(best ocr).</a>&nbsp;Prep data from complex documents for use in Large Language Models. LLMs are powerful, but their output is as good as the input you provide. Documents can be a mess: widely varying formats and encodings, scans of images, numbered sections, and complex tables.</p>



<p class="wp-block-paragraph">Extracting data from these documents and blindly feeding it to LLMs is not a good recipe for reliable results. LLMWhisperer is a technology that presents data from complex documents to LLMs in a way they can best understand.</p>



<p class="wp-block-paragraph">If you want to take it for a test drive quickly, you can check out our free playground.</p>



<p class="wp-block-paragraph"></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://pg.llmwhisperer.unstract.com/">Try Playground with your docs</a></div>
</div>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h2 class="wp-block-heading alignwide has-text-align-center">Get started with LLMWhisperer: Best OCR for AI Document Processing</h2>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Welcome to LLMWhisperer!" width="1170" height="658" src="https://www.youtube.com/embed/b-hL_ALpI5k?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
</blockquote>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-left wp-block-paragraph"><strong>A Comparison of Best OCR software in 2026: Related topics for exploration</strong></p>



<ol class="wp-block-list">
<li><a href="https://staging.unstract.com/blog/unstract-receipt-ocr-scanner-api/" title="Best OCR for parsing receipts">Best OCR for parsing receipts</a></li>



<li><a href="https://staging.unstract.com/blog/best-ocr-for-invoice-processing-invoice-ocr/" target="_blank" rel="noopener" title="Best OCR for extracting data from invoice">Best PDF OCR for extracting data from invoice</a></li>



<li><a href="https://staging.unstract.com/blog/best-ocr-for-bookkeeping/" target="_blank" rel="noopener" title="Best OCR for reading Bookkeeping documents">Best OCR for reading bookkeeping documents</a></li>



<li><a href="https://staging.unstract.com/blog/accounts-payable-ocr/" target="_blank" rel="noopener" title="Best OCR for accounts payable documents">Best OCR for accounts payable documents</a></li>
</ol>
</blockquote>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Best PDF OCR Tools in 2026: FAQs</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>What criteria should I use to identify the best OCR software for my organization?</strong><br>Focus on ten factors highlighted in the article: accuracy, multi-language support, <a href="https://staging.unstract.com/blog/guide-to-extracting-data-from-pdf-form-with-unstract/" target="_blank" rel="noopener" title="complex-layout handling">complex-layout handling</a>, <a href="https://staging.unstract.com/blog/how-to-convert-pdf-to-json-with-unstract/" target="_blank" rel="noopener" title="structured data extraction">structured data extraction</a>, deployment flexibility, ease of use, cost, custom training options, integration capability, and security/compliance. Weigh these against your document types (invoices, forms, scientific papers, etc.) and your budget.</p>



<p class="wp-block-paragraph"><strong>What is the best OCR software for handling complex layouts and handwritten forms in 2026?</strong><br>Based on the performance tests, <a href="https://staging.unstract.com/llmwhisperer/">LLMWhisperer</a> is highlighted as providing superior accuracy for complex documents, including those with <a href="https://staging.unstract.com/blog/guide-to-extracting-data-from-handwritten-pdf-with-ocr/" target="_blank" rel="noopener" title="handwritten text and challenging layouts">handwritten text and challenging layouts</a> like the sample bill of sale, outperforming other tools in this specific category.</p>



<p class="wp-block-paragraph"><strong>Which best OCR software offers both on-premise and cloud-based deployment options in 2026?</strong><br>Several top contenders for the best OCR software provide both deployment options. <a href="https://staging.unstract.com/llmwhisperer/">LLMWhisperer</a>, for example, offers flexible deployment as a Software-as-a-Service (SaaS) or on-premise, making it suitable for organizations with strict security requirements.</p>



<p class="wp-block-paragraph"><strong>What deployment models do the best OCR software options support in 2026?</strong><br>You have three broad choices:</p>



<ul class="wp-block-list">
<li>Local/offline (Tesseract, PaddleOCR) – full control, no recurring fees, but more maintenance.</li>



<li>Cloud APIs (Azure Document Intelligence, Amazon Textract) – scalable and managed, paid per page.</li>



<li>Hybrid/SaaS or on-prem (LLMWhisperer) – hosted service for ease of use plus an optional on-prem version when data residency or privacy demands it.</li>
</ul>



<p class="wp-block-paragraph"><strong>How does LLMWhisperer position itself as the best OCR software for large-language-model (AI) workflows?</strong><br>The best OCR software, like LLMWhisperer, can detect and extract form elements such as <a href="https://staging.unstract.com/blog/checkbox-extraction-from-pdfs-using-llmwhisperer/" target="_blank" rel="noopener" title="checkboxes and radio buttons">checkboxes and radio buttons</a>, converting them into formats that are easily interpreted by AI or LLM workflows. This is especially useful for automating data entry from scanned forms and PDF documents.</p>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p><p>The post <a href="https://staging.unstract.com/blog/best-pdf-ocr-software/">Best OCR Software in 2026 — A Tool Comparison & Evaluation Guide</a> first appeared on <a href="https://staging.unstract.com">Unstract.com</a>.</p>]]></content:encoded>
					
		
		<enclosure url="https://staging.unstract.com/wp-content/uploads/2024/09/LLMWhisperer-OCR-tool-for-document-extraction-1.mp4" length="1432849" type="video/mp4" />

			</item>
		<item>
		<title>Guide to LLMWhisperer Document OCR API</title>
		<link>https://staging.unstract.com/blog/llmwhisperer-document-scanner-ocr-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=llmwhisperer-document-scanner-ocr-api</link>
					<comments>https://staging.unstract.com/blog/llmwhisperer-document-scanner-ocr-api/#respond</comments>
		
		<dc:creator><![CDATA[Tarun Singh]]></dc:creator>
		<pubDate>Thu, 19 Dec 2024 14:12:10 +0000</pubDate>
				<category><![CDATA[Product]]></category>
		<category><![CDATA[ocr]]></category>
		<category><![CDATA[OCR PDF]]></category>
		<category><![CDATA[optical character recognition]]></category>
		<guid isPermaLink="false">https://staging.unstract.com/?p=13070</guid>

					<description><![CDATA[<img src="https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header.png" style="display: block; margin: 1em auto"><p>This piece explores the difficulties of processing scanned PDFs and image scans and showcases LLMWhisperer OCR API offers innovative approaches to document text extraction.</p>
<p>The post <a href="https://staging.unstract.com/blog/llmwhisperer-document-scanner-ocr-api/">Guide to LLMWhisperer Document OCR API</a> first appeared on <a href="https://staging.unstract.com">Unstract.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<img src="https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header.png" style="display: block; margin: 1em auto"><h2 class="wp-block-heading">Introduction: What is a Document OCR API?</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">A <strong>Document OCR API</strong> (document scanner API) is a tool that converts text from scanned documents, PDFs, or images into machine-readable formats like JSON or text. It bridges the gap between static documents and dynamic workflows by enabling seamless text extraction across diverse document types.</p>



<p class="wp-block-paragraph"><strong>Purpose and Advantages</strong></p>



<ul class="wp-block-list">
<li><strong>Scalability:</strong> Handles varying workloads, from a few documents to thousands, easily.</li>



<li><strong>Ease of Integration:</strong> Integrates directly into existing systems like CRMs and ERPs.</li>



<li><strong>Flexibility:</strong> Processes various document types, including scanned forms, handwritten notes, and tables, ensuring compatibility with multiple layouts.</li>
</ul>



<p class="wp-block-paragraph">By offering OCR functionality as an API, organizations eliminate the need for standalone tools and automate text extraction, making document data instantly usable.</p>



<h2 class="wp-block-heading">Why Extracting Data from Documents is a Critical Business Process</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Extracting data from documents like scanned PDFs and images is crucial for businesses managing unstructured data. Many operations depend on extracting details like invoice totals, tax IDs, or customer information, which is often locked in static formats.</p>



<p class="wp-block-paragraph"><strong>Challenges with Manual Extraction</strong></p>



<p class="wp-block-paragraph">Manual methods are time-intensive, error-prone, and lack scalability. Employees may spend hours transcribing scanned forms, introducing inaccuracies, and delaying workflows.<br><em>Example:</em> A logistics company may struggle with manually extracting data from thousands of delivery receipts, leading to delays.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>TL;DR</strong><br><br>If you wish to <a href="#intro" title="skip directly to the solution section">skip directly to the solution section</a>, where you can see how LLMWhisperer OCR API handles document types of any complexity — document scans, images, PDFs with complex tables, checkboxes, and handwriting etc, <a href="#intro" title="click here">click here</a>.<br></p>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1592 / 1080;" width="1592" controls src="https://staging.unstract.com/wp-content/uploads/2024/10/llmwhisperer-vs-pdfplumber-pdf-data-extraction.mp4"></video></figure>
</blockquote>



<p class="wp-block-paragraph"><strong>Benefits of Automation</strong></p>



<ol class="wp-block-list">
<li><strong>Time Savings:</strong> Automating OCR drastically reduces processing time.<br><em>Example:</em> Retailers process invoices in minutes, ensuring prompt supplier payments.</li>



<li><strong>Accuracy:</strong> APIs reduce human error by standardizing data extraction.<br><em>Example:</em> An insurance company extracts claim details with near-perfect accuracy.</li>



<li><strong>Seamless Integration:</strong> Extracted data flows into systems for real-time analysis, boosting operational efficiency.</li>
</ol>



<p class="wp-block-paragraph">Automation makes static data actionable, saving time, reducing costs, and enhancing decision-making.</p>



<p class="wp-block-paragraph"><strong>Challenges in Document PDF Processing and How OCR Solves Them</strong></p>



<p class="wp-block-paragraph">Processing scanned PDFs and images presents unique challenges, including variability in document formats, low-quality scans, and complex layouts. OCR APIs address these hurdles with precision.</p>



<p class="wp-block-paragraph"><strong>Key Challenges</strong></p>



<ol class="wp-block-list">
<li><strong>Variability in Layouts:</strong> Scanned documents often lack uniformity, with each having distinct fonts, tables, or annotations.<br><em>Example:</em> Vendor invoices with different formats require dynamic adaptation.</li>



<li><strong>Low-Quality Scans:</strong> Blurry or faded text and noisy images hinder recognition.<br><em>Example:</em> A smudged tax form still yields accurate results after pre-processing by OCR.</li>



<li><strong>Complex Tables:</strong> Extracting data from multi-page tables or overlapping elements is challenging.<br><em>Example:</em> A bank statement’s mixed columns for debits and credits is parsed correctly with OCR.</li>
</ol>



<p class="wp-block-paragraph"><strong>How OCR Solves These Issues</strong></p>



<ul class="wp-block-list">
<li><strong>Pattern Recognition:</strong> Identifies and categorizes text elements, ensuring accurate extraction.</li>



<li><strong>Error Correction:</strong> Post-processing algorithms refine OCR outputs for precision.</li>



<li><strong>Layout Preservation:</strong> Maintains document structure for downstream analysis.</li>
</ul>



<p class="wp-block-paragraph">OCR APIs overcome these obstacles, enabling organizations to extract accurate, structured data efficiently from even the most challenging document types.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Brief Introduction to LLMWhisperer and Its Document OCR API Capabilities</h2>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading"><strong>Overview of LLMWhisperer</strong></h4>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">LLMWhisperer is an advanced text parser that prepares complex documents, including scanned PDFs, images, and tables, for downstream processing by large language models (LLMs). It focuses on converting unstructured or semi-structured data into organized, actionable formats like JSON. LLMWhisperer shines in handling intricate layouts, noisy scans, and handwritten text, enabling organizations to streamline document parsing workflows.</p>



<p class="wp-block-paragraph">LLMWhisperer is not powered by AI or LLMs for the OCR process. Instead, it enhances OCR outputs by applying intelligent parsing mechanisms that make the data more comprehensible for LLMs and other systems.<br></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="554" src="https://staging.unstract.com/wp-content/uploads/2024/11/handwritting-ocr-with-llms-text-pre-processing-with-llmwhisperer-1024x554.png" alt="" class="wp-image-12880" srcset="https://staging.unstract.com/wp-content/uploads/2024/11/handwritting-ocr-with-llms-text-pre-processing-with-llmwhisperer-1024x554.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/11/handwritting-ocr-with-llms-text-pre-processing-with-llmwhisperer-300x162.png 300w, https://staging.unstract.com/wp-content/uploads/2024/11/handwritting-ocr-with-llms-text-pre-processing-with-llmwhisperer-768x416.png 768w, https://staging.unstract.com/wp-content/uploads/2024/11/handwritting-ocr-with-llms-text-pre-processing-with-llmwhisperer-1536x832.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/11/handwritting-ocr-with-llms-text-pre-processing-with-llmwhisperer-2048x1109.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em>LLMWhisperer: The best document OCR API for AI workflows</em></figcaption></figure>
</div>


<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Modern Document OCR API: Key Features and Capabilities</strong></p>



<ol class="wp-block-list">
<li><strong>Structured Data Extraction</strong><br><br>LLMWhisperer excels at extracting structured text from scanned or image-based documents. It identifies key elements such as text zones, tables, and annotations, organizing them into usable formats. </li>



<li><strong>Complex Layout Handling</strong><br><br>It preserves the structure of intricate document layouts, such as multi-column designs, nested tables, and checkboxes. This ensures accurate parsing while maintaining the context of the original document.<br><em><strong>Example</strong></em>: Processing a multi-page bank statement with overlapping tables and transaction details without losing alignment or context.</li>



<li><strong>Pre-Processing for Noisy or Low-Quality Scans</strong><br><br>LLMWhisperer improves the quality of noisy scans by applying filters, de-skewing, and contrast adjustments. This pre-processing enhances the accuracy of OCR outputs.<br><em><strong>Example</strong></em>: Extracting policyholder details from a faded, watermarked insurance document with precision.</li>



<li><strong>Multilingual Document Parsing</strong><br><br>It supports multiple languages, allowing global enterprises to parse documents containing diverse scripts and mixed-language content.<br><em><strong>Example</strong></em>: Parsing an international invoice containing English, German, and French sections.</li>



<li><strong>OCR reader API that talks to your systems</strong><br><br>Available as an API, LLMWhisperer integrates effortlessly into existing workflows, enabling organizations to preprocess documents on the fly. This flexibility ensures scalability and adaptability across various document types.</li>
</ol>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">LLMWhisperer’s Role in OCR Workflows</h2>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Not Just an OCR Tool</h4>



<p class="wp-block-paragraph"><br>LLMWhisperer is not a standalone OCR engine; it acts as a bridge between raw OCR outputs and advanced LLM-powered systems. By parsing and structuring the data, it ensures the input is optimized for downstream processing by LLMs, enhancing contextual understanding and overall accuracy.</p>



<ul class="wp-block-list">
<li><em>Example</em>: Preparing OCR-extracted text from a scanned academic thesis for further semantic analysis by an LLM.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Comparison with Traditional OCR</h4>



<p class="wp-block-paragraph"><br>Traditional OCR engines, such as Tesseract, rely on static models and predefined patterns, which struggle with non-standard or complex layouts. In contrast, LLMWhisperer uses advanced algorithms to adapt dynamically, preserving document context while ensuring accuracy in text parsing.</p>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Real-World Applications</h4>



<p class="wp-block-paragraph"></p>



<ol class="wp-block-list">
<li><strong>Form-Based Data Parsing</strong><br>LLMWhisperer identifies checkboxes, radio buttons, and handwritten notes in scanned forms, converting them into structured data formats.<br><em><strong>Example</strong></em>: Digitizing a tax form by extracting selected filing statuses, amounts, and notes.</li>



<li><strong>Historical Document Processing</strong><br>It processes low-quality historical documents like manuals or old reports, cleaning up noisy scans and extracting text accurately.<br><em><strong>Example</strong></em>: Extracting structured text from a scanned page of the Apollo Space Mission Manual.</li>



<li><strong>Global Invoice Management</strong><br>LLMWhisperer handles multi-language invoices with varying layouts, extracting consistent data fields for payment processing.<br><em><strong>Example</strong></em>: Parsing invoices from suppliers across different countries and consolidating the data for analytics.</li>
</ol>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Why choose LLMWhisperer for the document reader API?</h2>



<p class="wp-block-paragraph"></p>



<ol class="wp-block-list">
<li><strong>Adaptability Across Document Types</strong><br>LLMWhisperer handles printed, handwritten, and mixed-layout documents, making it ideal for businesses that process diverse data sources.</li>



<li><strong>Ease of Integration</strong><br>Its API-based architecture allows seamless integration into existing systems, ensuring smooth data processing pipelines without overhauling infrastructure.</li>



<li><strong>Foundational Parsing for LLMs</strong><br>By enhancing and structuring OCR outputs, LLMWhisperer maximizes the potential of LLMs, ensuring accurate and context-aware insights from complex document data.</li>
</ol>



<p class="wp-block-paragraph" id="intro">With its robust capabilities, LLMWhisperer transforms how businesses process scanned documents and prepare data for AI-driven applications, delivering efficiency, accuracy, and scalability.</p>



<p class="wp-block-paragraph"></p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="571" src="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-document-reader-scanner-api-1024x571.png" alt="" class="wp-image-13085" style="width:780px;height:auto" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-document-reader-scanner-api-1024x571.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-document-reader-scanner-api-300x167.png 300w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-document-reader-scanner-api-768x428.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-document-reader-scanner-api-1536x856.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-document-reader-scanner-api-2048x1142.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Pre-Processing with LLMWhisperer: How It Helps Scanned PDF/Image OCR</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Pre-processing is a critical step in ensuring accurate and efficient Optical Character Recognition (OCR) for scanned PDFs and image-based documents. LLMWhisperer stands out as a powerful text parser by employing advanced pre-processing techniques to address common challenges such as noisy scans, complex layouts, and unstructured formats. These enhancements not only improve OCR accuracy but also prepare the extracted data for seamless downstream analysis.</p>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Key Pre-Processing Techniques in LLMWhisperer</h4>



<p class="wp-block-paragraph"></p>



<ol class="wp-block-list">
<li><strong>Noise Removal</strong><br>Noise, such as smudges, watermarks, stains, or digital artifacts, can significantly impact OCR performance. LLMWhisperer’s noise removal techniques enhance document clarity, ensuring that irrelevant marks do not interfere with text recognition.</li>
</ol>



<ul class="wp-block-list">
<li><strong>How It Works</strong>:
<ul class="wp-block-list">
<li>Filters out unwanted artifacts, such as background patterns or faint text shadows.</li>



<li>Enhances text contrast for better recognition of faint or degraded text.</li>
</ul>
</li>
</ul>



<ol start="2" class="wp-block-list">
<li><strong>Layout Preservation</strong><br>Many scanned PDFs and image-based documents have complex layouts, including multi-column text, tables, or overlapping sections. LLMWhisperer preserves the original structure of these documents during pre-processing, enabling accurate text parsing without distorting the context or relationships between data points.</li>
</ol>



<ul class="wp-block-list">
<li><strong>How It Works</strong>:
<ul class="wp-block-list">
<li>Recognizes document zones (headers, footers, tables, and text blocks) and maintains their spatial arrangement.</li>



<li>Prepares tabular data and column-based layouts for structured extraction.</li>
</ul>
</li>
</ul>



<ol start="3" class="wp-block-list">
<li><strong>Format Optimization</strong><br>Scanned documents often suffer from issues like skewed alignment, uneven text spacing, or non-standard formats. LLMWhisperer applies format optimization techniques to align and structure the content for maximum OCR accuracy.</li>
</ol>



<ul class="wp-block-list">
<li><strong>How It Works</strong>:
<ul class="wp-block-list">
<li><strong>De-skewing</strong>: Corrects tilted or misaligned pages, ensuring text is horizontal for proper segmentation.</li>



<li><strong>Standardization</strong>: Adjusts inconsistent spacing, line breaks, and margins to create a uniform layout.</li>



<li><strong>Pre-OCR Splitting</strong>: Breaks large blocks of text into manageable segments for more precise recognition.</li>
</ul>
</li>
</ul>



<blockquote class="wp-block-quote has-text-align-center is-layout-flow wp-block-quote-is-layout-flow">
<h2 class="wp-block-heading alignwide has-text-align-center">Live coding session on data extraction from a scanned PDF form with LLMWhisperer</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">You can also watch this live coding webinar where we explore all the challenges involved in scanned PDF parsing. We’ll also compare the capabilities of different PDF parsing tools to help you understand their strengths and limitations.<br><br></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Using LLMWhisperer to Extract Data from Handwritten Forms" width="1170" height="658" src="https://www.youtube.com/embed/L6Q9jvmilAQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
</blockquote>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Benefits of LLMWhisperer’s Pre-Processing Techniques</h2>



<p class="wp-block-paragraph"></p>



<ol class="wp-block-list">
<li><strong>Enhanced OCR Accuracy</strong><br>Pre-processing directly improves the quality of the input data, enabling OCR engines to identify characters, words, and layouts more precisely.</li>
</ol>



<ul class="wp-block-list">
<li><strong>Impact</strong>: Reduces errors caused by poor scan quality, such as misreading &#8220;O&#8221; as &#8220;0&#8221; or skipping faded text.</li>
</ul>



<ol start="2" class="wp-block-list">
<li><strong>Preservation of Document Context</strong><br>Maintaining the document’s original layout ensures that the relationships between data points remain intact, which is crucial for downstream analysis.</li>
</ol>



<ul class="wp-block-list">
<li><strong>Impact</strong>: Data extracted from tables, forms, and columns is contextually accurate and ready for further processing.</li>
</ul>



<ol start="3" class="wp-block-list">
<li><strong>Support for Diverse Document Types</strong><br>LLMWhisperer’s pre-processing techniques work seamlessly across a variety of documents, including handwritten forms, scanned PDFs, and image-based text.</li>
</ol>



<ul class="wp-block-list">
<li><strong>Impact</strong>: Expands the range of documents that businesses can process automatically, minimizing the need for manual intervention.</li>
</ul>



<ol start="4" class="wp-block-list">
<li><strong>Improved Downstream Analysis</strong><br>Pre-processed and structured data ensures smooth integration with analytics platforms, databases, or AI models, enabling real-time insights and decision-making.</li>
</ol>



<ul class="wp-block-list">
<li><strong>Impact</strong>: Eliminates the need for manual corrections or additional formatting steps.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Real-World Demonstration: Scanned Document Processing</h4>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Let’s take the example of processing a scanned document, such as a page from the <em>Apollo Space Mission Manual</em>. Using LLMWhisperer, this process becomes seamless and efficient:</p>



<ol class="wp-block-list">
<li><strong>Noise Removal</strong><br>LLMWhisperer eliminates age-related degradation like faded text, stains, or handwritten annotations in the margins, ensuring the document is clean and readable for OCR extraction.</li>



<li><strong>Layout Preservation</strong><br>The structured format of the manual, including diagrams, tables, and text, is preserved. This ensures that critical information such as captions, headers, and content flows remain in their original context.</li>
</ol>



<p class="wp-block-paragraph"><strong>Format Optimization</strong><br>Any misaligned text or uneven spacing caused by outdated scanning methods is corrected. This results in a clear, professionally aligned document ready for accurate data parsing.</p>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Why LLMWhisperer’s Pre-Processing Is Essential</h4>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">LLMWhisperer’s robust pre-processing ensures that OCR systems perform optimally, even under challenging conditions like noisy, low-quality scans or complex layouts. By preserving the integrity of the document while enhancing its quality, LLMWhisperer enables businesses to unlock valuable insights from scanned PDFs and image-based text with unparalleled accuracy and efficiency.</p>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Two Practical Examples Using LLMWhisperer</h4>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">LLMWhisperer is a powerful tool for extracting text and structured data from scanned documents and images. Below, we showcase two practical examples to demonstrate its capabilities:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="862" height="1024" src="https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-2-862x1024.png" alt="" class="wp-image-13081" style="width:517px;height:auto" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-2-862x1024.png 862w, https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-2-253x300.png 253w, https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-2-768x912.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-2-1293x1536.png 1293w, https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-2.png 1374w" sizes="(max-width: 862px) 100vw, 862px" /></figure>
</div>


<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Example 1: Using LLMWhisperer Playground to Extract Text from the Apollo Space Mission Manual</strong></p>



<p class="wp-block-paragraph">The <em>Apollo Space Mission Manual</em> is a historical document with a mix of structured tables, illustrations, and descriptive text. By using the <strong>LLMWhisperer Playground</strong>, we can see how effectively it processes such a complex document.</p>



<p class="wp-block-paragraph"><strong>Step-by-Step Process</strong></p>



<ol class="wp-block-list">
<li><strong>Visit the Playground</strong><br>Go to the <a href="https://pg.llmwhisperer.unstract.com/">LLMWhisperer Playground</a>.</li>



<li><strong>Upload the Document</strong><br>Drag and drop a scanned <span style="box-sizing: border-box; margin: 0px; padding: 0px;"><em>Apollo Space Mission Manual</em>&nbsp;page&nbsp;</span>or upload the file manually.</li>



<li><strong>Initiate Processing</strong><br>Once uploaded, click the <strong>Process Document</strong> button. LLMWhisperer begins analyzing the document.</li>



<li><strong>Observe the Magic</strong><br>In just seconds, the extracted text and data appear on your screen.
<ul class="wp-block-list">
<li><strong>Preserved Layout</strong>: LLMWhisperer retains the document’s original structure, keeping sections like headers, tables, and diagrams intact.</li>



<li><strong>Clean Text Extraction</strong>: Even faded or poorly scanned text is accurately recognized and digitized.</li>



<li><strong>Tables and Diagrams</strong>: Complex tables are extracted precisely, with rows and columns preserved in a structured format, ready for downstream processing.</li>
</ul>
</li>
</ol>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="596" src="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-playground-1024x596.png" alt="" class="wp-image-13079" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-playground-1024x596.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-playground-300x175.png 300w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-playground-768x447.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-playground-1536x894.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-playground-2048x1192.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Benefits Demonstrated</strong></p>



<ul class="wp-block-list">
<li>Effortlessly handles scanned documents with mixed content.</li>



<li>Ensures no loss of context or structure, making the document ready for archival or analysis.</li>
</ul>



<p class="wp-block-paragraph">Whether digitizing scanned data or processing technical manuals, LLMWhisperer Playground shows how easily it bridges the gap between scanned documents and machine-readable data.</p>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h2 class="wp-block-heading alignwide has-text-align-center">Get started with LLMWhisperer: Best Document OCR API for AI Document Worklfows</h2>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Welcome to LLMWhisperer!" width="1170" height="658" src="https://www.youtube.com/embed/b-hL_ALpI5k?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
</blockquote>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Example 2: Using LLMWhisperer Document OCR API in Postman to Extract Text from a Handwritten Scanned Image (PNG)</strong></p>



<p class="wp-block-paragraph">For this example, let’s demonstrate the capabilities of the LLMWhisperer API to process a handwritten scanned image (e.g., a PNG file of notes or forms).</p>



<p class="wp-block-paragraph"></p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="862" height="1024" src="https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-3-862x1024.png" alt="" class="wp-image-13083" style="width:616px;height:auto" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-3-862x1024.png 862w, https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-3-253x300.png 253w, https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-3-768x912.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-3-1293x1536.png 1293w, https://staging.unstract.com/wp-content/uploads/2024/12/pdf-ocr-document-ocr-api-header-pdf-test-3.png 1374w" sizes="(max-width: 862px) 100vw, 862px" /></figure>
</div>


<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Step-by-Step Workflow Using Postman</strong></p>



<ol class="wp-block-list">
<li><strong>Sign Up and Get Document OCR API Key</strong>
<ul class="wp-block-list">
<li>Visit the LLMWhisperer signup page and create an account.</li>



<li>Retrieve your API key from the account dashboard.</li>
</ul>
</li>



<li><strong>POST Request to Process the Document</strong>
<ul class="wp-block-list">
<li>Open Postman and create a new <strong><code>POST</code></strong> request.</li>



<li>Use the /whisper endpoint: <a href="https://llmwhisperer-api.us-central.unstract.com/api/v2/whisper">https://llmwhisperer-api.us-central.unstract.com/api/v2/whisper</a></li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph"><strong>Headers</strong>:</p>



<ul class="wp-block-list">
<li><code>Key: unstract-key</code></li>



<li><code>Value: &lt;Your API Key&gt;</code></li>
</ul>



<p class="wp-block-paragraph"><strong>Body</strong>:</p>



<ul class="wp-block-list">
<li>Select <code>form-data.</code></li>



<li>Add the key files, set its type to <code>File</code>, and upload the handwritten scanned image (PNG).</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="704" src="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-postman-1-1024x704.png" alt="" class="wp-image-13076" style="width:861px;height:auto" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-postman-1-1024x704.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-postman-1-300x206.png 300w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-postman-1-768x528.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-postman-1-1536x1056.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-postman-1-2048x1407.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em>LLMWhisperer Document OCR API Request</em></figcaption></figure>
</div>


<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Example cURL Command</strong>:</p>



<p class="wp-block-paragraph"></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>curl -X POST &#39;https://llmwhisperer-api.us-central.unstract.com/api/v2/whisper&#39; \

-H &#39;unstract-key: &lt;Your API Key&gt;&#39; \

-F &#39;files=@handwritten_sample.png&#39;</code></pre></div>



<ul class="wp-block-list">
<li>Submit the request, and you’ll receive a response containing the <code>whisper_hash</code>, which you’ll use to retrieve the results.</li>
</ul>



<ol start="2" class="wp-block-list">
<li><strong>Check Conversion Status</strong>
<ul class="wp-block-list">
<li>Create a <strong><code>GET</code></strong> request using the <code>/whisper-status</code> endpoint to check if processing is complete:<br>https://llmwhisperer-api.us-central.unstract.com/api/v2/whisper-status</li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph"><strong>Example cURL Command</strong>:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>curl -X GET &#39;https://llmwhisperer-api.us-central.unstract.com/api/v2/whisper-status&#39; \

-H &#39;unstract-key: &lt;Your API Key&gt;&#39;</code></pre></div>



<ul class="wp-block-list">
<li>The response will indicate the status (<code>processing</code> or <code>completed</code>).</li>
</ul>



<ol start="3" class="wp-block-list">
<li><strong>Retrieve the Extracted Text</strong>
<ul class="wp-block-list">
<li>Once processing is complete, use the <code>/whisper-retrieve</code> endpoint to fetch the extracted text: https://llmwhisperer-api.us-central.unstract.com/api/v2/whisper-retrieve</li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph"><strong>GET Request Parameters</strong>:</p>



<ul class="wp-block-list">
<li>Add <code>whisper_hash</code> as a query parameter.</li>



<li>Use <code>text_only=true</code> for a clean, nearly formatted text output.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="704" src="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-postman-1024x704.png" alt="" class="wp-image-13078" style="width:975px;height:auto" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-postman-1024x704.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-postman-300x206.png 300w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-postman-768x528.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-postman-1536x1056.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-ocr-API-postman-2048x1407.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><em>LLMWhisperer Document OCR API Response</em></figcaption></figure>
</div>


<p class="wp-block-paragraph"><strong>Example cURL Command</strong>:</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-git" data-lang="Git"><code>curl -X GET &#39;https://llmwhisperer-api.us-central.unstract.com/api/v2/whisper-retrieve?whisper_hash=&lt;whisper_hash&gt;&text_only=true&#39; \

-H &#39;unstract-key: &lt;Your API Key&gt;&#39;</code></pre></div>



<ul class="wp-block-list">
<li>The response will include an object containing the structured text extracted from the handwritten scanned image.</li>
</ul>



<p class="wp-block-paragraph"><strong>The outcome of the OCR extraction:</strong></p>



<pre class="wp-block-code"><code>                               EWD1200-0 

Only a matter of style? 

  For educational purposes we analyse the 
opening pages of an 11-page article that 
appeared in The American Mathematical 
Monthly, Volume 102 Number 2 / February 1995. 
We have added line numbers in the right 
margin. 
line 4: Since in this article, squares don't get 
alternating colours , it could be argued that 
the term " chessboard " is misplaced . 

line 4 : The introduction of the name " B " 
seems unnecessary : it is used - in the 
combination " the board B " - in the text 
for Figure 1 and in line 71 ; in both cases 
just " the board " would have done fine . 
In line 77 occurs the last use of B, 
viz . in " X CB " , which is dubious since 
B was a board and not a    set ; in line 
77 . I would have preferred " Given a set X &#91;X] 
of cells ". 
line 7/8: The first move, being a move 
like any other , does not deserve a separate 
discription . The term " step " is redundant . 
line 8: Why not "a move consists of"? 
line 10/11: At this stage the italics are 
puzzling, since a move is possible if, 
&lt;&lt;&lt;</code></pre>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Key Highlights of the PDF OCR API</h4>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li>Accurately extracts handwritten content, even from noisy scans.</li>



<li>Outputs structured data that can be seamlessly integrated into your workflows.</li>
</ul>



<p class="wp-block-paragraph"><strong>LLMWhisperer Document OCR API: Final Thoughts</strong></p>



<p class="wp-block-paragraph">By showcasing these two practical examples, LLMWhisperer demonstrates its versatility in handling diverse document types, whether historical or handwritten. Its Playground provides an intuitive testing environment, while its API allows seamless integration into enterprise workflows. Together, these tools redefine how we process and extract value from scanned PDFs and images.</p>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h4 class="wp-block-heading has-text-align-left">PDF hell and practical RAG applications<br></h4>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Extracting text from PDFs for use in applications like Retrieval-Augmented Generation (RAG) and Natural Language Processing (NLP) is challenging due to their <a href="https://staging.unstract.com/blog/pdf-hell-and-practical-rag-applications/" title="fixed layout structure and lack of semantic organization">fixed layout structure and lack of semantic organization</a>.</p>



<p class="wp-block-paragraph">Learn how faithfully reproducing the structure of tables and other elements by preserving the original PDF layout is crucial for better performance in LLM and RAG applications.</p>



<p class="wp-block-paragraph"><a href="https://staging.unstract.com/blog/pdf-hell-and-practical-rag-applications/" title="Learn more →">Learn more →</a></p>
</blockquote>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Introduction to Unstract</h2>



<p class="wp-block-paragraph"><br><a href="https://staging.unstract.com/" target="_blank" rel="noopener" title="Unstract">Unstract</a> is a transformative platform designed to simplify the processing of unstructured documents by converting them into actionable, structured data. As a powerful companion to LLMWhisperer, Unstract leverages advanced AI and LLMs to refine and organize outputs from diverse document types such as invoices, tax forms, resumes, and handwritten notes. Its robust capabilities eliminate the complexities of manual data extraction, enabling seamless workflows across industries.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="120" height="120" src="https://staging.unstract.com/wp-content/uploads/2024/09/gitlogo-1.png" alt="" class="wp-image-12263" style="width:75px;height:auto" srcset="https://staging.unstract.com/wp-content/uploads/2024/09/gitlogo-1.png 120w, https://staging.unstract.com/wp-content/uploads/2024/09/gitlogo-1-79x79.png 79w" sizes="(max-width: 120px) 100vw, 120px" /></figure>



<p class="wp-block-paragraph">Unstract is an open-source no-code LLM platform to launch APIs and ETL pipelines to structure unstructured documents. <a href="https://github.com/Zipstack/unstract" target="_blank" rel="noopener" title="Get started with this quick guide.">Get started with this quick guide.</a></p>
</blockquote>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">How Unstract Complements LLMWhisperer</h4>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">LLMWhisperer excels at extracting text and context from scanned PDFs, images, and other unstructured files. Unstract builds upon this foundation by further structuring and enhancing the extracted data, ensuring it is ready for use in downstream applications such as analytics, compliance, or CRM integration.</p>



<ul class="wp-block-list">
<li><strong>Seamless Integration</strong>: Outputs from LLMWhisperer are fed into Unstract for advanced processing, including context-aware data structuring and organization.</li>



<li><strong>AI-Driven Refinement</strong>: While LLMWhisperer parses data, Unstract employs AI and LLMs to interpret relationships between document elements, preserving context and ensuring accuracy.</li>



<li><strong>Adaptability to Document Variability</strong>: Unstract accommodates various layouts, designs, and content formats without requiring constant reconfiguration, making it highly efficient for dynamic workflows.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="810" src="https://staging.unstract.com/wp-content/uploads/2024/11/document-ocr-healthcare-data-extraction-1024x810.png" alt="" class="wp-image-12925" style="width:710px;height:auto" srcset="https://staging.unstract.com/wp-content/uploads/2024/11/document-ocr-healthcare-data-extraction-1024x810.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/11/document-ocr-healthcare-data-extraction-300x237.png 300w, https://staging.unstract.com/wp-content/uploads/2024/11/document-ocr-healthcare-data-extraction-768x607.png 768w, https://staging.unstract.com/wp-content/uploads/2024/11/document-ocr-healthcare-data-extraction.png 1128w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Key Features of Unstract</h4>



<p class="wp-block-paragraph"></p>



<ol class="wp-block-list">
<li><strong>Dynamic Data Structuring</strong>
<ul class="wp-block-list">
<li>Unstract converts unstructured data, such as raw outputs from LLMWhisperer, into structured formats like JSON, CSV, or databases.</li>



<li>It uses machine learning algorithms to detect patterns, relationships, and hierarchies within documents.</li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph"><em>Example</em>: For a scanned tax form, Unstract organizes extracted fields such as &#8220;Employer Name,&#8221; &#8220;Tax Year,&#8221; and &#8220;Form ID&#8221; into structured JSON, ready for integration with financial systems.</p>



<ol start="2" class="wp-block-list">
<li><strong>No Need for Constant Retraining</strong>
<ul class="wp-block-list">
<li>Unlike traditional systems, Unstract adapts to changes in document formats and layouts without requiring retraining or remodelling.</li>



<li>This flexibility reduces maintenance overhead and ensures consistent performance even as documents evolve.</li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph"><em>Example</em>: A recruitment agency can process resumes with varying designs and fonts without modifying the tool each time a new style is encountered.</p>



<ol start="3" class="wp-block-list">
<li><strong>Multi-Format Document Support</strong>
<ul class="wp-block-list">
<li>Unstract handles outputs from diverse sources, including handwritten forms, scanned PDFs, and image-based data.</li>



<li>It manages complex layouts like multi-column formats, tables, or embedded diagrams.</li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph"><em>Example</em>: In an insurance claims process, Unstract can handle scanned accident reports, structured forms, and handwritten notes simultaneously, delivering consistent results.</p>



<ol start="4" class="wp-block-list">
<li><strong>AI-Enhanced Context Understanding</strong>
<ul class="wp-block-list">
<li>Unstract uses AI to understand the context of the extracted data, ensuring that important relationships—like linking totals to invoice numbers or matching candidates’ skills to job descriptions—are preserved.</li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">The AI/LLM Advantage for Document Processing</h4>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Unstract integrates with powerful AI/LLMs to enhance its processing capabilities:</p>



<ul class="wp-block-list">
<li><strong>Contextual Awareness</strong>: AI algorithms allow Unstract to interpret nuanced relationships between extracted fields, ensuring greater accuracy.</li>



<li><strong>Scalable Automation</strong>: Whether processing thousands of resumes or extracting data from a batch of handwritten tax forms, Unstract scales effortlessly to meet enterprise demands.</li>



<li><strong>Minimal Human Intervention</strong>: With intelligent pre-configuration and adaptability, Unstract reduces the need for manual oversight, improving operational efficiency.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Why Choose Unstract for Document Processing Automation?</h4>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li><strong>Efficiency and Speed</strong>: Automates time-consuming tasks like manual data entry and document parsing, delivering results in minutes.</li>



<li><strong>Reliability Across Formats</strong>: Adapts to document changes without requiring constant reprogramming or updates.</li>



<li><strong>Seamless Workflow Integration</strong>: Outputs can be directly integrated into downstream systems, such as ERPs, CRMs, or analytics platforms.</li>
</ul>



<p class="wp-block-paragraph">By complementing the text parsing capabilities of LLMWhisperer with advanced data structuring powered by AI, Unstract transforms the way organizations handle unstructured data. Its adaptability and intelligence make it an indispensable tool for any business seeking to optimize document processing workflows.</p>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Data Extraction from a Scanned Handwritten Tax Form Using Unstract</h4>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Extracting structured data from scanned handwritten tax forms is a crucial step in automating tax reporting and compliance workflows. Using Unstract’s Prompt Studio, organizations can tailor prompts to extract critical information such as the taxpayer’s name, total assets, and employer details. Here’s a detailed guide to setting up Unstract to process a scanned handwritten tax form, complete with API integration via Postman.</p>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Step 1: Setting Up the Project in Prompt Studio</h4>



<p class="wp-block-paragraph"></p>



<ol class="wp-block-list">
<li><strong>Access Prompt Studio</strong>
<ul class="wp-block-list">
<li>Log into your Unstract account and navigate to the <strong>Prompt Studio</strong> page from the dashboard.</li>



<li>Click <strong>New Project</strong> to create a project tailored for tax form processing.</li>



<li>Provide details:
<ul class="wp-block-list">
<li><strong>Tool Name</strong>: &#8220;Tax Form OCR Tool&#8221;</li>



<li><strong>Description</strong>: &#8220;Extracts critical fields such as taxpayer details and financial information from tax forms.&#8221;</li>
</ul>
</li>
</ul>
</li>
</ol>



<ol start="2" class="wp-block-list">
<li><strong>Upload the Handwritten Tax Form</strong>
<ul class="wp-block-list">
<li>Go to the <strong>Manage Documents</strong> section and click <strong>Upload Files</strong>.</li>



<li>Upload the scanned tax form PDF provided.</li>
</ul>
</li>



<li><strong>Write Tailored Prompts for Key Data Fields</strong>: Craft prompts to extract specific fields from the tax form. Here are examples:</li>
</ol>



<p class="wp-block-paragraph">Set the output type as<strong> ‘json’</strong>.</p>



<ul class="wp-block-list">
<li><strong>Field Name</strong>: <code>contact_info</code>
<ul class="wp-block-list">
<li><strong>Prompt Text</strong>: <em>&#8220;Extract the contact details from the following text. Results should contain the following fields:&nbsp; phone_number and address.”</em></li>
</ul>
</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="566" src="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-prompt-studio-1024x566.png" alt="" class="wp-image-13075" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-prompt-studio-1024x566.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-prompt-studio-300x166.png 300w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-prompt-studio-768x424.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-prompt-studio-1536x848.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-prompt-studio-2048x1131.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Below is the output:</strong><br></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="JSON"><code>{

    &quot;address&quot;: &quot;52, Beach View Avenue, FL 63504&quot;,

    &quot;phone_number&quot;: &quot;011926580&quot;

}</code></pre></div>



<p class="wp-block-paragraph">We can add more prompts per the requirements to extract the desired info.</p>



<p class="wp-block-paragraph">Let’s extract the Tax Details.</p>



<ul class="wp-block-list">
<li><strong>Field Name</strong>: <code>tax_details</code>
<ul class="wp-block-list">
<li><strong>Prompt Text</strong>: <em>&#8221; Extract the tax details from the following text. Results should contain the following fields:&nbsp; plan_type, return_type, all eins with type, and bussiness_code.&#8221;</em></li>
</ul>
</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="566" src="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-1024x566.png" alt="" class="wp-image-13072" style="width:923px;height:auto" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-1024x566.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-300x166.png 300w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-768x424.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-1536x848.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-2048x1131.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Below is the output:</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="JSON"><code>{
  &quot;all_eins_with_type&quot;: [
    {
      &quot;Employer Identification Number (EIN)&quot;: 567325752
    },
    {
      &quot;Administrator&#39;s EIN&quot;: 778853
    }
  ],
  &quot;bussiness_code&quot;: 82856,
  &quot;plan_type&quot;: &quot;Annual Return Plan&quot;,
  &quot;return_type&quot;: &quot;the first return filed for the plan&quot;
}</code></pre></div>



<ol start="4" class="wp-block-list">
<li><strong>Run and Test Prompts</strong>
<ul class="wp-block-list">
<li>After creating the prompts, click <strong>Run</strong> to execute them and check the extracted data.</li>



<li>Verify the output in the <strong>Combined Output</strong> tab, which displays the results in structured JSON format.</li>
</ul>
</li>
</ol>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="566" src="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-prompt-studio-1024x566.png" alt="" class="wp-image-13074" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-prompt-studio-1024x566.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-prompt-studio-300x166.png 300w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-prompt-studio-768x424.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-prompt-studio-1536x848.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-prompt-studio-2048x1131.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Step 2: Export and Deploy the Tool as an API</h4>



<p class="wp-block-paragraph"></p>



<ol class="wp-block-list">
<li><strong>Export as Tool</strong>
<ul class="wp-block-list">
<li>Once the prompts have been validated, click on <strong>Export as Tool</strong> to convert the project into a usable tool.</li>



<li>Assign a name like &#8220;Handwritten Tax Form Parser API.&#8221;</li>
</ul>
</li>



<li><strong>Create a Workflow</strong>
<ul class="wp-block-list">
<li>Navigate to <strong>Build → Workflows</strong> and click <strong>New Workflow</strong>.</li>



<li>Drag and drop the exported tool into the workflow area.</li>



<li>Define:
<ul class="wp-block-list">
<li><strong>Input</strong>: Accept file uploads (PDFs).</li>



<li><strong>Output</strong>: Return extracted data in JSON format.</li>
</ul>
</li>
</ul>
</li>



<li><strong>Test the Workflow</strong>
<ul class="wp-block-list">
<li>Run the workflow</li>



<li>Upload the document</li>



<li>Click on continue</li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph">You will see the output on the screen of the loaded tool and the result of the tool.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="566" src="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-workflow-1024x566.png" alt="" class="wp-image-13073" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-workflow-1024x566.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-workflow-300x166.png 300w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-workflow-768x424.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-workflow-1536x848.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-deploy-API-workflow-2048x1131.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"></p>



<ol start="4" class="wp-block-list">
<li><strong>Deploy as an API</strong>
<ul class="wp-block-list">
<li>Go to <strong>Manage → API Deployments</strong> and click <strong>+ API Deployment</strong>.</li>



<li>Provide a name, such as &#8220;Tax Form Parsing API.&#8221;</li>



<li>Retrieve the API URL and generate an API key for integration.</li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Step 3: Testing the API via Postman</h4>



<p class="wp-block-paragraph"></p>



<ol class="wp-block-list">
<li><strong>Configure POST Request</strong>
<ul class="wp-block-list">
<li>Open Postman and create a <strong>POST Request</strong>.</li>



<li><strong>API URL</strong>: Paste the deployment URL from Unstract.</li>



<li><strong>Authorization</strong>:
<ul class="wp-block-list">
<li>Go to the <strong>Headers</strong> tab.</li>



<li>Add:
<ul class="wp-block-list">
<li><strong>Key</strong>: <code>Authorization</code></li>



<li><strong>Value</strong>: <code>unstract-key YOUR_API_KEY</code> (replace with the generated API key).</li>
</ul>
</li>
</ul>
</li>



<li><strong>Body</strong>:
<ul class="wp-block-list">
<li>Switch to the <strong>Body</strong> tab.</li>



<li>Select form-data format.</li>



<li>Add:
<ul class="wp-block-list">
<li><strong>Key</strong>: files</li>



<li><strong>Type</strong>: File</li>



<li><strong>Value</strong>: Upload the scanned tax form.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>



<li><strong>Send the Request</strong>
<ul class="wp-block-list">
<li>Click <strong>Send</strong>.</li>



<li>Below is the output</li>
</ul>
</li>
</ol>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="566" src="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-postman-1024x566.png" alt="" class="wp-image-13071" srcset="https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-postman-1024x566.png 1024w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-postman-300x166.png 300w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-postman-768x424.png 768w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-postman-1536x848.png 1536w, https://staging.unstract.com/wp-content/uploads/2024/12/llmwhisperer-pdf-document-reader-scanner-API-tax-form-pdf-extraction-postman-2048x1131.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ol class="wp-block-list">
<li><strong>View JSON Output</strong></li>
</ol>



<p class="wp-block-paragraph">Below is the JSON output of the uploaded handwritten tax form.</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="JSON"><code>{
  &quot;status&quot;: &quot;COMPLETED&quot;,
  &quot;message&quot;: [
    {
      &quot;file&quot;: &quot;scanned-form-pdf-ocr.pdf&quot;,
      &quot;status&quot;: &quot;Success&quot;,
      &quot;result&quot;: {
        &quot;output&quot;: {
          &quot;assets_liabilities&quot;: {
            &quot;beginning_of_year&quot;: {
              &quot;assets&quot;: 25000,
              &quot;liabilities&quot;: 3000
            },
            &quot;end_of_year&quot;: {
              &quot;assets&quot;: 20000,
              &quot;liabilities&quot;: 6000
            }
          },
          &quot;contact_indo&quot;: {
            &quot;address&quot;: &quot;52 Beach View Avenue, FL 63504&quot;,
            &quot;phone_number&quot;: &quot;011926580&quot;
          },
          &quot;dates&quot;: {
            &quot;calendar_plan_year&quot;: &quot;2023&quot;,
            &quot;date_plan_first_became_effective&quot;: &quot;2022-05-06&quot;,
            &quot;fiscal_plan_year_beginning&quot;: &quot;2022-01-03&quot;,
            &quot;fiscal_plan_year_ending&quot;: &quot;2025-01-03&quot;
          },
          &quot;employer_name&quot;: &quot;Fidelity Finance Corporation&quot;,
          &quot;plan_no&quot;: {
            &quot;three_digit_plan_number&quot;: &quot;956&quot;
          },
          &quot;tax_details&quot;: {
            &quot;all_eins_with_type&quot;: [
              {
                &quot;type&quot;: &quot;Employer Identification Number (EIN)&quot;,
                &quot;value&quot;: &quot;567325752&quot;
              },
              {
                &quot;type&quot;: &quot;Plan Administrator&#39;s EIN&quot;,
                &quot;value&quot;: &quot;778853&quot;
              }
            ],
            &quot;bussiness_code&quot;: &quot;This form is required to be filed under section 6058(a) of the Internal Revenue Code.&quot;,
            &quot;plan_type&quot;: &quot;Form Number: CA 05678&quot;,
            &quot;return_type&quot;: &quot;OMB No.: 1545-1610&quot;
          }
        }
      },
      &quot;metadata&quot;: {
        &quot;source_name&quot;: &quot;scanned-form-pdf-ocr.pdf&quot;,
        &quot;source_hash&quot;: &quot;9daafc8ba7e9a420a58636a2a0da949a4947563a41ca21e478b56025406301ac&quot;,
        &quot;organization_id&quot;: &quot;org_sNRwTENh7Kdm3EL8&quot;,
        &quot;workflow_id&quot;: &quot;b8cdac28-2843-4a43-bf90-d275d8c92080&quot;,
        &quot;execution_id&quot;: &quot;fba9d6f3-275c-47ea-86f8-e76888932939&quot;,
        &quot;total_elapsed_time&quot;: 73.48845,
        &quot;tool_metadata&quot;: [
          {
            &quot;tool_name&quot;: &quot;structure_tool&quot;,
            &quot;elapsed_time&quot;: 73.488446,
            &quot;output_type&quot;: &quot;JSON&quot;
          }
        ]
      }
    }
  ]
}</code></pre></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>Key Advantages of Using Unstract for Tax Form Processing</strong></p>



<ul class="wp-block-list">
<li><strong>Efficiency</strong>: Automates the extraction of detailed data fields without manual effort.</li>



<li><strong>Scalability</strong>: Handles multiple tax forms simultaneously with high accuracy.</li>



<li><strong>Integration Ready</strong>: Outputs are available in structured JSON and can be integrated with tax software or databases.</li>



<li><strong>Flexibility</strong>: Prompts can be customized for other financial forms or compliance documents.</li>
</ul>



<p class="wp-block-paragraph">By leveraging Unstract and its seamless integration with LLMWhisperer, organizations can extract meaningful data from even the most complex handwritten tax forms with unparalleled ease and precision.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">The synergy between <strong>LLMWhisperer</strong> and <strong>Unstract</strong> represents a groundbreaking approach to transforming unstructured documents into actionable data. LLMWhisperer, with its robust text parsing capabilities, serves as a reliable pre-processing layer, ensuring that even the most complex or degraded scanned documents are converted into structured text. </p>



<p class="wp-block-paragraph">Unstract complements this by leveraging advanced AI and LLM-powered workflows to extract, organize, and present the data in meaningful formats such as JSON, empowering businesses to streamline processes and make data-driven decisions.</p>



<p class="wp-block-paragraph">OCR APIs, such as those offered by LLMWhisperer, are revolutionizing how organizations handle document-heavy workflows.</p>



<p class="wp-block-paragraph">If you want to take LLMWhisperer OCR API for a test drive quickly, you can check out our free playground.</p>



<p class="wp-block-paragraph"></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://pg.llmwhisperer.unstract.com/">Try Playground with your docs</a></div>
</div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">By automating data extraction, these tools eliminate manual inefficiencies, reduce human error, and enhance scalability across industries. Whether dealing with handwritten tax forms, complex tables, or multi-language documents, the ability to seamlessly integrate OCR APIs into existing systems enables businesses to unlock the value hidden within their unstructured data repositories.</p>



<p class="wp-block-paragraph">In an era driven by digital transformation, the integration of solutions like LLMWhisperer and Unstract into business workflows underscores the potential of technology to simplify, accelerate, and optimize operations.</p>



<p class="wp-block-paragraph">Sign up for our free trial of Unstract if you want to try it out quickly. More information&nbsp;<a href="https://staging.unstract.com/" target="_blank" rel="noreferrer noopener">here</a><a href="https://staging.unstract.com/">.</a>&nbsp;</p>



<p class="wp-block-paragraph"></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://staging.unstract.com/start-for-free/">Sign up for a free trial</a></div>
</div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">As document processing demands grow, these tools pave the way for a future where unstructured data is no longer a bottleneck but a competitive advantage, enabling enterprises to operate with precision and agility in a fast-paced digital landscape.</p>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h2 class="wp-block-heading alignwide has-text-align-center">Get started with LLMWhisperer: Best OCR API for AI Document Worklfows</h2>



<p class="has-text-align-center wp-block-paragraph">Discover how LLMWhisperer, Unstract’s dedicated OCR API, prepares documents for peak LLM performance and sets standards for LLM-ready outputs.</p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Document extraction at the cutting edge with LLMs vs  LLMWhisperer" width="1170" height="658" src="https://www.youtube.com/embed/CLqkudVj-v0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
</blockquote>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-left wp-block-paragraph"><strong>Best Document OCR API: Related topics to explore</strong></p>



<ol class="wp-block-list">
<li><a href="https://staging.unstract.com/blog/extract-and-convert-pdf-to-excel-spreadsheet/" target="_blank" rel="noopener" title="Extract PDF Data to Excel Spreadsheet with Unstract">Extract PDF Data to Excel Spreadsheet with Unstract</a></li>



<li><a href="https://staging.unstract.com/blog/best-ocr-for-invoice-processing-invoice-ocr/" target="_blank" rel="noopener" title="Best OCR for extracting data from invoice">Document OCR API for extracting data from invoice</a></li>



<li><a href="https://staging.unstract.com/blog/best-ocr-for-bookkeeping/" target="_blank" rel="noopener" title="Best OCR for reading Bookkeeping documents">Best document OCR API for reading bookkeeping documents</a></li>



<li><a href="https://staging.unstract.com/blog/accounts-payable-ocr/" target="_blank" rel="noopener" title="Best OCR for accounts payable documents">Best document OCR API for accounts payable documents</a></li>
</ol>
</blockquote><p>The post <a href="https://staging.unstract.com/blog/llmwhisperer-document-scanner-ocr-api/">Guide to LLMWhisperer Document OCR API</a> first appeared on <a href="https://staging.unstract.com">Unstract.com</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://staging.unstract.com/blog/llmwhisperer-document-scanner-ocr-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://staging.unstract.com/wp-content/uploads/2024/10/llmwhisperer-vs-pdfplumber-pdf-data-extraction.mp4" length="3096695" type="video/mp4" />

			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: staging.unstract.com @ 2026-06-26 21:36:39 by W3 Total Cache
-->