confia-captcha-ocr-pt / predict.py
confiacompany's picture
Upload folder using huggingface_hub
f60c41e verified
Raw
History Blame Contribute Delete
1.75 kB
#!/usr/bin/env python3
"""
CLI Predictor for Captcha Recognition Model.
Developed by Confia Company.
Usage:
python predict.py /path/to/captcha.png
python predict.py /path/to/captcha.png --weights model.pt
echo /path/to/captcha.png | python predict.py
"""
import argparse
import os
import sys
import torch
from modeling_captcha import load_model, predict_captcha, DEFAULT_ALPHABET
HERE = os.path.dirname(os.path.abspath(__file__))
DEFAULT_WEIGHTS = os.path.join(HERE, "model.pt")
def main():
parser = argparse.ArgumentParser(description="Predict 5-character captcha answer")
parser.add_argument("image", nargs="?", help="Path to captcha image file (PNG/JPG)")
parser.add_argument("--weights", default=DEFAULT_WEIGHTS, help=f"Path to model weights (default: {DEFAULT_WEIGHTS})")
args = parser.parse_args()
img_path = args.image
if not img_path:
img_path = sys.stdin.read().strip()
if not img_path:
parser.error("No image path provided.")
if not os.path.isfile(img_path):
print(f"Error: Image file '{img_path}' not found.", file=sys.stderr)
sys.exit(1)
weights = args.weights
if not os.path.isfile(weights):
# Fallback to best.pt or pytorch_model.bin if model.pt is missing
for alt in ["best.pt", "pytorch_model.bin"]:
alt_path = os.path.join(HERE, alt)
if os.path.isfile(alt_path):
weights = alt_path
break
device = "cuda" if torch.cuda.is_available() else "cpu"
model = load_model(weights, alphabet=DEFAULT_ALPHABET, device=device)
result = predict_captcha(model, img_path, alphabet=DEFAULT_ALPHABET, device=device)
print(result)
if __name__ == "__main__":
main()