Skip to content

AzwadFawadHasan/ScreenshotScanner

Repository files navigation

ScreenshotScanner Logo

ScreenshotScanner

License: MIT Python 3.8+ PyPI version Downloads CodeQL Status

A heuristic-based tool to detect whether an image is a screenshot or a photo of a physical document.
Star this repo if it helped you!

Features

  • 13 Heuristic Checks - Multiple detection methods for high accuracy
  • Simple API - Easy to integrate into existing workflows
  • Detailed Metrics - Optional verbose mode for debugging
  • No Training Required - Rule-based system, no ML models needed
  • Fast Processing - Analyze images in milliseconds

Installation

Basic Installation

pip install ScreenshotScanner

Quick Start

from screenshot_scanner import ScreenshotScanner

# Initialize scanner
scanner = ScreenshotScanner()

# Process an image (simple one-liner)
result = scanner.process("path/to/image.jpg")

print(result)

Example Output

{
    'is_screenshot': True,
    'score': 8,
    'confidence': 80.0,
    'reasons': ['Has alpha channel', 'Common aspect ratio: 1.78', 'Low ELA: 45.32', 'No EXIF data', 'High sharpness: 156.23']
}

That's it! Just 3 lines of code to detect screenshots.

How It Works

ScreenshotScanner uses 13 different heuristic checks to determine if an image is a screenshot:

  1. Alpha Channel - Screenshots often have transparency
  2. Aspect Ratio - Common screen ratios (16:9, 4:3, etc.)
  3. Border Variance - Uniform borders indicate screenshots
  4. ELA (Error Level Analysis) - Lower compression artifacts in screenshots
  5. EXIF Data - Screenshots typically lack camera metadata
  6. Horizontal Edges - UI elements create horizontal patterns
  7. Moiré Patterns - Photos of screens show moiré, screenshots don't
  8. Noise Analysis - Screenshots have less sensor noise
  9. Sharpness - Screenshots are typically sharper
  10. Solid Color Ratio - UI elements have more solid colors
  11. Status Bar Detection - Mobile screenshots often have status bars
  12. Text Confidence - OCR works better on screenshot text
  13. Vertical Symmetry - UI layouts are often symmetric

Each check contributes to a final score. A score ≥ 5 (default threshold) indicates a screenshot.

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Motivation

  • There is no good tool without ML to detect screenshots. So i decided to come up with this.

Contact

Star

If you find this project useful, please consider giving it a star on GitHub!


Made with ❤️ for better document verification by AzwadFawadHasan

Visitor Count