import { prepareAdditionalProps } from "../../common/constants.mjs";
import { prepareFile } from "../../common/utils.mjs";
import imagga from "../../imagga.app.mjs";
export default {
key: "imagga-analyze-image",
name: "Analyze Image",
description: "Assign a category to a single image based on its visual content. [See the documentation](https://docs.imagga.com/?shell#categories-categorizer_id)",
version: "0.0.1",
type: "action",
props: {
imagga,
imageUrl: {
propDefinition: [
imagga,
"imageUrl",
],
optional: true,
},
imageFile: {
propDefinition: [
imagga,
"imageFile",
],
optional: true,
},
imageProcessType: {
propDefinition: [
imagga,
"imageProcessType",
],
reloadProps: true,
},
},
async additionalProps() {
return prepareAdditionalProps({
props: imagga.propDefinitions,
type: this.imageProcessType,
});
},
async run({ $ }) {
const {
imagga,
imageUrl,
imageFile,
language = [],
saveIndex,
saveId,
extractOverallColors,
extractObjectColors,
deterministic,
verbose,
threshold,
decreaseParents,
categorizerId,
overallCount,
separatedCount,
imageProcessType,
taggerId,
...params
} = this;
const file = await prepareFile({
imageUrl,
imageFile,
imagga,
});
if (typeof extractOverallColors === "boolean") params.extract_overall_colors = +extractOverallColors;
if (typeof extractObjectColors === "boolean") params.extract_object_colors = +extractObjectColors;
if (typeof deterministic === "boolean") params.deterministic = +deterministic;
if (typeof verbose === "boolean") params.verbose = +verbose;
if (typeof decreaseParents === "boolean") params["decrease_parents"] = +decreaseParents;
if (threshold) params.threshold = parseFloat(threshold);
const response = await imagga.analyzeImage({
$,
taggerId,
imageProcessType,
categorizerId,
params: {
...params,
...file,
overall_count: overallCount,
separated_count: separatedCount,
language: language.toString(),
save_index: saveIndex,
save_id: saveId,
},
});
$.export("$summary", "Image successfully assigned!");
return response;
},
};