Skip to content
Back to skills

Ocr

ASecurity

Recognize text in images: screenshots, scanned copy, receipts, etc. Use when text must be read out of pixels. For any PDF, start with the pdf Skill.

  • 179 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentspythonrustgoshellbashgitapi

Works with

  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned November 7, 2026

npx -y skills add AgentBull/ankole --skill ocr --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ocr?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ocr
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/agentbull-ocr/badge)](https://www.skillsdirectory.com/skills/agentbull-ocr)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ocr
description: "Recognize text in images: screenshots, scanned copy, receipts, etc. Use when text must be read out of pixels. For any PDF, start with the pdf Skill."
default_enabled: true
category: productivity
tags: [OCR, Documents, Images, PDF, Text-Extraction, Productivity]
version: 1.0.0
ankole-runtime: background_job
license: MIT
platforms: [linux]
metadata:
  implementation: rapidocr-openvino
  models: PP-OCRv6 medium det/rec
  upstream: https://github.com/RapidAI/RapidOCR
  related_skills: [pdf, docx, pptx, xlsx]
---

# OCR

This Skill reads **text out of pixels**: photos, screenshots, scans,
whiteboard shots, receipts, and PDF pages that carry no machine-readable
text. The Agent Computer image installs RapidOCR with the PP-OCRv6 medium
detection and recognition models on the OpenVINO CPU runtime, so recognition
runs locally: no network call, no API key, no cost per page.

Do not OCR a document that carries real text. Extraction is exact and
instant; recognition is approximate and costs seconds per page:

- DOCX, PPTX, XLSX: parse the real document tree with `python-docx`,
  `python-pptx`, or `openpyxl` — the `docx`, `pptx`, and `xlsx` Skills own
  those formats.
- A PDF with a text layer: `pdf2md in.pdf` extracts it exactly — the `pdf`
  Skill owns PDF reading.

## Images

An image is the plain case: no exact text source exists, so recognize
directly.

`ocr.py` selects the input type from the file-name suffix. Before the first
OCR call, make sure each image has a supported suffix. If an image has no
suffix, run `file --brief --mime-type -- INPUT`, copy it to a temporary path
with the suffix that matches the reported type (for example, `.jpg` for
`image/jpeg`), and pass the copy to `ocr.py`. Keep the original file unchanged.

```bash
python scripts/ocr.py photo.jpg receipt.png       # plain text per input
python scripts/ocr.py screenshot.png --json       # per-line text, score, quad box
```

Resolve `scripts/ocr.py` from this Skill's own directory.

## PDFs

The `pdf` Skill's Read section owns PDF triage: it decides which pages carry
a text layer and which need recognition. A PDF reaches this Skill in one of
three shapes:

- The whole file, classified `scanned` or `image_based`: recognize every
  page.
- A `pages_needing_ocr` list from a `mixed` file: pass it to `--pages`. The
  text pages are already extracted; do not touch them again.
- A bare, untriaged PDF: do the `pdf` Skill's Read triage first. A text
  layer beats recognition, and the triage names the pages that need it.

```bash
python scripts/ocr.py in.pdf                 # scanned file, every page
python scripts/ocr.py in.pdf --pages 2,6     # only the listed pages
```

## Cost And Flags

The models load once per process and take seconds; each page then costs
roughly one to two seconds of CPU. Pass every input in one invocation
instead of looping shell calls. The script accepts `--help` for full usage.

- `--pages` limits a PDF to the listed pages, as `2,5-7`.
- `--dpi` (default 200) sets PDF rasterization resolution. Use 300 when the
  source has small print; cost grows with the square of the value.
- `--json` adds a confidence score and a quad box per line.

## Read The Scores

Recognition output is a claim, not a fact. Before trusting a poor scan, run
`--json` and read the scores: a page whose lines sit under about 0.6 means a
bad rasterization, a skewed photo, or an unsupported script — not usable
text. Retry a photo after cropping or rotating with ImageMagick, and retry
small print at `--dpi 300`, before concluding the document is unreadable.

## Limits

- One model covers 50 languages: Simplified and Traditional Chinese, English,
  Japanese, and the Latin-script European languages. Korean, Arabic, Cyrillic,
  Thai, and other scripts are not covered. When a document falls outside
  coverage, do not deliver garbage text; tell the human:
  > "This document appears to be in [script], which the local OCR model does
  > not cover. I can work with a text-bearing version of the file, or you can
  > tell me how you want the original handled."
- Output is text lines in reading order with positions. Tables come back as
  positioned lines, not table markup; formulas and handwriting degrade.
- The Skill reads text out of a document. It does not write a text layer back
  into a PDF, so it cannot make a PDF searchable.

Files in this skill

  • SKILL.md4.3 KB
  • scripts/ocr.py5.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.