import { types } from "mobx-state-tree"; import Registry from "../../core/Registry"; import ControlBase from "./Base"; import { AnnotationMixin } from "../../mixins/AnnotationMixin"; import SeparatedControlMixin from "../../mixins/SeparatedControlMixin"; import { ToolManagerMixin } from "../../mixins/ToolManagerMixin"; /* * The `Bitmask` tag for pixel-wise image segmentation tasks is used in the area where you want to apply a mask or use a brush to draw a region on the image. * * `Bitmask` operates on pixel level and outputs a Base64 encoded PNG data URL image with black pixels on transparent background. * * Export data example: `data-url:image/png;[base64-encoded-string]` * * **Note:** You need to set `smoothing="false"` on the Image tag to be able to work with individual pixels; * * * * Use with the following data types: image. * @example * * * * * * * @name Bitmask * @regions BitmaskRegion * @meta_title Bitmask Tag for Image Segmentation Labeling * @meta_description Customize Label Studio with bitmask tags for image segmentation labeling for machine learning and data science projects. * @param {string} name - Name of the element * @param {string} toName - Name of the image to label * @param {single|multiple=} [choice=single] - Configure whether the data labeler can select one or multiple labels * @param {number} [maxUsages] - Maximum number of times a label can be used per task * @param {boolean} [showInline=true] - Show labels in the same visual line * @param {boolean} [smart] - Show smart tool for interactive pre-annotations * @param {boolean} [smartOnly] - Only show smart tool for interactive pre-annotations */ const TagAttrs = types.model({ toname: types.maybeNull(types.string), strokewidth: types.optional(types.string, "15"), }); const Model = types .model({ type: "bitmask", removeDuplicatesNamed: "BitmaskErase", }) .views((self) => ({ get hasStates() { const states = self.states(); return states && states.length > 0; }, })) .volatile(() => ({ toolNames: ["Bitmask", "BitmaskErase"], })); const BitmaskModel = types.compose( "BitmaskModel", ControlBase, AnnotationMixin, SeparatedControlMixin, TagAttrs, Model, ToolManagerMixin, ); const HtxView = () => { return null; }; Registry.addTag("bitmask", BitmaskModel, HtxView); export { HtxView, BitmaskModel };