DefinitelyTyped/types/dv/index.d.ts
2019-03-05 10:15:47 +08:00

478 lines
17 KiB
TypeScript

// Type definitions for dv 2.1
// Project: https://github.com/creatale/node-dv
// Definitions by: taoqf <https://github.com/taoqf>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 3.0
/// <reference types="node" />
export interface Box {
x: number;
y: number;
width: number;
height: number;
}
export interface Point {
x: number;
y: number;
}
export interface Segment {
p1: Point;
p2: Point;
error: number;
}
export interface Skew {
angle: number;
confidence: number;
}
export interface Component {
x: number;
y: number;
width: number;
height: number;
}
export class Image {
/**
* Creates a copy of otherImage.
*/
constructor(otherImage: Image);
/**
* Creates a 32 bit imagen from three 8 bit images, where each image represents one channel of RGB or HSV.
*/
constructor(image1: Image, image2: Image, image3: Image);
/**
* Creates an empty image with the specified dimensions (!!! note: this constructor is experimental and likely to change).
*/
constructor(width: number, height: number, depth: number);
/**
* Creates an image from a Buffer object, that contains the PNG/JPG encoded image.
*/
constructor(type: 'png' | 'jpg', buffer: Buffer);
constructor(type: 'rgba' | 'rgb' | 'gray', buffer: Buffer, width: number, height: number);
readonly width: number;
readonly height: number;
/**
* The depth of the image in bits per pixel, i.e. one of 32 (color), 8 (grayscale) or 1 (monochrome).
*/
readonly depth: number;
/**
* Returns the (boolean) inverse of this image.
*/
invert(): Image;
/**
* Returns the (boolean) union of two images with equal depth, aligning them to the upper left corner.
*/
or(otherImage: Image): Image;
/**
* Returns the (boolean) difference of two images with equal depth, aligning them to the upper left corner.
*/
and(otherImage: Image): Image;
/**
* Returns the (boolean) exclusive disjunction of two images with equal depth, aligning them to the upper left corner.
*/
xor(otherImage: Image): Image;
/**
* If the images are monochrome, dispatches to Leptonica's pixOr. Otherwise, returns the channelwise addition of b to a, clipped at 255.
*/
add(otherImage: Image): Image;
/**
* If the images are monochrome, dispatches to Leptonica's pixSubtract and is equivalent to a.and(b.invert()).
* For grayscale images, returns the pixelwise subtraction of b from a, clipped at zero.
* For color, the entire RGB value is subtracted instead of doing channelwise subtraction (ask Leptonica why).
* @example:
* redness = colorImage.toGray(1, 0, 0).subtract(colorImage.toGray(0, 0.5, 0.5))
*/
subtract(otherImage: Image): Image;
/**
* Applies a convoltuion kernel with the specified dimensions. Image convolution is an operation where each destination pixel is computed based on a weighted sum of a set of nearby source pixels.
*/
convolve(halfWidth: number, halfHeight: number): Image;
/**
* Unsharp Masking creates an unsharp mask using halfWidth.
* The fraction determines how much of the edge is added back into image.
* The resulting image appears clearer, but it is generally less accurate.
*/
unsharp(halfWidth: number, fraction: number): Image;
/**
* Rotates the image around its center by the specified angle in degrees.
*/
rotate(angle: number): Image;
/**
* Scales an image proportionally by scale (1.0 = 100%).
*/
scale(scale: number): Image;
/**
* Scales an image by scaleX and scaleY (1.0 = 100%).
*/
scale(scaleX: number, scaleY: number): Image;
/**
* Crops an image from this image by the specified rectangle and returns the resulting image.
*/
crop(box: Box): Image;
crop(x: number, y: number, width: number, height: number): Image;
/**
* Creates a mask by testing if pixels (RGB, HSV, ...) are between lower and upper. Formally speaking:
* lower1 ≤ pixel1 ≤ upper1
* ∧ lower2 ≤ pixel2 ≤ upper2
* ∧ lower3 ≤ pixel3 ≤ upper3
*/
inRange(lower1: number, lower2: number, lower3: number, upper1: number, upper2: number, upper3: number): Image;
/**
* Only available for grayscale images. Returns the histogram in an array of length 256, where each entry represents the fraction (0.0 to 1.0) of that color in the image.
* The mask parameter is optional and must be a monochrome image of same width and height; only pixels where mask is 0 will be counted.
*/
histogram(mask?: Image): Image;
/**
* Computes the horizontal or vertical projection of an 1bpp or 8bpp image.
*/
projection(mode: 'horizontal' | 'vertical'): number[];
/**
* Sets the specified value to each pixel set in the mask.
*/
setMasked(mask: Image, value: number): Image;
/**
* Available for grayscale and color images. Channelwise maps each pixel of image using mapping, which must be an array of length 256 with integer values between 0 and 255.
* !!! !!! Note: this function actually changes the image!
* The mask parameter is optional and must be a monochrome image of same width and height; only pixels where mask is 0 will be modified.
*/
applyCurve(mapping: number[], mask?: Image): this;
/**
* Applies a rank (0.0 ... 1.0) filter of the specified width
* and height (think of it as radius) to this image
* and returns the result.
* If you set rank to 0.5 you'll get a Median Filter.
* Note that this type of filter works best with odd sizes like 3 or 5.
*/
rankFilter(width: number, height: number, rank: number): Image;
/**
* Color image quantization using an octree based algorithm.
* colors must be between 2 and 256.
* Note that support for the resulting palette image is highly experimental at this point;
* only toGray() and toBuffer('png') are guaranteed to work.
*/
octreeColorQuant(colors: number): Image;
/**
* Color image quantization using median cut algorithm.
* colors must be between 2 and 256.
* Note that support for the resulting palette image is highly experimental at this point;
* only toGray() and toBuffer('png') are guaranteed to work.
*/
medianCutQuant(colors: number): Image;
/**
* Converts a grayscale image to monochrome using a global threshold. value must be between 0 and 255.
*/
threshold(value: number): Image;
/**
* Converts an image to grayscale using default settings. Can be used to convert monochrome images back to grayscale.
*/
toGray(): Image;
/**
* Converts an RGB image to grayscale using the specified widths for each channel.
*/
toGray(redWeight: number, greenWeight: number, blueWeight: number): Image;
/**
* Converts an RGB image to grayscale by selecting either the 'min' or 'max' channel.
* This can act as a simple color filter: 'max' maps colored pixels towards white,
* while 'min' maps colored pixels towards black.
*/
toGray(selector: 'min' | 'max'): Image;
/**
* Converts a grayscale image to a color image.
*/
toColor(): Image;
/**
* Converts from RGB to HSV color space. HSV has the following ranges:
* Hue: [0 .. 239]
* Saturation: [0 .. 255]
* Value: [0 .. 255]
*/
toHSV(): Image;
/**
* Converts from HSV to RGB color space.
*/
toRGB(): Image;
/**
* Applies an Erode Filter and returns the result.
*/
erode(width: number, height: number): Image;
/**
* Applies a Dilate Filter and returns the result.
*/
dilate(width: number, height: number): Image;
/**
* Applies an Open Filter and returns the result.
*/
open(width: number, height: number): Image;
/**
* Applies a Close Filter and returns the result.
*/
close(width: number, height: number): Image;
/**
* Applies morphological thinning of type (fg or bg) with the specified connectivitiy (4 or 8) and maxIterations (0 to iterate until complete).
*/
thin(type: 'fg' | 'bg', connectivity: number, maxIterations: number): Image;
/**
* Scales an 8bpp image for maximum dynamic range. scale must be either log or linear.
*/
maxDynamicRange(scale: 'log' | 'linear'): Image;
/**
* Applies Otsu's Method for computing the threshold of a grayscale image.
* It computes a threshold for each tile of the specified size and performs the threshold operation,
* resulting in a binary image for each tile. These are stitched into the final result.
* The smooth size controls the a convolution kernel applied to threshold array (use 0 for no smoothing).
* The score factor controls the fraction of the max. Otsu score (typically 0.1; use 0.0 for standard Otsu).
*/
otsuAdaptiveThreshold(tileWidth: number, tileHeight: number, smoothWidth: number, smoothHeight: number, scoreFactor: number): Image;
/**
* Detects Line Segments with the specified accuracy (3 is a good start). The number of found line segments can be limited using maxLineSegments (0 is unlimited).
*/
lineSegments(accuracy: number, maxLineSegments: number, useWeightedMeanShift: boolean): Segment[];
/**
* Only available for monochrome images. Tries to find the skew of this image. The resulting angle is in degree. The confidence is between 0.0 and 1.0.
*/
findSkew(): Skew;
/**
* Only available for monochrome images. Tries to extract connected components (think of flood fill). The connectivity can be specified as 4 or 8 directions.
*/
connectedComponents(connectivity: 4 | 8): Component[];
/**
* The Distance Function works on 1bpp images. It labels each pixel with the largest distance between this and any other pixel in its connected component. The connectivity is either 4 or 8.
*/
distanceFunction(connectivity: 4 | 8): Image;
/**
* !!! Note: this function actually changes the image!
* Fills a specified rectangle with white.
*/
clearBox(box: Box): this;
clearBox(x: number, y: number, width: number, height: number): this;
/**
* !!! Note: this function actually changes the image!
* Draws a filled rectangle to this image with the specified value. Works for 8bpp and 1bpp images.
*/
fillBox(box: Box, value: number): this;
fillBox(x: number, y: number, width: number, height: number, value: number): this;
/**
* !!! Note: this function actually changes the image!
* Draws a filled rectangle to this image in the specified color with an optional blending parameter (0.0: transparent; 1.0: no transparency).
*/
fillBox(box: Box, r: number, g: number, b: number, fraction?: number): this;
fillBox(x: number, y: number, width: number, height: number, r: number, g: number, b: number, fraction?: number): this;
/**
* !!! Note: this function actually changes the image!
* Draws a rectangle to this image with the specified border. The possible pixel manipulating operations are set, clear and flip.
*/
drawBox(box: Box, borderWidth: number, operation: 'set' | 'clear' | 'flip'): this;
drawBox(x: number, y: number, width: number, height: number, borderWidth: number, operation: 'set' | 'clear' | 'flip'): this;
/**
* !!! Note: this function actually changes the image!
* Draws a rectangle to this image with the specified border in the specified color with an optional blending parameter (0.0: transparent; 1.0: no transparency).
*/
drawBox(box: Box, borderWidth: number, red: number, green: number, blue: number, frac?: number): this;
drawBox(x: number, y: number, width: number, height: number, borderWidth: number, red: number, green: number, blue: number, frac?: number): this;
/**
* !!! Note: this function actually changes the image!
* Draws a line between p1 and p2 to this image with the specified line width. The possible pixel manipulating operations are set, clear and flip.
*/
drawLine(p1: Point, p2: Point, width: number, operation: 'set' | 'clear' | 'flip'): this;
/**
* !!! Note: this function actually changes the image!
* Draws a line between p1 and p2 to this image with the specified line width in the specified color with an optional blending parameter (0.0: transparent; 1.0: no transparency).
*/
drawLine(p1: Point, p2: Point, width: number, red: number, green: number, blue: number, frac?: number): this;
/**
* !!! Note: this function actually changes the image!
* Draws an image to this image with the specified destination box.
*/
drawImage(image: Image, box: Box): this;
drawImage(image: Image, x: number, y: number, width: number, height: number): this;
/**
* Converts the Image in the specified format to a buffer.
* Specifying raw returns the raw image data as buffer.
* For color images, the result contains three bytes per pixel in the order R, G, B;
* for grayscale and monochrome images, it contains one byte per pixel.
* Specifying png returns a PNG encoded image as buffer.
* Specifying jpg returns a JPG encoded image as buffer.
*/
toBuffer(format?: 'raw' | 'png' | 'jpg'): Buffer;
}
export interface Rect {
x: number;
y: number;
width: number;
height: number;
}
export interface Region {
box: Box;
text: string;
confidence: number;
}
export type Paragaph = Region;
export interface Textline {
box: Box;
}
export type Word = Region;
export interface Choice {
text: string;
confidence: number;
}
export interface Symbol extends Region {
choices: Choice[];
}
export type Text = Choice;
/**
* A Tesseract object represents an optical character recognition engine, that reads text using Tesseract from an image.
* Tesseract supports many langauges and fonts (see Tesseract/Downloads).
* New language files have to be installed in node-dv/tessdata.
*/
export class Tesseract {
/**
* Creates a Tesseract engine with language set to english.
*/
constructor();
constructor(datapath: string);
/**
* Creates a Tesseract engine with the specified language.
*/
constructor(lang: string, image: Image);
/**
* Creates a Tesseract engine with the specified language and image.
*/
constructor(datapath: string, lang: string, image: Image);
/**
* Accessor for the input image.
*/
image: Image;
/**
* Accessor for the rectangle that specifies a "visible" area on the image.
*/
rectangle: Rect;
/**
* Accessor for the page segmentation mode.
*/
pageSegMode: 'osd_only' | 'auto_osd' | 'auto_only' | 'auto'
| 'single_column' | 'single_block_vert_text' | 'single_block'
| 'single_line' | 'single_word' | 'circle_word' | 'single_char'
| 'sparse_text' | 'sparse_text_osd';
[key: string]: unknown;
/**
* Clears the tesseract image and its last results.
*/
clear(): void;
/**
* Clears all adaptive classifiers (use this when results vary during scanning).
*/
clearAdaptiveClassifier(): void;
/**
* Returns the binarized image Tesseract uses for its recognition.
*/
thresholdImage(): Image;
/**
* Returns an array of objects, You can omit text information by setting recognize = false, which is considerably faster.
*/
findRegions(recognize: boolean): Region[];
/**
* Returns an array of objects, You can omit text information by setting recognize = false, which is considerably faster.
*/
findParagraphs(recognize: boolean): Paragaph[];
/**
* Returns an array of objects, You can omit text information by setting recognize = false, which is considerably faster.
*/
findTextLines(recognize: boolean): Textline[];
/**
* Returns an array of objects, You can omit text information by setting recognize = false, which is considerably faster.
*/
findWords(recognize: boolean): Word[];
/**
* Returns an array of objects, You can omit text information by setting recognize = false, which is considerably faster.
*/
findSymbols(recognize: boolean): symbol[];
/**
* Returns text in the specified format. Valid formats are: plain, unlv.
*/
findText(format: 'plain' | 'unlv', withConfidence?: boolean): string;
findText(format: 'hocr' | 'box', pageNumber: number): string;
}
export interface Barcodeformat {
QR_CODE: boolean;
DATA_MATRIX: boolean;
PDF_417: boolean;
UPC_E: boolean;
UPC_A: boolean;
EAN_8: boolean;
EAN_13: boolean;
CODE_128: boolean;
CODE_39: boolean;
ITF: boolean;
AZTEC: boolean;
}
export interface BarCode {
type: string;
data: string;
buffer: Buffer;
points: Point[];
}
/**
* A ZXing object represents a barcode reader. By default it attempts to decode all barcode formats that ZXing supports.
*/
export class ZXing {
constructor(image?: Image);
/**
* Accessor for the input image this barcode reader operates on.
*/
image: Image;
/**
* List of barcodes the reader tries to find. It's specified as an object and missing properties account as false
*/
formats: Barcodeformat;
/**
* If try harder is enabled, the barcode reader spends more time trying to find a barcode (optimize for accuracy, not speed).
*/
tryHarder: boolean;
/**
* Returns the first barcode found as an object with the following format:
*/
findCode(): BarCode;
/**
* enotes the barcodes type.
*/
readonly type: 'None' | 'QR_CODE' | 'DATA_MATRIX' | 'PDF_417' | 'UPC_E' | 'UPC_A' | 'EAN_8' | 'EAN_13' | 'CODE_128' | 'CODE_39' | 'ITF' | 'AZTEC';
/**
* denotes the stringified data read from the barcode.
*/
readonly data: string;
/**
* denotes the decoded binary data of the barcode before conversion into another character encoding.
*/
readonly buffer: Buffer;
/**
* denotes the points in pixels which were used by the barcode reader to detect the barcode.
*/
readonly points: Point[];
}