| | #! /usr/bin/env bash |
| |
|
| | function image_classifier() { |
| | abcli_image_classifier $@ |
| | } |
| |
|
| | function abcli_image_classifier() { |
| | local task=$(abcli_unpack_keyword "$1" help) |
| |
|
| | if [ "$task" == "help" ] ; then |
| | abcli_help_line "$abcli_cli_name image_classifier install" \ |
| | "install image_classifier." |
| | abcli_help_line "$abcli_cli_name image_classifier list [object_1] [model=object/*saved]" \ |
| | "list [saved/object model object_1]." |
| | abcli_help_line "$abcli_cli_name image_classifier predict data_1 [name_1] [data=filename/*object/url,model=object/*saved]" \ |
| | "run fashion_mnist saved/object model name_1 predict on filename/object/url data_1." |
| | abcli_help_line "$abcli_cli_name image_classifier save [name_1] [object_1] [force]" \ |
| | "[force] save image_classifier [in object_1] [as name_1]." |
| | abcli_help_line "$abcli_cli_name image_classifier train object_1" \ |
| | "train image_classifier on data object_1." |
| |
|
| | if [ "$(abcli_keyword_is $2 verbose)" == true ] ; then |
| | python3 -m image_classifier --help |
| | fi |
| | return |
| | fi |
| |
|
| | if [[ $(type -t abcli_image_classifier_$task) == "function" ]] ; then |
| | abcli_image_classifier_$task ${@:2} |
| | return |
| | fi |
| |
|
| | if [ "$task" == "install" ] ; then |
| | conda install -y -c anaconda seaborn |
| | return |
| | fi |
| |
|
| | if [ "$task" == "list" ] ; then |
| | local model_name=$2 |
| |
|
| | if [ -z "$model_name" ] ; then |
| | ls $abcli_path_git/image-classifier/saved_model |
| | return |
| | fi |
| |
|
| | local options=$3 |
| | local model_source=$(abcli_option "$options" "model" saved) |
| | local do_browse=$(abcli_option_get_unpacked "$options" "browser" 0) |
| |
|
| | local model_path=$(abcli_huggingface get_model_path image-classifier "$model_name" "$options") |
| |
|
| | if [ "$model_source" == "object" ] ; then |
| | local model_object=$(python3 -c "print('$model_path'.split('/')[-1])") |
| | abcli_download object $model_object |
| | fi |
| |
|
| | python3 -m image_classifier \ |
| | list \ |
| | --model_path $model_path \ |
| | ${@:4} |
| |
|
| | if [ "$do_browse" == 1 ] && [ "$model_source" == "object" ] ; then |
| | abcli_browser $model_object |
| | fi |
| |
|
| | return |
| | fi |
| |
|
| | if [ "$task" == "save" ] ; then |
| | abcli_huggingface save \ |
| | image-classifier \ |
| | $(abcli_clarify_arg "$2" image-classifier) \ |
| | ${@:3} |
| | return |
| | fi |
| |
|
| | abcli_log_error "-fashion_mnist: image-classifier: $task: command not found." |
| | } |
| |
|
| | function abcli_image_classifier_predict() { |
| | local data_object=$(abcli_clarify_object "$1") |
| |
|
| | local model_name=$2 |
| |
|
| | local options=$3 |
| | local data_source=$(abcli_option "$options" "data" object) |
| | local model_source=$(abcli_option "$options" "model" saved) |
| |
|
| | if [ "$(abcli_keyword_is $data_object validate)" == true ] ; then |
| | if [ "$data_source" == "object" ] ; then |
| | abcli_log_error "-imge-classifier: predict: validation object not found." |
| | return |
| | fi |
| |
|
| | local data_object="https://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Claquettes-peto.jpg/1024px-Claquettes-peto.jpg" |
| | local data_source="url" |
| | fi |
| |
|
| | if [ "$data_source" == "object" ] ; then |
| | abcli_download object $data_object |
| | fi |
| |
|
| |
|
| | local model_path=$(abcli_huggingface get_model_path image-classifier "$model_name" "$options") |
| |
|
| | if [ "$model_source" == "object" ] ; then |
| | local model_object=$(python3 -c "print('$model_path'.split('/')[-1])") |
| | abcli_download object $model_object |
| | fi |
| |
|
| | abcli_log "image_classifier($model_path).predict($data_object): $options" |
| |
|
| | if [ ! -f "$abcli_object_root/$data_object/test_images.pyndarray" ] && [ "$data_source" == "object" ] ; then |
| | python3 -m image_classifier \ |
| | preprocess \ |
| | --infer_annotation 0 \ |
| | --model_path $model_path \ |
| | --objects $abcli_object_root/$data_object \ |
| | --output_path $abcli_object_root/$data_object \ |
| | --purpose predict \ |
| | ${@:4} |
| | fi |
| |
|
| | if [ "$data_source" == "object" ] ; then |
| | cp -v $abcli_object_root/$data_object/*.pyndarray . |
| | cp -v $model_path/image_classifier/model/class_names.json . |
| |
|
| | python3 -m image_classifier \ |
| | predict \ |
| | --data_path $abcli_object_root/$data_object \ |
| | --model_path $model_path \ |
| | --output_path $abcli_object_path \ |
| | ${@:4} |
| |
|
| | abcli_tag set . image_classifier,predict |
| | else |
| | local is_url=0 |
| | if [ "$data_source" == "url" ] ; then |
| | local is_url=1 |
| | fi |
| |
|
| | python3 -m image_classifier \ |
| | predict_image \ |
| | --data_path $data_object \ |
| | --is_url $is_url \ |
| | --model_path $model_path \ |
| | --output_path $abcli_object_path \ |
| | ${@:4} |
| | fi |
| | } |
| |
|
| | function abcli_image_classifier_train() { |
| | local data_object=$(abcli_clarify_object "$1" $abcli_object_name) |
| |
|
| | abcli_download object $data_object |
| |
|
| | local options=$2 |
| | local do_color=$(abcli_option_int "$options" "color" 0) |
| | local do_convnet=$(abcli_option_int "$options" "convnet" 0) |
| | local do_validate=$(abcli_option_int "$options" "validate" 0) |
| |
|
| | local extra_args="" |
| | if [ "$do_validate" == 1 ] ; then |
| | local extra_args="--epochs 2" |
| | fi |
| |
|
| | abcli_log "image_classifier.train($data_object): $options" |
| |
|
| | python3 -m image_classifier \ |
| | train \ |
| | --color $do_color \ |
| | --convnet $do_convnet \ |
| | --data_path $abcli_object_root/$data_object \ |
| | --model_path $abcli_object_path \ |
| | $extra_args \ |
| | ${@:3} |
| |
|
| | abcli_tag set . image_classifier,train |
| | } |