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
Source