A small OCR package
Project description
MiniOCR
A powerful and easy-to-use Python package for performing Optical Character Recognition (OCR) on images, PDF documents, and PowerPoint presentations using OpenAI's Vision API.
Features
- 🖼️ Multi-format support: Process images (PNG, JPG, JPEG, GIF, BMP, TIFF, WebP), PDF files, and PPTX presentations
- ⚡ Parallel processing: Concurrent processing of multiple pages/slides for improved performance
- 🌐 Cross-platform: Works on Windows, macOS, and Linux
- 📄 Smart content extraction: Extracts both text and images from PPTX files
- 🔄 Async support: Built with asyncio for efficient processing
- 📝 Markdown output: Converts documents to clean, structured markdown format
Installation
Prerequisites
For PDF processing, you'll need to install Poppler:
macOS:
brew install poppler
Ubuntu/Debian:
sudo apt-get install poppler-utils
Windows: Download and install from Poppler for Windows
Install MiniOCR
pip install miniocr
Or install from source:
git clone https://github.com/w95/miniocr.git
cd miniocr
pip install -e .
Quick Start
Setup
First, you'll need an OpenAI API key. Set it as an environment variable:
export OPENAI_API_KEY="your-api-key-here"
Or pass it directly when initializing the class.
Basic Usage
import asyncio
from miniocr import MiniOCR
async def main():
# Initialize with API key (or use environment variable)
ocr = MiniOCR(api_key="your-api-key-here")
# Process an image
result = await ocr.ocr("path/to/image.jpg")
print(result["content"])
# Process a PDF
result = await ocr.ocr("path/to/document.pdf")
print(f"Processed {result['pages']} pages")
print(result["content"])
# Process a PowerPoint presentation
result = await ocr.ocr("path/to/presentation.pptx")
print(result["content"])
if __name__ == "__main__":
asyncio.run(main())
Advanced Usage
import asyncio
from miniocr import MiniOCR
async def advanced_example():
ocr = MiniOCR()
# Process with custom settings
result = await ocr.ocr(
file_path="document.pdf",
model="gpt-4o", # Use different OpenAI model
concurrency=10, # Process up to 10 pages simultaneously
output_dir="./output", # Save markdown to file
cleanup=True # Clean up temporary files
)
print(f"File: {result['file_name']}")
print(f"Pages processed: {result['pages']}")
print(f"Content length: {len(result['content'])} characters")
asyncio.run(advanced_example())
Processing URLs
import asyncio
from miniocr import MiniOCR
async def process_url():
ocr = MiniOCR()
# Process a file from URL
result = await ocr.ocr("https://example.com/document.pdf")
print(result["content"])
asyncio.run(process_url())
API Reference
MiniOCR Class
__init__(api_key: str = None)
Initialize the MiniOCR instance.
Parameters:
api_key(str, optional): OpenAI API key. If not provided, will useOPENAI_API_KEYenvironment variable.
async ocr(file_path, model="gpt-4o-mini", concurrency=5, output_dir=None, cleanup=True)
Process a file and extract text using OCR.
Parameters:
file_path(str): Path or URL to the file to processmodel(str): OpenAI model to use (default: "gpt-4o-mini")concurrency(int): Number of concurrent API requests (default: 5)output_dir(str, optional): Directory to save markdown outputcleanup(bool): Whether to clean up temporary files (default: True)
Returns:
dict: Dictionary containing:content(str): Extracted text in markdown formatpages(int): Number of pages/slides processedfile_name(str): Name of the processed file
Supported file types:
- Images:
.png,.jpg,.jpeg,.gif,.bmp,.tiff,.webp - Documents:
.pdf - Presentations:
.pptx
Configuration
Environment Variables
OPENAI_API_KEY: Your OpenAI API key (required)
Model Options
MiniOCR supports various OpenAI models:
gpt-4o-mini(default, cost-effective)gpt-4o(higher accuracy)gpt-4-turbo
Output Format
MiniOCR converts documents to clean markdown with the following features:
- Tables: Converted to HTML format for better structure
- Checkboxes: Represented as ☐ (unchecked) and ☑ (checked)
- Special elements: Logos, watermarks, and page numbers are wrapped in brackets
- Charts and infographics: Interpreted and converted to markdown tables when applicable
Error Handling
import asyncio
from miniocr import MiniOCR
async def handle_errors():
ocr = MiniOCR()
try:
result = await ocr.ocr("nonexistent.pdf")
except ValueError as e:
print(f"Unsupported file type: {e}")
except Exception as e:
print(f"Processing error: {e}")
asyncio.run(handle_errors())
Performance Tips
- Adjust concurrency: Increase
concurrencyparameter for faster processing of multi-page documents - Use appropriate models:
gpt-4o-minifor cost-effectiveness,gpt-4ofor higher accuracy - Process in batches: For large numbers of files, process them in batches to avoid rate limits
- Local processing: Keep files local when possible to avoid download overhead
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Testing
Run the test suite:
pytest tests/
License
This project is licensed under the MIT License - see the LICENSE file for details.
Changelog
v0.0.1
- Initial release
- Support for images, PDF, and PPTX files
- Async processing with concurrency control
- Cross-platform compatibility
Support
If you encounter any issues or have questions, please open an issue on GitHub.
Acknowledgments
- Built with OpenAI's Vision API
- Uses pdf2image for PDF processing
- Uses python-pptx for PowerPoint processing
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file miniocr-0.0.2.tar.gz.
File metadata
- Download URL: miniocr-0.0.2.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9992dbd27568ffbb564eed442002aab519d9b49142ad4aefd5af5092068c805f
|
|
| MD5 |
39d0dd1d6f742ff8c8481a93f7fb8d13
|
|
| BLAKE2b-256 |
4c9c5671a119b962dccb885841a6099c55fe047b6f2055a45ba5cdc73bbfd07c
|
File details
Details for the file miniocr-0.0.2-py3-none-any.whl.
File metadata
- Download URL: miniocr-0.0.2-py3-none-any.whl
- Upload date:
- Size: 7.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a450f7c19a6fe3d089bb7a112f9328a551431d25b9865ee91dd539fdcc84c26
|
|
| MD5 |
901c609d76112ce4d4a3b167bbd497ba
|
|
| BLAKE2b-256 |
035393f3daa507e850eeb116f2ba1d2e605a00fa7559d081f050318e6707aba2
|