afshin-dini's picture
Update main console
a021e24
"""Run the main code for Deep-Package-Detection"""
from pathlib import Path
import logging
import click
from deep_package_detection import __version__
from deep_package_detection.loggings import config_logger
from deep_package_detection.detector import PackageDetectorTrainer
from deep_package_detection.detector import PackageDetectorInference
logger = logging.getLogger(__name__)
@click.group()
@click.version_option(version=__version__)
@click.option("-l", "--log_path", type=str, help="Path to save log file")
@click.option(
"-v",
"--verbose",
count=True,
help="Shorthand for info/debug/warning/error loglevel (-v/-vv/-vvv/-vvvv)",
)
def deep_package_detection_cli(log_path: str, verbose: int) -> None:
"""This is a deep model for detecting different types of packages."""
if verbose == 1:
log_level = 10
elif verbose == 2:
log_level = 20
elif verbose == 3:
log_level = 30
else:
log_level = 40
config_logger(log_level, log_path)
@deep_package_detection_cli.command()
@click.option("--img_resize", type=int, default=640, help="Resize images to this size.")
@click.option(
"--conf_path",
type=str,
default="src/deep_package_detection/data/data.yaml",
help="Path to the config file",
)
@click.option(
"--epochs", type=int, default=100, help="Number of epochs used in training."
)
@click.option("--batch_size", type=int, default=16, help="Batch size used in training.")
@click.option(
"--device", type=str, default="cuda", help="Use cuda or cpu for training."
)
def train(
img_resize: int, conf_path: str, epochs: int, batch_size: int, device: str
) -> None:
"""This the CLI for training purposes"""
detector = PackageDetectorTrainer(
conf=conf_path,
img_size=img_resize,
epochs=epochs,
device=device,
batch_size=batch_size,
)
detector.train()
_ = detector.validation()
@deep_package_detection_cli.command()
@click.option(
"--model_path",
type=click.Path(),
default=Path("./src/deep_package_detection/model/package_detection.pt"),
help="Path to the pre-trained model.",
)
@click.option(
"--data_path",
type=click.Path(),
default=Path("./tests/test_data"),
help="Path to the test data.",
)
@click.option(
"--result_path", type=str, default="./results", help="Path to the results."
)
def infer(model_path: Path, data_path: str, result_path: str) -> None:
"""This the CLI for testing purposes"""
logger.info("Testing the model for package detection...")
inferer = PackageDetectorInference(
model_path=Path(model_path), result_path=result_path
)
segmentations = inferer.inference(data_path=data_path)
counts = inferer.count_packages(segmentations)
if counts:
for key, val in counts.items():
logger.info(
"%s packages are detected in %s as: %s",
sum(item["count"] for item in val),
key,
val,
)
inferer.plot_and_save_results(segmentations)