import argparse import cv2 from . import * from .classes import * from .funcs import * from abcli import file import abcli.logging import logging logger = logging.getLogger(__name__) parser = argparse.ArgumentParser(name, description=f"{name}-{version}") parser.add_argument( "task", type=str, default="", help="eval,ingest,list,predict,predict_image,preprocess,train", ) parser.add_argument( "--objects", type=str, default="", ) parser.add_argument( "--color", type=int, default=0, help="0/1", ) parser.add_argument( "--convnet", type=int, default=1, help="0/1", ) parser.add_argument( "--count", type=int, default=-1, ) parser.add_argument( "--data_path", type=str, default="", ) parser.add_argument( "--epochs", default=10, type=int, help="", ) parser.add_argument( "--infer_annotation", type=int, default=1, help="0/1", ) parser.add_argument( "--input_path", type=str, default="", ) parser.add_argument( "--is_url", type=int, default=0, help="0/1", ) parser.add_argument( "--model_path", type=str, default="", ) parser.add_argument( "--output_path", type=str, default="", ) parser.add_argument( "--purpose", type=str, default="", help="predict/train", ) parser.add_argument( "--window_size", type=int, default=default_window_size, ) args = parser.parse_args() success = False if args.task == "eval": success = eval(args.input_path, args.output_path) elif args.task == "list": Image_Classifier().load(args.model_path) success = True elif args.task == "predict": classifier = Image_Classifier() if classifier.load(args.model_path): success, test_images = file.load(f"{args.data_path}/test_images.pyndarray") if success: _, test_labels = file.load( f"{args.data_path}/test_labels.pyndarray", civilized=True, default=None, ) success, prediction = classifier.predict( test_images / 255.0, test_labels, args.output_path, ) elif args.task == "predict_image": success = True classifier = Image_Classifier() success = classifier.load(args.model_path) if success: if args.is_url: image_filename = file.auxiliary("image", file.extension(args.data_path)) if not file.download(args.data_path, image_filename): success = False else: image_filename = args.data_path if success: success, image = file.load_image(image_filename) if success: image = cv2.resize( image, (classifier.params["window_size"], classifier.params["window_size"]) ) if not classifier.params["color"]: image = np.mean(image, axis=2) image = np.expand_dims(image, axis=0) success, prediction = classifier.predict( image / 255.0, output_path=args.output_path, ) if success: index = np.argmax(prediction) logger.info( f"prediction: {classifier.class_names[index]} - {prediction[0][index]:.2f}" ) elif args.task == "preprocess": success = preprocess( args.output_path, objects=args.objects, infer_annotation=args.infer_annotation, purpose=args.purpose, window_size=args.window_size, ) elif args.task == "train": success = Image_Classifier.train( args.data_path, args.model_path, color=args.color, convnet=args.convnet, epochs=args.epochs, ) else: logger.error(f"-{name}: {args.task}: command not found.") if not success: logger.error(f"-{name}: {args.task}: failed.")