tjbot-ce 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +382 -0
- package/dist/camera/camera.d.ts +62 -0
- package/dist/camera/camera.d.ts.map +1 -0
- package/dist/camera/camera.js +155 -0
- package/dist/camera/camera.js.map +1 -0
- package/dist/camera/index.d.ts +18 -0
- package/dist/camera/index.d.ts.map +1 -0
- package/dist/camera/index.js +18 -0
- package/dist/camera/index.js.map +1 -0
- package/dist/config/config-types.d.ts +75 -0
- package/dist/config/config-types.d.ts.map +1 -0
- package/dist/config/config-types.generated.d.ts +495 -0
- package/dist/config/config-types.generated.d.ts.map +1 -0
- package/dist/config/config-types.generated.js +2 -0
- package/dist/config/config-types.generated.js.map +1 -0
- package/dist/config/config-types.js +175 -0
- package/dist/config/config-types.js.map +1 -0
- package/dist/config/index.d.ts +20 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +19 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/tjbot-config.d.ts +98 -0
- package/dist/config/tjbot-config.d.ts.map +1 -0
- package/dist/config/tjbot-config.js +309 -0
- package/dist/config/tjbot-config.js.map +1 -0
- package/dist/config/vendor/colors.yaml +61 -0
- package/dist/config/vendor/model-registry.yaml +275 -0
- package/dist/config/vendor/tjbot-config.schema.yaml +792 -0
- package/dist/config/vendor/tjbot.default.toml +452 -0
- package/dist/led/index.d.ts +20 -0
- package/dist/led/index.d.ts.map +1 -0
- package/dist/led/index.js +20 -0
- package/dist/led/index.js.map +1 -0
- package/dist/led/led-common-anode.d.ts +38 -0
- package/dist/led/led-common-anode.d.ts.map +1 -0
- package/dist/led/led-common-anode.js +79 -0
- package/dist/led/led-common-anode.js.map +1 -0
- package/dist/led/led-neopixel-spi.d.ts +60 -0
- package/dist/led/led-neopixel-spi.d.ts.map +1 -0
- package/dist/led/led-neopixel-spi.js +216 -0
- package/dist/led/led-neopixel-spi.js.map +1 -0
- package/dist/led/led-neopixel-ws281x.js +186 -0
- package/dist/led/led-neopixel.d.ts +57 -0
- package/dist/led/led-neopixel.d.ts.map +1 -0
- package/dist/led/led-neopixel.js +235 -0
- package/dist/led/led-neopixel.js.map +1 -0
- package/dist/microphone/index.d.ts +18 -0
- package/dist/microphone/index.d.ts.map +1 -0
- package/dist/microphone/index.js +18 -0
- package/dist/microphone/index.js.map +1 -0
- package/dist/microphone/microphone.d.ts +65 -0
- package/dist/microphone/microphone.d.ts.map +1 -0
- package/dist/microphone/microphone.js +179 -0
- package/dist/microphone/microphone.js.map +1 -0
- package/dist/rpi-drivers/index.d.ts +22 -0
- package/dist/rpi-drivers/index.d.ts.map +1 -0
- package/dist/rpi-drivers/index.js +22 -0
- package/dist/rpi-drivers/index.js.map +1 -0
- package/dist/rpi-drivers/rpi-detect.d.ts +24 -0
- package/dist/rpi-drivers/rpi-detect.d.ts.map +1 -0
- package/dist/rpi-drivers/rpi-detect.js +49 -0
- package/dist/rpi-drivers/rpi-detect.js.map +1 -0
- package/dist/rpi-drivers/rpi-driver.d.ts +116 -0
- package/dist/rpi-drivers/rpi-driver.d.ts.map +1 -0
- package/dist/rpi-drivers/rpi-driver.js +261 -0
- package/dist/rpi-drivers/rpi-driver.js.map +1 -0
- package/dist/rpi-drivers/rpi3-driver.d.ts +47 -0
- package/dist/rpi-drivers/rpi3-driver.d.ts.map +1 -0
- package/dist/rpi-drivers/rpi3-driver.js +145 -0
- package/dist/rpi-drivers/rpi3-driver.js.map +1 -0
- package/dist/rpi-drivers/rpi4-driver.d.ts +35 -0
- package/dist/rpi-drivers/rpi4-driver.d.ts.map +1 -0
- package/dist/rpi-drivers/rpi4-driver.js +101 -0
- package/dist/rpi-drivers/rpi4-driver.js.map +1 -0
- package/dist/rpi-drivers/rpi5-driver.d.ts +33 -0
- package/dist/rpi-drivers/rpi5-driver.d.ts.map +1 -0
- package/dist/rpi-drivers/rpi5-driver.js +78 -0
- package/dist/rpi-drivers/rpi5-driver.js.map +1 -0
- package/dist/servo/index.d.ts +19 -0
- package/dist/servo/index.d.ts.map +1 -0
- package/dist/servo/index.js +19 -0
- package/dist/servo/index.js.map +1 -0
- package/dist/servo/servo-constants.d.ts +33 -0
- package/dist/servo/servo-constants.d.ts.map +1 -0
- package/dist/servo/servo-constants.js +34 -0
- package/dist/servo/servo-constants.js.map +1 -0
- package/dist/servo/servo-lgpio.d.ts +82 -0
- package/dist/servo/servo-lgpio.d.ts.map +1 -0
- package/dist/servo/servo-lgpio.js +178 -0
- package/dist/servo/servo-lgpio.js.map +1 -0
- package/dist/speaker/audio-player.d.ts +30 -0
- package/dist/speaker/audio-player.d.ts.map +1 -0
- package/dist/speaker/audio-player.js +68 -0
- package/dist/speaker/audio-player.js.map +1 -0
- package/dist/speaker/index.d.ts +18 -0
- package/dist/speaker/index.d.ts.map +1 -0
- package/dist/speaker/index.js +18 -0
- package/dist/speaker/index.js.map +1 -0
- package/dist/speaker/speaker.d.ts +53 -0
- package/dist/speaker/speaker.d.ts.map +1 -0
- package/dist/speaker/speaker.js +125 -0
- package/dist/speaker/speaker.js.map +1 -0
- package/dist/stt/backends/azure-stt.d.ts +32 -0
- package/dist/stt/backends/azure-stt.d.ts.map +1 -0
- package/dist/stt/backends/azure-stt.js +227 -0
- package/dist/stt/backends/azure-stt.js.map +1 -0
- package/dist/stt/backends/google-cloud-stt.d.ts +31 -0
- package/dist/stt/backends/google-cloud-stt.d.ts.map +1 -0
- package/dist/stt/backends/google-cloud-stt.js +371 -0
- package/dist/stt/backends/google-cloud-stt.js.map +1 -0
- package/dist/stt/backends/ibm-watson-stt.d.ts +32 -0
- package/dist/stt/backends/ibm-watson-stt.d.ts.map +1 -0
- package/dist/stt/backends/ibm-watson-stt.js +190 -0
- package/dist/stt/backends/ibm-watson-stt.js.map +1 -0
- package/dist/stt/backends/sherpa-onnx-stt.d.ts +117 -0
- package/dist/stt/backends/sherpa-onnx-stt.d.ts.map +1 -0
- package/dist/stt/backends/sherpa-onnx-stt.js +694 -0
- package/dist/stt/backends/sherpa-onnx-stt.js.map +1 -0
- package/dist/stt/index.d.ts +20 -0
- package/dist/stt/index.d.ts.map +1 -0
- package/dist/stt/index.js +21 -0
- package/dist/stt/index.js.map +1 -0
- package/dist/stt/stt-engine.d.ts +68 -0
- package/dist/stt/stt-engine.d.ts.map +1 -0
- package/dist/stt/stt-engine.js +99 -0
- package/dist/stt/stt-engine.js.map +1 -0
- package/dist/stt/stt-utils.d.ts +36 -0
- package/dist/stt/stt-utils.d.ts.map +1 -0
- package/dist/stt/stt-utils.js +112 -0
- package/dist/stt/stt-utils.js.map +1 -0
- package/dist/stt/stt.d.ts +52 -0
- package/dist/stt/stt.d.ts.map +1 -0
- package/dist/stt/stt.js +100 -0
- package/dist/stt/stt.js.map +1 -0
- package/dist/tjbot.d.ts +317 -0
- package/dist/tjbot.d.ts.map +1 -0
- package/dist/tjbot.js +736 -0
- package/dist/tjbot.js.map +1 -0
- package/dist/tts/backends/azure-tts.d.ts +30 -0
- package/dist/tts/backends/azure-tts.d.ts.map +1 -0
- package/dist/tts/backends/azure-tts.js +92 -0
- package/dist/tts/backends/azure-tts.js.map +1 -0
- package/dist/tts/backends/google-cloud-tts.d.ts +38 -0
- package/dist/tts/backends/google-cloud-tts.d.ts.map +1 -0
- package/dist/tts/backends/google-cloud-tts.js +116 -0
- package/dist/tts/backends/google-cloud-tts.js.map +1 -0
- package/dist/tts/backends/ibm-watson-tts.d.ts +42 -0
- package/dist/tts/backends/ibm-watson-tts.d.ts.map +1 -0
- package/dist/tts/backends/ibm-watson-tts.js +99 -0
- package/dist/tts/backends/ibm-watson-tts.js.map +1 -0
- package/dist/tts/backends/sherpa-onnx-tts.d.ts +80 -0
- package/dist/tts/backends/sherpa-onnx-tts.d.ts.map +1 -0
- package/dist/tts/backends/sherpa-onnx-tts.js +237 -0
- package/dist/tts/backends/sherpa-onnx-tts.js.map +1 -0
- package/dist/tts/index.d.ts +19 -0
- package/dist/tts/index.d.ts.map +1 -0
- package/dist/tts/index.js +20 -0
- package/dist/tts/index.js.map +1 -0
- package/dist/tts/tts-engine.d.ts +67 -0
- package/dist/tts/tts-engine.d.ts.map +1 -0
- package/dist/tts/tts-engine.js +109 -0
- package/dist/tts/tts-engine.js.map +1 -0
- package/dist/tts/tts.d.ts +47 -0
- package/dist/tts/tts.d.ts.map +1 -0
- package/dist/tts/tts.js +101 -0
- package/dist/tts/tts.js.map +1 -0
- package/dist/utils/colors.d.ts +39 -0
- package/dist/utils/colors.d.ts.map +1 -0
- package/dist/utils/colors.js +155 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/constants.d.ts +41 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +43 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/credentials.d.ts +43 -0
- package/dist/utils/credentials.d.ts.map +1 -0
- package/dist/utils/credentials.js +121 -0
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/errors.d.ts +26 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +32 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +25 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +23 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logging.d.ts +44 -0
- package/dist/utils/logging.d.ts.map +1 -0
- package/dist/utils/logging.js +113 -0
- package/dist/utils/logging.js.map +1 -0
- package/dist/utils/model-registry.d.ts +142 -0
- package/dist/utils/model-registry.d.ts.map +1 -0
- package/dist/utils/model-registry.js +391 -0
- package/dist/utils/model-registry.js.map +1 -0
- package/dist/utils/utils.d.ts +33 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +50 -0
- package/dist/utils/utils.js.map +1 -0
- package/dist/vision/backends/azure-vision.d.ts +33 -0
- package/dist/vision/backends/azure-vision.d.ts.map +1 -0
- package/dist/vision/backends/azure-vision.js +151 -0
- package/dist/vision/backends/azure-vision.js.map +1 -0
- package/dist/vision/backends/google-cloud-vision.d.ts +32 -0
- package/dist/vision/backends/google-cloud-vision.d.ts.map +1 -0
- package/dist/vision/backends/google-cloud-vision.js +193 -0
- package/dist/vision/backends/google-cloud-vision.js.map +1 -0
- package/dist/vision/backends/onnx.d.ts +116 -0
- package/dist/vision/backends/onnx.d.ts.map +1 -0
- package/dist/vision/backends/onnx.js +781 -0
- package/dist/vision/backends/onnx.js.map +1 -0
- package/dist/vision/index.d.ts +19 -0
- package/dist/vision/index.d.ts.map +1 -0
- package/dist/vision/index.js +20 -0
- package/dist/vision/index.js.map +1 -0
- package/dist/vision/vision-engine.d.ts +131 -0
- package/dist/vision/vision-engine.d.ts.map +1 -0
- package/dist/vision/vision-engine.js +97 -0
- package/dist/vision/vision-engine.js.map +1 -0
- package/dist/vision/vision.d.ts +48 -0
- package/dist/vision/vision.d.ts.map +1 -0
- package/dist/vision/vision.js +83 -0
- package/dist/vision/vision.js.map +1 -0
- package/package.json +124 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../src/utils/model-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 IBM Corp. All Rights Reserved.
|
|
3
|
+
* Copyright 2026-present TJBot Contributors. All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Put TJBot to sleep.
|
|
19
|
+
* @param {number} sec Number of seconds to sleep for.
|
|
20
|
+
*/
|
|
21
|
+
export declare function sleepSync(sec: number): void;
|
|
22
|
+
/**
|
|
23
|
+
* Put TJBot to sleep asynchronously.
|
|
24
|
+
* @param {number} sec Number of seconds to sleep for.
|
|
25
|
+
*/
|
|
26
|
+
export declare function sleep(sec: number): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Check if a command-line tool is available in PATH
|
|
29
|
+
* @param {string} command - The command to check for
|
|
30
|
+
* @returns {boolean} - True if command is available, false otherwise
|
|
31
|
+
*/
|
|
32
|
+
export declare function isCommandAvailable(command: string): boolean;
|
|
33
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO3D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 IBM Corp. All Rights Reserved.
|
|
3
|
+
* Copyright 2026-present TJBot Contributors. All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { execSync } from 'child_process';
|
|
18
|
+
/**
|
|
19
|
+
* Put TJBot to sleep.
|
|
20
|
+
* @param {number} sec Number of seconds to sleep for.
|
|
21
|
+
*/
|
|
22
|
+
export function sleepSync(sec) {
|
|
23
|
+
const msec = sec * 1000;
|
|
24
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, msec);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Put TJBot to sleep asynchronously.
|
|
28
|
+
* @param {number} sec Number of seconds to sleep for.
|
|
29
|
+
*/
|
|
30
|
+
export function sleep(sec) {
|
|
31
|
+
const msec = sec * 1000;
|
|
32
|
+
return new Promise((resolve) => {
|
|
33
|
+
setTimeout(resolve, msec);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if a command-line tool is available in PATH
|
|
38
|
+
* @param {string} command - The command to check for
|
|
39
|
+
* @returns {boolean} - True if command is available, false otherwise
|
|
40
|
+
*/
|
|
41
|
+
export function isCommandAvailable(command) {
|
|
42
|
+
try {
|
|
43
|
+
execSync(`command -v ${command}`, { stdio: 'ignore' });
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACjC,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW;IAC7B,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAC9C,IAAI,CAAC;QACD,QAAQ,CAAC,cAAc,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026-present TJBot Contributors. All Rights Reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { VisionEngine, type FaceDetectionMetadata, type ImageClassificationResult, type ImageDescriptionResult, type ObjectDetectionResult } from '../vision-engine.js';
|
|
17
|
+
export declare class AzureVisionEngine extends VisionEngine {
|
|
18
|
+
private visionKey?;
|
|
19
|
+
private visionEndpoint?;
|
|
20
|
+
private client?;
|
|
21
|
+
initialize(): Promise<void>;
|
|
22
|
+
private readImageBuffer;
|
|
23
|
+
private getObjectDetectionConfidenceThreshold;
|
|
24
|
+
private getImageClassificationConfidenceThreshold;
|
|
25
|
+
detectObjects(image: Buffer | string): Promise<ObjectDetectionResult[]>;
|
|
26
|
+
classifyImage(image: Buffer | string): Promise<ImageClassificationResult[]>;
|
|
27
|
+
detectFaces(image: Buffer | string): Promise<{
|
|
28
|
+
isFaceDetected: boolean;
|
|
29
|
+
metadata: FaceDetectionMetadata[];
|
|
30
|
+
}>;
|
|
31
|
+
describeImage(image: Buffer | string): Promise<ImageDescriptionResult>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=azure-vision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-vision.d.ts","sourceRoot":"","sources":["../../../src/vision/backends/azure-vision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,OAAO,EACH,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC7B,MAAM,qBAAqB,CAAC;AAI7B,qBAAa,iBAAkB,SAAQ,YAAY;IAC/C,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,MAAM,CAAC,CAAuB;IAEhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,qCAAqC;IAQ7C,OAAO,CAAC,yCAAyC;IAQ3C,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAiDvE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAkC3E,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAA;KAAE,CAAC;IAQ5G,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAwC/E"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026-present TJBot Contributors. All Rights Reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { ComputerVisionClient } from '@azure/cognitiveservices-computervision';
|
|
17
|
+
import { ApiKeyCredentials } from '@azure/ms-rest-js';
|
|
18
|
+
import fs from 'fs';
|
|
19
|
+
import { loadAzureCredentials } from '../../utils/credentials.js';
|
|
20
|
+
import { TJBotError } from '../../utils/index.js';
|
|
21
|
+
import { getLogger } from '../../utils/logging.js';
|
|
22
|
+
import { VisionEngine, } from '../vision-engine.js';
|
|
23
|
+
const logger = getLogger(import.meta.url);
|
|
24
|
+
export class AzureVisionEngine extends VisionEngine {
|
|
25
|
+
visionKey;
|
|
26
|
+
visionEndpoint;
|
|
27
|
+
client;
|
|
28
|
+
async initialize() {
|
|
29
|
+
const config = this.config;
|
|
30
|
+
const credentials = loadAzureCredentials(config?.credentialsPath);
|
|
31
|
+
this.visionKey = credentials.visionKey;
|
|
32
|
+
this.visionEndpoint = credentials.visionEndpoint;
|
|
33
|
+
if (!this.visionKey || !this.visionEndpoint) {
|
|
34
|
+
throw new TJBotError('Azure Vision visionKey and visionEndpoint are required');
|
|
35
|
+
}
|
|
36
|
+
const apiKeyCredentials = new ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': this.visionKey } });
|
|
37
|
+
this.client = new ComputerVisionClient(apiKeyCredentials, this.visionEndpoint);
|
|
38
|
+
logger.info('Azure Vision engine initialized');
|
|
39
|
+
logger.debug(`Initialized AzureVisionEngine with config:
|
|
40
|
+
visionKey: ${this.visionKey ? '***' : 'not set'},
|
|
41
|
+
visionEndpoint: ${this.visionEndpoint ? this.visionEndpoint : 'not set'}`);
|
|
42
|
+
}
|
|
43
|
+
readImageBuffer(image) {
|
|
44
|
+
if (typeof image === 'string') {
|
|
45
|
+
return fs.readFileSync(image);
|
|
46
|
+
}
|
|
47
|
+
return image;
|
|
48
|
+
}
|
|
49
|
+
getObjectDetectionConfidenceThreshold() {
|
|
50
|
+
const config = this.config;
|
|
51
|
+
if (config.objectDetectionConfidence === undefined) {
|
|
52
|
+
throw new TJBotError('Object detection confidence threshold is not configured for Azure Vision engine');
|
|
53
|
+
}
|
|
54
|
+
return config.objectDetectionConfidence;
|
|
55
|
+
}
|
|
56
|
+
getImageClassificationConfidenceThreshold() {
|
|
57
|
+
const config = this.config;
|
|
58
|
+
if (config.imageClassificationConfidence === undefined) {
|
|
59
|
+
throw new TJBotError('Image classification confidence threshold is not configured for Azure Vision engine');
|
|
60
|
+
}
|
|
61
|
+
return config.imageClassificationConfidence;
|
|
62
|
+
}
|
|
63
|
+
async detectObjects(image) {
|
|
64
|
+
if (!this.client) {
|
|
65
|
+
throw new TJBotError('Azure Vision client not initialized. Call initialize() first.');
|
|
66
|
+
}
|
|
67
|
+
const resolvedConfidenceThreshold = this.getObjectDetectionConfidenceThreshold();
|
|
68
|
+
logger.verbose('Running object detection using Azure Computer Vision API');
|
|
69
|
+
const imageBuffer = this.readImageBuffer(image);
|
|
70
|
+
try {
|
|
71
|
+
const result = await this.client.analyzeImageInStream(imageBuffer, {
|
|
72
|
+
visualFeatures: ['Objects'],
|
|
73
|
+
});
|
|
74
|
+
const objects = result.objects ?? [];
|
|
75
|
+
return objects
|
|
76
|
+
.map((obj) => ({
|
|
77
|
+
label: obj.object ?? 'unknown',
|
|
78
|
+
confidence: obj.confidence ?? 0,
|
|
79
|
+
bbox: [
|
|
80
|
+
obj.rectangle?.x ?? 0,
|
|
81
|
+
obj.rectangle?.y ?? 0,
|
|
82
|
+
obj.rectangle?.w ?? 0,
|
|
83
|
+
obj.rectangle?.h ?? 0,
|
|
84
|
+
],
|
|
85
|
+
}))
|
|
86
|
+
.filter((obj) => obj.confidence >= resolvedConfidenceThreshold)
|
|
87
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
throw new TJBotError(`Azure Vision API error during object detection: ${error instanceof Error ? error.message : String(error)}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async classifyImage(image) {
|
|
94
|
+
if (!this.client) {
|
|
95
|
+
throw new TJBotError('Azure Vision client not initialized. Call initialize() first.');
|
|
96
|
+
}
|
|
97
|
+
const resolvedConfidenceThreshold = this.getImageClassificationConfidenceThreshold();
|
|
98
|
+
logger.verbose('Classifying image with Azure Computer Vision API');
|
|
99
|
+
const imageBuffer = this.readImageBuffer(image);
|
|
100
|
+
try {
|
|
101
|
+
const result = await this.client.analyzeImageInStream(imageBuffer, {
|
|
102
|
+
visualFeatures: ['Tags'],
|
|
103
|
+
});
|
|
104
|
+
const tags = result.tags ?? [];
|
|
105
|
+
return tags
|
|
106
|
+
.filter((tag) => tag.confidence && tag.confidence >= resolvedConfidenceThreshold)
|
|
107
|
+
.map((tag) => ({
|
|
108
|
+
label: tag.name ?? 'unknown',
|
|
109
|
+
confidence: tag.confidence ?? 0,
|
|
110
|
+
}))
|
|
111
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
throw new TJBotError(`Azure Vision API error during classification: ${error instanceof Error ? error.message : String(error)}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async detectFaces(image) {
|
|
118
|
+
void image;
|
|
119
|
+
throw new TJBotError('Face detection is not supported by the Azure Computer Vision service. Please use another backend for face detection.');
|
|
120
|
+
}
|
|
121
|
+
async describeImage(image) {
|
|
122
|
+
if (!this.client) {
|
|
123
|
+
throw new TJBotError('Azure Vision client not initialized. Call initialize() first.');
|
|
124
|
+
}
|
|
125
|
+
logger.verbose('Describing image with Azure Computer Vision API');
|
|
126
|
+
const imageBuffer = this.readImageBuffer(image);
|
|
127
|
+
try {
|
|
128
|
+
const result = await this.client.analyzeImageInStream(imageBuffer, {
|
|
129
|
+
visualFeatures: ['Description'],
|
|
130
|
+
});
|
|
131
|
+
// Handle description array - take first caption if available
|
|
132
|
+
const descriptions = result
|
|
133
|
+
.description?.captions ?? [];
|
|
134
|
+
const firstCaption = descriptions[0];
|
|
135
|
+
if (firstCaption && firstCaption.text) {
|
|
136
|
+
return {
|
|
137
|
+
description: firstCaption.text,
|
|
138
|
+
confidence: firstCaption.confidence ?? 0,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
description: '',
|
|
143
|
+
confidence: 0,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
throw new TJBotError(`Azure Vision API error during description: ${error instanceof Error ? error.message : String(error)}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=azure-vision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-vision.js","sourceRoot":"","sources":["../../../src/vision/backends/azure-vision.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026-present TJBot Contributors. All Rights Reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { VisionEngine, type FaceDetectionMetadata, type ImageClassificationResult, type ImageDescriptionResult, type ObjectDetectionResult } from '../vision-engine.js';
|
|
17
|
+
export declare class GoogleCloudVisionEngine extends VisionEngine {
|
|
18
|
+
private client?;
|
|
19
|
+
initialize(): Promise<void>;
|
|
20
|
+
private readImageBuffer;
|
|
21
|
+
private getObjectDetectionConfidenceThreshold;
|
|
22
|
+
private getImageClassificationConfidenceThreshold;
|
|
23
|
+
private getFaceDetectionConfidenceThreshold;
|
|
24
|
+
detectObjects(image: Buffer | string): Promise<ObjectDetectionResult[]>;
|
|
25
|
+
classifyImage(image: Buffer | string): Promise<ImageClassificationResult[]>;
|
|
26
|
+
detectFaces(image: Buffer | string): Promise<{
|
|
27
|
+
isFaceDetected: boolean;
|
|
28
|
+
metadata: FaceDetectionMetadata[];
|
|
29
|
+
}>;
|
|
30
|
+
describeImage(_image: Buffer | string): Promise<ImageDescriptionResult>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=google-cloud-vision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-cloud-vision.d.ts","sourceRoot":"","sources":["../../../src/vision/backends/google-cloud-vision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,EACH,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE3B,KAAK,qBAAqB,EAC7B,MAAM,qBAAqB,CAAC;AAI7B,qBAAa,uBAAwB,SAAQ,YAAY;IACrD,OAAO,CAAC,MAAM,CAAC,CAAuB;IAEhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,qCAAqC;IAU7C,OAAO,CAAC,yCAAyC;IAUjD,OAAO,CAAC,mCAAmC;IAUrC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAgDvE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAiC3E,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAA;KAAE,CAAC;IAiF5G,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAKhF"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026-present TJBot Contributors. All Rights Reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { ImageAnnotatorClient } from '@google-cloud/vision';
|
|
17
|
+
import fs from 'fs';
|
|
18
|
+
import { loadGoogleCloudCredentials } from '../../utils/credentials.js';
|
|
19
|
+
import { TJBotError } from '../../utils/errors.js';
|
|
20
|
+
import { getLogger } from '../../utils/logging.js';
|
|
21
|
+
import { VisionEngine, } from '../vision-engine.js';
|
|
22
|
+
const logger = getLogger(import.meta.url);
|
|
23
|
+
export class GoogleCloudVisionEngine extends VisionEngine {
|
|
24
|
+
client;
|
|
25
|
+
async initialize() {
|
|
26
|
+
const config = this.config;
|
|
27
|
+
loadGoogleCloudCredentials(config?.credentialsPath);
|
|
28
|
+
// Create client using Application Default Credentials (ADC)
|
|
29
|
+
// which reads GOOGLE_APPLICATION_CREDENTIALS environment variable
|
|
30
|
+
this.client = new ImageAnnotatorClient();
|
|
31
|
+
logger.info('Google Cloud Vision engine initialized');
|
|
32
|
+
logger.debug(`Initialized GoogleCloudVisionEngine with config:
|
|
33
|
+
credentialsPath: ${config.credentialsPath}`);
|
|
34
|
+
}
|
|
35
|
+
readImageBuffer(image) {
|
|
36
|
+
if (typeof image === 'string') {
|
|
37
|
+
return fs.readFileSync(image);
|
|
38
|
+
}
|
|
39
|
+
return image;
|
|
40
|
+
}
|
|
41
|
+
getObjectDetectionConfidenceThreshold() {
|
|
42
|
+
const config = this.config;
|
|
43
|
+
if (config.objectDetectionConfidence === undefined) {
|
|
44
|
+
throw new TJBotError('Object detection confidence threshold is not configured for Google Cloud Vision engine');
|
|
45
|
+
}
|
|
46
|
+
return config.objectDetectionConfidence;
|
|
47
|
+
}
|
|
48
|
+
getImageClassificationConfidenceThreshold() {
|
|
49
|
+
const config = this.config;
|
|
50
|
+
if (config.imageClassificationConfidence === undefined) {
|
|
51
|
+
throw new TJBotError('Image classification confidence threshold is not configured for Google Cloud Vision engine');
|
|
52
|
+
}
|
|
53
|
+
return config.imageClassificationConfidence;
|
|
54
|
+
}
|
|
55
|
+
getFaceDetectionConfidenceThreshold() {
|
|
56
|
+
const config = this.config;
|
|
57
|
+
if (config.faceDetectionConfidence === undefined) {
|
|
58
|
+
throw new TJBotError('Face detection confidence threshold is not configured for Google Cloud Vision engine');
|
|
59
|
+
}
|
|
60
|
+
return config.faceDetectionConfidence;
|
|
61
|
+
}
|
|
62
|
+
async detectObjects(image) {
|
|
63
|
+
if (!this.client) {
|
|
64
|
+
throw new TJBotError('Google Cloud Vision client not initialized. Call initialize() first.');
|
|
65
|
+
}
|
|
66
|
+
const resolvedConfidenceThreshold = this.getObjectDetectionConfidenceThreshold();
|
|
67
|
+
logger.verbose('Running object detection using Google Cloud Vision API');
|
|
68
|
+
const imageBuffer = this.readImageBuffer(image);
|
|
69
|
+
try {
|
|
70
|
+
const request = {
|
|
71
|
+
image: { content: imageBuffer },
|
|
72
|
+
features: [{ type: 'OBJECT_LOCALIZATION' }],
|
|
73
|
+
};
|
|
74
|
+
const [result] = await this.client.annotateImage(request);
|
|
75
|
+
const objects = result.localizedObjectAnnotations ?? [];
|
|
76
|
+
return objects
|
|
77
|
+
.map((obj) => {
|
|
78
|
+
// Convert normalized vertices to bounding box [x, y, width, height]
|
|
79
|
+
const vertices = obj.boundingPoly?.normalizedVertices ?? [];
|
|
80
|
+
if (vertices.length < 2) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const x = vertices[0]?.x ?? 0;
|
|
84
|
+
const y = vertices[0]?.y ?? 0;
|
|
85
|
+
const w = (vertices[2]?.x ?? 0) - x;
|
|
86
|
+
const h = (vertices[2]?.y ?? 0) - y;
|
|
87
|
+
return {
|
|
88
|
+
label: obj.name ?? 'unknown',
|
|
89
|
+
confidence: obj.score ?? 0,
|
|
90
|
+
bbox: [x, y, w, h],
|
|
91
|
+
};
|
|
92
|
+
})
|
|
93
|
+
.filter((obj) => obj !== null)
|
|
94
|
+
.filter((obj) => obj.confidence >= resolvedConfidenceThreshold)
|
|
95
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
throw new TJBotError(`Google Cloud Vision API error during object detection: ${error instanceof Error ? error.message : String(error)}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async classifyImage(image) {
|
|
102
|
+
if (!this.client) {
|
|
103
|
+
throw new TJBotError('Google Cloud Vision client not initialized. Call initialize() first.');
|
|
104
|
+
}
|
|
105
|
+
const resolvedConfidenceThreshold = this.getImageClassificationConfidenceThreshold();
|
|
106
|
+
logger.verbose('Classifying image with Google Cloud Vision API');
|
|
107
|
+
const imageBuffer = this.readImageBuffer(image);
|
|
108
|
+
try {
|
|
109
|
+
const request = {
|
|
110
|
+
image: { content: imageBuffer },
|
|
111
|
+
features: [{ type: 'LABEL_DETECTION' }],
|
|
112
|
+
};
|
|
113
|
+
const [result] = await this.client.annotateImage(request);
|
|
114
|
+
const labels = result.labelAnnotations ?? [];
|
|
115
|
+
return labels
|
|
116
|
+
.filter((label) => (label.score ?? 0) >= resolvedConfidenceThreshold)
|
|
117
|
+
.map((label) => ({
|
|
118
|
+
label: label.description ?? 'unknown',
|
|
119
|
+
confidence: label.score ?? 0,
|
|
120
|
+
}))
|
|
121
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
throw new TJBotError(`Google Cloud Vision API error during classification: ${error instanceof Error ? error.message : String(error)}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async detectFaces(image) {
|
|
128
|
+
if (!this.client) {
|
|
129
|
+
throw new TJBotError('Google Cloud Vision client not initialized. Call initialize() first.');
|
|
130
|
+
}
|
|
131
|
+
const confidenceThreshold = this.getFaceDetectionConfidenceThreshold();
|
|
132
|
+
logger.verbose('Detecting faces in image with Google Cloud Vision API');
|
|
133
|
+
const imageBuffer = this.readImageBuffer(image);
|
|
134
|
+
try {
|
|
135
|
+
const request = {
|
|
136
|
+
image: { content: imageBuffer },
|
|
137
|
+
features: [{ type: 'FACE_DETECTION' }],
|
|
138
|
+
};
|
|
139
|
+
const [result] = await this.client.annotateImage(request);
|
|
140
|
+
const faces = result.faceAnnotations ?? [];
|
|
141
|
+
const metadata = faces
|
|
142
|
+
.map((face) => {
|
|
143
|
+
// Extract bounding box from vertices
|
|
144
|
+
const vertices = face.boundingPoly?.vertices ?? [];
|
|
145
|
+
if (vertices.length === 0) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
|
|
149
|
+
for (const vertex of vertices) {
|
|
150
|
+
minX = Math.min(minX, vertex.x ?? 0);
|
|
151
|
+
minY = Math.min(minY, vertex.y ?? 0);
|
|
152
|
+
maxX = Math.max(maxX, vertex.x ?? 0);
|
|
153
|
+
maxY = Math.max(maxY, vertex.y ?? 0);
|
|
154
|
+
}
|
|
155
|
+
const w = maxX - minX;
|
|
156
|
+
const h = maxY - minY;
|
|
157
|
+
// Extract landmarks
|
|
158
|
+
const landmarks = (face.landmarks ?? []).map((landmark) => ({
|
|
159
|
+
x: landmark.position?.x ?? 0,
|
|
160
|
+
y: landmark.position?.y ?? 0,
|
|
161
|
+
type: String(landmark.type ?? '') || undefined,
|
|
162
|
+
}));
|
|
163
|
+
// Map head pose angles (cast to any to access extended properties)
|
|
164
|
+
const faceWithHeadPose = face;
|
|
165
|
+
const ryp = {
|
|
166
|
+
roll: faceWithHeadPose?.headPose?.rollAngle ?? 0,
|
|
167
|
+
yaw: faceWithHeadPose?.headPose?.panAngle ?? 0,
|
|
168
|
+
pitch: faceWithHeadPose?.headPose?.tiltAngle ?? 0,
|
|
169
|
+
};
|
|
170
|
+
const headPose = faceWithHeadPose.headPose ? ryp : undefined;
|
|
171
|
+
return {
|
|
172
|
+
boundingBox: [minX, minY, w, h],
|
|
173
|
+
confidence: face.detectionConfidence ?? 0,
|
|
174
|
+
landmarks,
|
|
175
|
+
headPose,
|
|
176
|
+
};
|
|
177
|
+
})
|
|
178
|
+
.filter((meta) => meta !== null)
|
|
179
|
+
.filter((meta) => meta.confidence >= confidenceThreshold);
|
|
180
|
+
return {
|
|
181
|
+
isFaceDetected: metadata.length > 0,
|
|
182
|
+
metadata,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
throw new TJBotError(`Google Cloud Vision API error during face detection: ${error instanceof Error ? error.message : String(error)}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async describeImage(_image) {
|
|
190
|
+
throw new TJBotError('Image description is only available with Azure Vision backend. Configure see.backend.type to "azure-vision".');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=google-cloud-vision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-cloud-vision.js","sourceRoot":"","sources":["../../../src/vision/backends/google-cloud-vision.ts"],"names":[],"mappings":"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"}
|