Skip to content

Automatic Document Segmentation and Cropping for Khmer IDs, Passport and Documents

License

Notifications You must be signed in to change notification settings

MetythornPenn/autocrop_kh

Repository files navigation

Autocrop_kh

Automatic Document Segmentation and Cropping for Khmer IDs, Passport and Documents

Autocrop_kh is a Python package for automatic document segmentation and cropping, with a focus on Khmer IDs, Passport and other documents. It uses a DeepLabV3 model training on Khmer ID, Passport document datasets to accurately segment and extract documents from images.

License: Apache-2.0 License

Installation

Install from source

# clone repo 
git clone https://github.com/MetythornPenn/autocrop_kh.git

# install lib from source
pip install -e .

Install from PyPI

pip install autocrop-kh

Usage

Python Script

import torch
import cv2
import requests
import os
from autocrop_kh import autocrop

def download_file(url, local_filename):
    with requests.get(url, stream=True) as r:
        r.raise_for_status()
        with open(local_filename, 'wb') as f:
            for chunk in r.iter_content(chunk_size=8192):
                f.write(chunk)
    print(f"Downloaded: {local_filename}")

img_url = "https://github.com/MetythornPenn/autocrop_kh/raw/main/sample/img-1.jpg"
model_url = "https://github.com/MetythornPenn/autocrop_kh/raw/main/models/autocrop_model_v2.onnx"
img_path = "img-1.jpg"
model_path = "autocrop_model_v2.onnx"

download_file(img_url, img_path)
download_file(model_url, model_path)

if not os.path.exists(img_path):
    raise FileNotFoundError(f"Image file {img_path} was not found.")
if not os.path.exists(model_path):
    raise FileNotFoundError(f"Model file {model_path} was not found.")

if torch.cuda.is_available():
    device = "cuda"
elif torch.backends.mps.is_available():
    device = "mps"
else:
    device = "cpu"

extracted_document = autocrop(
    img_path=img_path,
    model_path=model_path, 
    device=device)


output_path = "extracted_document.jpg"
cv2.imwrite(output_path, extracted_document[:, :, ::-1])  # Convert back to BGR for saving
print(f"Extracted document saved to {output_path}")
  • img_path: Path of the input image file.
  • model_path: Path to the pre-trained model (local path and support both .onnx and .pth).
  • device: Specify cpu or cuda or mps (default is gpu).
  • output_path: Path where the extracted document image will be saved.

Result:

Left Image Right Image

Left Image Right Image

Running as API & Web

# clone repo
git clone https://github.com/MetythornPenn/autocrop_kh.git

# go to directory
cd autocrop

# install libraries
pip3 install -r requirements.txt

# start server (http://localhost:5555/docs)
make server

# start client ((http://localhost:7860))
make client 

Noted : This model was trained with 25000 datasets include opensource data and my custom synthetic data.

Reference

About

Automatic Document Segmentation and Cropping for Khmer IDs, Passport and Documents

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published