ae3-tl / src /ae3_tl /cli.py
usmane3's picture
Add the extraction pipeline (src/ae3_tl)
690762a verified
Raw History Blame Contribute Delete
1.83 kB
"""ae3-tl: serve the image service, or read one image."""
import argparse
import json
import sys
def _serve(module: str, host: str, port: int, log_level: str) -> None:
import uvicorn
uvicorn.run(module, host=host, port=port, log_level=log_level)
def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser(prog="ae3-tl", description=__doc__)
commands = parser.add_subparsers(dest="command", required=True)
for name, target, default_port in (("serve", "ae3_tl.serve.app:app", 8000),):
command = commands.add_parser(name)
command.add_argument("--host", default="0.0.0.0")
command.add_argument("--port", type=int, default=default_port)
command.add_argument("--log-level", default="info")
command.set_defaults(target=target)
extract = commands.add_parser("extract", help="read one page image and print the document")
extract.add_argument("image")
extract.add_argument("--words")
extract.add_argument("--format", default="json", choices=("json", "markdown", "html", "csv"))
extract.add_argument("--include-crops", action="store_true")
args = parser.parse_args(argv)
if args.command == "serve":
_serve(args.target, args.host, args.port, args.log_level)
return 0
from ae3_tl.backends import create_engine
from ae3_tl.image import service
from ae3_tl.serve.settings import load_settings
settings = load_settings()
engine = create_engine(settings)
words = open(args.words, "rb").read() if args.words else None
document = service.extract(engine, settings, open(args.image, "rb").read(), words,
fmt=args.format, include_crops=args.include_crops)
print(json.dumps(document, indent=2))
return 0
if __name__ == "__main__":
sys.exit(main())