Source

Images/generators.js

import { Order } from 'blockly/javascript';
/**
 * @category Image
 * @module BasicImage
 */
/**
 * Asynchronously loads an image from an input element with the ID 'upload_image'.
 * Converts the loaded image to an OpenCV Mat object.
 *
 * @returns {Image} await loadImage()
 */
function loadImage(block, generator) {
    const loadImageFunction = generator.provideFunction_('loadImage', `async function ${generator.FUNCTION_NAME_PLACEHOLDER_}() {
      const file = document.getElementById('upload_image').files[0]

      if(!file) throw 'image not found';

      const img = new Image();
      img.src = URL.createObjectURL(file);

      await new Promise(resolve => {
        img.onload = resolve;
      });

      return cv.imread(img);
}`);
    return [`await ${loadImageFunction}()`, Order.VOID];
}
/**
 * Converts an RGBA image to grayscale.
 *
 * @param {Image} image Image
 * @returns {Image} cv.cvtColor(image, image, cv.COLOR_RGB@GRAY)
 */
function RGBtoGray(block, generator) {
    const image = generator.valueToCode(block, 'IMAGE', Order.NONE) || '';
    return `cv.cvtColor(${image}, ${image}, cv.COLOR_RGBA2GRAY);\n`;
}
/**
 * Resizes an image to the specified shape.
 *
 * @param {Image} image Image
 * @param {Array} shape The shape to resize the image to
 * @returns {Image} cv.resize(image, image, new cv.Size(...shape))
 */
function imageResize(block, generator) {
    const image = generator.valueToCode(block, 'IMAGE', Order.NONE) || '';
    const shape = generator.valueToCode(block, 'SHAPE', Order.NONE) || '';
    return `cv.resize(${image}, ${image}, new cv.Size(...${shape}));\n`;
}
/**
 * Converts an image to a 32-bit floating-point format.
 *
 * @param {Image} image Image
 * @returns {Image} - image.convertTo(image, cv.CV_32F)
 */
function imageTo32Bit(block, generator) {
    const image = generator.valueToCode(block, 'IMAGE', Order.NONE) || '';
    return `${image}.convertTo(${image}, cv.CV_32F);\n`;
}
/**
 * Normalizes the pixel values of an image to a specified range.
 *
 * @param {Image} image Image
 * @param {Number} min The minimum cutoff value
 * @param {Number} max The maximum cutoof value
 * @returns {Image} cv.normalize(image, image, min, max, cv.NORM_MINMAX)
 */
function normalizeImage(block, generator) {
    const image = generator.valueToCode(block, 'IMAGE', Order.NONE) || '';
    const min = generator.valueToCode(block, 'MIN', Order.NONE) || '';
    const max = generator.valueToCode(block, 'MAX', Order.NONE) || '';
    return `cv.normalize(${image}, ${image}, ${min}, ${max}, cv.NORM_MINMAX);\n`;
}
/**
 * Converts an image into a TensorFlow tensor with the specified shape.
 *
 * @param {Image} image Image
 * @param {Array} shape The shape of tensor required
 * @returns {Tensor} tf.tensor(image.data, shape)
 */
function imageTensor(block, generator) {
    const image = generator.valueToCode(block, 'IMAGE', Order.NONE) || '';
    const shape = generator.valueToCode(block, 'SHAPE', Order.NONE) || '';
    return [`tf.tensor(${image}.data, ${shape})`, Order.VOID];
}
/**
 * Retrieves the dimensions of an image.
 *
 * @param {Image} image Image
 * @returns {string} getImageDimensions(image)
 */
function getImageDimensions(block, generator) {
    const image = generator.valueToCode(block, 'IMAGE', Order.NONE) || '';
    return `getImageDimensions(${image});\n`;
}
export const imageBlockGenerator = {
    load_image: loadImage,
    rgb_to_gray: RGBtoGray,
    image_resize: imageResize,
    image_to_32_bit: imageTo32Bit,
    image_normalize: normalizeImage,
    image_tensor: imageTensor,
    image_dimensions: getImageDimensions,
};
//# sourceMappingURL=generators.js.map