Rolling your own serverless OCR in 40 lines of code
103 points
4 days ago
| 16 comments
| christopherkrapu.com
| HN
eapriv
6 hours ago
[-]
Not sure what “your own” in the title is supposed to mean if you are running a model that you didn’t train using a framework that you didn’t write on a server that you don’t own.
reply
ddevnyc
4 hours ago
[-]
I think in this case "your own" means under your control, rather than a service or license you pay for. "your own" as in ownership of artefacts, not as in being the creator.
reply
ckrapu
6 hours ago
[-]
I originally tried to do this on my own server but my GPU is too old :(
reply
LoganDark
5 hours ago
[-]
Slammed an A380 in my old server that doesn't even have a GPU power connector & it works pretty well for stuff that will fit on it. They're only like, $150 brand new nowadays; could be a decent option.
reply
croes
2 hours ago
[-]
And then call it serverless
reply
self_awareness
3 hours ago
[-]
<insert a random "i made this" meme>
reply
voidUpdate
9 hours ago
[-]
Wouldn't "Serverless OCR" mean something like running tesseract locally on your computer, rather than creating an AI framework and running it on a server?
reply
cachius
9 hours ago
[-]
Serverless means spinning compute resources up on demand in the cloud vs. running a server permanently.
reply
dsr_
8 hours ago
[-]
~99.995% of the computing resources used on this are from somebody else's servers, running the LLM model.
reply
locknitpicker
5 hours ago
[-]
> Serverless means spinning compute resources up on demand in the cloud vs. running a server permanently.

Not quite. Serverless means you can run a server permanently, but you need pay someone else to manage the infrastructure for you.

reply
Stefan-H
2 hours ago
[-]
You might be conflating "cloud" with serverless. Serverless is where developers can focus on code, with little care of the infrastructure it runs on, and is pay-as-you-go.
reply
jwiz
3 hours ago
[-]
Depends if you mean "server" as in piece of metal (or vm), or as in "a daemon"
reply
turtlebits
3 hours ago
[-]
Close. It means there's no persistent infra charges and you're charged on use. You dont run anything permanently.
reply
dvfjsdhgfv
1 hour ago
[-]
It still doesn't capture the concept because, say, both AWS Lambda and EC2 can be run just for 5 minutes and only one of them is called serverless.
reply
normie3000
8 hours ago
[-]
Thanks for noting this - for a moment I was excited.
reply
xml
7 hours ago
[-]
You can still be excited! Recently, GLM-OCR was released, which is a relatively small OCR model (2.5 GB unquantized) that can run on CPU with good quality. I've been using it to digitize various hand-written notes and all my shopping receipts this week.

https://github.com/zai-org/GLM-OCR

(Shameless plug: I also maintain a simplified version of GLM-OCR without dependency on the transformers library, which makes it much easier to install: https://github.com/99991/Simple-GLM-OCR/)

reply
mrweasel
8 hours ago
[-]
When people mentions the number of lines of code, I've started to become suspicious. More often than not it's X number of lines, calling a massive library loading a large model, either locally or remote. We're just waiting for spinning up your entire company infrastructure in two lines of code, and then just being presented a Terraform shell script wrapper.

I do agree with the use of serverless though. I feel like we agree long ago that serverless just means that you're not spinning up a physical or virtual server, but simply ask some cloud infrastructure to run your code, without having to care about how it's run.

reply
goodmythical
5 hours ago
[-]
>implement RSA with this one simple line of python!
reply
locknitpicker
5 hours ago
[-]
> When people mentions the number of lines of code, I've started to become suspicious.

Low LoC count is a telltale sign that the project adds little to no value. It's a claim that the project integrates third party services and/or modules, and does a little plumbing to tie things together.

reply
esafak
4 hours ago
[-]
No, that would be "Running OCR locally..."

'Serverless' has become a term of art: https://en.wikipedia.org/wiki/Serverless_computing

reply
dvfjsdhgfv
1 hour ago
[-]
It's good they note explicitly:

> Serverless is a misnomer

reply
spockz
7 hours ago
[-]
Running it locally would typically be called “client(-)side”.

But this caught me for a bit as well. :-)

reply
ahartmetz
4 hours ago
[-]
That's the beauty of such stupid terms.

I use carless transportation (taxis).

reply
wolfi1
4 hours ago
[-]
taxis are cars, aren't they?
reply
BenjiWiebe
2 hours ago
[-]
Precisely. And serverless uses servers.
reply
kbyatnal
8 hours ago
[-]
Deepseek OCR is no longer state of the art. There are much better open source OCR models available now.

ocrarena.ai maintains a leaderboard, and a number of other open source options like dots [1] or olmOCR [2] rank higher.

[1] https://www.ocrarena.ai/compare/dots-ocr/deepseek-ocr

[2] https://www.ocrarena.ai/compare/olmocr-2/deepseek-ocr

reply
vovavili
58 minutes ago
[-]
A bit surprised to learn that Rednote maintains one of the leading open-source OCR models on the market, nice.
reply
ckrapu
8 hours ago
[-]
I wasn't aware of dots when I wrote the blog post. This is really good to know!! I would like to try again with some newer models.
reply
segmondy
7 hours ago
[-]
you are comparing to DeepSeek's old OCR, there's DeepSeek-OCR2 which btw is amazing from my experimentations. https://huggingface.co/deepseek-ai/DeepSeek-OCR-2
reply
tclancy
8 hours ago
[-]
The article mentions choosing the model for its ability to parse math well.
reply
brainless
7 hours ago
[-]
I am working on a client project, originally built using Google Vision APIs, and then I realized Tesseract is so good. Like really good. Also, if PDF text is available, then pdftotext tools are awesome.

My client's usecase was specific to scanning medical reports but since there are thousands of labs in India which have slightly different formats, I built an LLM agent which works only after the pdf/image to text process - to double check the medical terminology. That too, only if our code cannot already process each text line through simple string/regex matches.

There are perhaps extremely efficient tools to do many of the work where we throw the problem at LLMs.

reply
grimgrin
7 hours ago
[-]
hi. i run "ocr" with dmenu on linux, that triggers maim where i make a visual selection. a push notification shows the body (nice indicator of a whiff), but also it's on my clipboard

  #!/usr/bin/env bash

  # requires: tesseract-ocr imagemagick maim xsel

  IMG=$(mktemp)
  trap "rm $IMG*" EXIT

  # --nodrag means click 2x
  maim -s --nodrag --quality=10 $IMG.png

  # should increase detection rate
  mogrify -modulate 100,0 -resize 400% $IMG.png

  tesseract $IMG.png $IMG &>/dev/null
  cat $IMG.txt | xsel -bi
  notify-send "Text copied" "$(cat $IMG.txt)"

  exit
reply
jbs789
1 hour ago
[-]
Why "rolling"? Is this a reference to baking or what's the origin?
reply
Bishonen88
7 hours ago
[-]
Tried adding a receipt itemization feature into an app using OpenAI. It does 95% right but the remaining 5% are a mess. Mostly it mixes prices between items (Olive oil 0.99 while Banana 7.99). Is there some lightweight open source lib that can do this better?
reply
lkm0
7 hours ago
[-]
So I'm trying to OCR 1000s of pages of old french dictionaries from the 1700s, has anything popped up that doesn't cost an arm and a leg, and works pretty decently?
reply
grumbel
3 hours ago
[-]
I use Gemini for that. Split the PDF into 50 page chunks, throw it into aistudio and ask it to convert it. A couple of 1000 pages can be done with the free tier.
reply
ks2048
4 hours ago
[-]
reply
speedgoose
7 hours ago
[-]
Qwen3 VL.
reply
lkm0
6 hours ago
[-]
Thanks! I'll have a look
reply
coolness
9 hours ago
[-]
Slight tangent: i was wondering why DeepSeek would develop something like this. In the linked paper it says

> In production, DeepSeek-OCR can generate training data for LLMs/VLMs at a scale of 200k+ pages per day (a single A100-40G).

That... doesn't sound legal

reply
Zababa
7 hours ago
[-]
HathiTrust (https://en.wikipedia.org/wiki/HathiTrust) has 6.7 millions of volumes in the public domain, in PDF from what I understand. That would be around a billion pages, if we consider a volume is ~200 pages. 5000 days to go through that with an A100-40G at 200k pages a day. That is one way to interpret what they say as being legal. I don't have any information on what happens at DeepSeek so I can't say if it's true or not.
reply
bovinejoni
7 hours ago
[-]
That book is freely available from its author in pdf format already… but I guess it’s about the journey?
reply
velcrovan
7 hours ago
[-]
If I had to guess, I would say that this method might be applicable to other books besides the one featured in the post.
reply
ckrapu
6 hours ago
[-]
I wanted to let an LLM be able to grep and read through it.
reply
apwheele
8 hours ago
[-]
Question for the crowd -- with autoscaling, when a new pod is created it will still download the model right from huggingface?

I like to push everything into the image as much as I can. So in the image modal, I would run a command to trigger downloading the model. Then in the app just point to the locally downloaded model. So bigger image, but do not need to redownload on start up.

reply
sails
7 hours ago
[-]
Always wondered how auth validation works on these. Could I use your serverless ocr?
reply
ddtaylor
9 hours ago
[-]
How does this compare to Tesserect?
reply
newzino
7 hours ago
[-]
Different tools for different jobs. Tesseract is free, runs on CPU, and handles clean printed text well. For standard documents with simple layouts, it's hard to beat.

Where it falls apart is complex pages. Multi-column layouts, tables, equations, handwriting. Tesseract works line-by-line with no understanding of page structure, so a two-column paper gets garbled into interleaved text. VLM-based models like DeepSeek treat the page as an image and infer structure visually, which handles those cases much better.

For this specific use case (stats textbook with heavy math), Tesseract would really struggle with the equations. LaTeX-rendered math has unusual character spacing and stacked symbols that confuse traditional OCR engines. The author chose DeepSeek specifically because it outputs markdown with math notation intact.

The tradeoff is cost and infrastructure. Tesseract runs on your laptop for free. The author spent $2 on A100 GPU time for 600 pages. For a one-off textbook that's nothing, but at scale the difference between "free on CPU" and "$0.003/page on GPU" matters. Worth noting that newer alternatives like dots and olmOCR (mentioned upthread by kbyatnal) are also worth comparing if accuracy on complex layouts is the priority.

reply
fzysingularity
5 hours ago
[-]
The cold-boot time on this model can hardly be called “serverless”
reply
PlatoIsADisease
4 hours ago
[-]
Uh... So I've been telling AI to write a single page html/js OCR app. And I'll include the pdf I want as an attachment.

I have 4 of these now, some are better than others. But all worked great.

reply
zeroq
7 hours ago
[-]
tl'dr version:

  step 1 draw a circle
  step 2 import the rest of the owl
reply