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
# clone repo
git clone https://github.com/MetythornPenn/autocrop_kh.git
# install lib from source
pip install -e .
pip install autocrop-kh
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
: Specifycpu
orcuda
ormps
(default isgpu
).output_path
: Path where the extracted document image will be saved.
# 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.
- Inspired by DeepLabV3
- Publish python package to PyPI