image-classifier / abcli /image_classifier.sh
kamangir
+= README.md - kamangir/bolt#692
e773d9a
raw
history blame
5.8 kB
#! /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
}