@auxee/piece-image-document-intelligence 0.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/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@auxee/piece-image-document-intelligence",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Auxee custom image and document intelligence piece for extracting text and visual elements from images and documents using AI-driven OCR and image processing",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"main": "./src/index.js",
|
|
7
|
+
"types": "./src/index.d.ts",
|
|
8
|
+
"private": false,
|
|
9
|
+
"publishConfig": {
|
|
10
|
+
"access": "public",
|
|
11
|
+
"registry": "https://registry.npmjs.org/"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@activepieces/pieces-common": "^0.30.0",
|
|
15
|
+
"@activepieces/shared": "^0.30.0",
|
|
16
|
+
"@sinclair/typebox": "0.34.11",
|
|
17
|
+
"axios": "1.8.3",
|
|
18
|
+
"axios-retry": "4.4.1",
|
|
19
|
+
"deepmerge-ts": "7.1.0",
|
|
20
|
+
"mime-types": "^2.1.35",
|
|
21
|
+
"nanoid": "3.3.8",
|
|
22
|
+
"semver": "7.6.0",
|
|
23
|
+
"socket.io-client": "4.8.1",
|
|
24
|
+
"tslib": "^2.6.2",
|
|
25
|
+
"zod": "3.25.76",
|
|
26
|
+
"@activepieces/pieces-framework": "0.20.2"
|
|
27
|
+
},
|
|
28
|
+
"resolutions": {
|
|
29
|
+
"rollup": "npm:@rollup/wasm-node"
|
|
30
|
+
}
|
|
31
|
+
}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const imageDocumentIntelligence: import("@activepieces/pieces-framework").Piece<import("@activepieces/pieces-framework").PieceAuthProperty>;
|
package/src/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.imageDocumentIntelligence = void 0;
|
|
4
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
5
|
+
const shared_1 = require("@activepieces/shared");
|
|
6
|
+
const extract_text_from_image_1 = require("./lib/actions/extract-text-from-image");
|
|
7
|
+
exports.imageDocumentIntelligence = (0, pieces_framework_1.createPiece)({
|
|
8
|
+
displayName: 'Image & Document Intelligence',
|
|
9
|
+
description: 'Extract text and visual elements from images and documents using AI-driven OCR and image processing',
|
|
10
|
+
auth: pieces_framework_1.PieceAuth.None(),
|
|
11
|
+
minimumSupportedRelease: '0.9.0',
|
|
12
|
+
logoUrl: 'https://cdn.activepieces.com/pieces/document-intelligence.svg',
|
|
13
|
+
categories: [shared_1.PieceCategory.PRODUCTIVITY, shared_1.PieceCategory.ARTIFICIAL_INTELLIGENCE],
|
|
14
|
+
authors: ['auxee'],
|
|
15
|
+
actions: [extract_text_from_image_1.extractTextFromImage],
|
|
16
|
+
triggers: [],
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/custom/image-document-intelligence/src/index.ts"],"names":[],"mappings":";;;AAAA,qEAAwE;AACxE,iDAAqD;AACrD,mFAA6E;AAEhE,QAAA,yBAAyB,GAAG,IAAA,8BAAW,EAAC;IACnD,WAAW,EAAE,+BAA+B;IAC5C,WAAW,EAAE,qGAAqG;IAClH,IAAI,EAAE,4BAAS,CAAC,IAAI,EAAE;IACtB,uBAAuB,EAAE,OAAO;IAChC,OAAO,EAAE,+DAA+D;IACxE,UAAU,EAAE,CAAC,sBAAa,CAAC,YAAY,EAAE,sBAAa,CAAC,uBAAuB,CAAC;IAC/E,OAAO,EAAE,CAAC,OAAO,CAAC;IAClB,OAAO,EAAE,CAAC,8CAAoB,CAAC;IAC/B,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const extractTextFromImage: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").PieceAuthProperty, {
|
|
2
|
+
inputMethod: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
3
|
+
file: import("@activepieces/pieces-framework").FileProperty<false>;
|
|
4
|
+
fileUrl: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
5
|
+
outputFormat: import("@activepieces/pieces-framework").StaticDropdownProperty<string, false>;
|
|
6
|
+
languageHints: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
7
|
+
objectCategories: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
8
|
+
pageRange: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
9
|
+
ocrMode: import("@activepieces/pieces-framework").StaticDropdownProperty<string, false>;
|
|
10
|
+
}>;
|
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractTextFromImage = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
7
|
+
const mime_types_1 = tslib_1.__importDefault(require("mime-types"));
|
|
8
|
+
function getFileExtension(filename) {
|
|
9
|
+
const parts = filename.split('.');
|
|
10
|
+
return parts.length > 1 ? parts.pop().toLowerCase() : '';
|
|
11
|
+
}
|
|
12
|
+
function isImageFile(filename) {
|
|
13
|
+
const ext = getFileExtension(filename);
|
|
14
|
+
return ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff', 'tif'].includes(ext);
|
|
15
|
+
}
|
|
16
|
+
function isDocumentFile(filename) {
|
|
17
|
+
const ext = getFileExtension(filename);
|
|
18
|
+
return ['pdf', 'docx', 'doc', 'xlsx', 'xls', 'pptx', 'ppt'].includes(ext);
|
|
19
|
+
}
|
|
20
|
+
function downloadFileFromUrl(url) {
|
|
21
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
var _a;
|
|
23
|
+
try {
|
|
24
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
25
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
26
|
+
url: url,
|
|
27
|
+
responseType: 'arraybuffer',
|
|
28
|
+
});
|
|
29
|
+
let fileData;
|
|
30
|
+
if (response.body instanceof ArrayBuffer) {
|
|
31
|
+
fileData = Buffer.from(response.body);
|
|
32
|
+
}
|
|
33
|
+
else if (Buffer.isBuffer(response.body)) {
|
|
34
|
+
fileData = response.body;
|
|
35
|
+
}
|
|
36
|
+
else if (typeof response.body === 'string') {
|
|
37
|
+
fileData = Buffer.from(response.body, 'binary');
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
fileData = Buffer.from(String(response.body), 'binary');
|
|
41
|
+
}
|
|
42
|
+
// Extract filename from URL or use default
|
|
43
|
+
const urlParts = url.split('/');
|
|
44
|
+
const urlFilename = ((_a = urlParts[urlParts.length - 1]) === null || _a === void 0 ? void 0 : _a.split('?')[0]) || 'file';
|
|
45
|
+
const filename = decodeURIComponent(urlFilename);
|
|
46
|
+
const ext = getFileExtension(filename);
|
|
47
|
+
const mimeType = ext ? mime_types_1.default.lookup(ext) || 'application/octet-stream' : 'application/octet-stream';
|
|
48
|
+
return { data: fileData, filename, mimeType: mimeType };
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
throw new Error(`Failed to download file from URL: ${error.message}`);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function processWithDocumentIntelligence(fileData, filename, endpoint, key, languageHints, pageRange) {
|
|
56
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
var _a;
|
|
58
|
+
const baseUrl = endpoint.endsWith('/') ? endpoint.slice(0, -1) : endpoint;
|
|
59
|
+
// Use the latest stable API version
|
|
60
|
+
const apiUrl = `${baseUrl}/formrecognizer/documentModels/prebuilt-read:analyze?api-version=2024-02-29-preview`;
|
|
61
|
+
// Build query parameters
|
|
62
|
+
const queryParams = [];
|
|
63
|
+
if (languageHints && languageHints !== 'auto') {
|
|
64
|
+
queryParams.push(`locale=${encodeURIComponent(languageHints)}`);
|
|
65
|
+
}
|
|
66
|
+
if (pageRange && pageRange !== 'auto') {
|
|
67
|
+
queryParams.push(`pages=${encodeURIComponent(pageRange)}`);
|
|
68
|
+
}
|
|
69
|
+
const fullUrl = queryParams.length > 0 ? `${apiUrl}&${queryParams.join('&')}` : apiUrl;
|
|
70
|
+
// Start analysis - Azure Document Intelligence uses Ocp-Apim-Subscription-Key header
|
|
71
|
+
const analyzeResponse = yield pieces_common_1.httpClient.sendRequest({
|
|
72
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
73
|
+
url: fullUrl,
|
|
74
|
+
headers: {
|
|
75
|
+
'Content-Type': 'application/octet-stream',
|
|
76
|
+
'Ocp-Apim-Subscription-Key': key,
|
|
77
|
+
},
|
|
78
|
+
body: fileData,
|
|
79
|
+
});
|
|
80
|
+
const operationLocationHeader = (_a = analyzeResponse.headers) === null || _a === void 0 ? void 0 : _a['operation-location'];
|
|
81
|
+
const operationLocation = Array.isArray(operationLocationHeader)
|
|
82
|
+
? operationLocationHeader[0]
|
|
83
|
+
: operationLocationHeader;
|
|
84
|
+
if (!operationLocation || typeof operationLocation !== 'string') {
|
|
85
|
+
throw new Error('Failed to get operation location from Document Intelligence API');
|
|
86
|
+
}
|
|
87
|
+
// Poll for results
|
|
88
|
+
let result = null;
|
|
89
|
+
let attempts = 0;
|
|
90
|
+
const maxAttempts = 60; // 60 seconds max wait
|
|
91
|
+
while (attempts < maxAttempts) {
|
|
92
|
+
yield new Promise((resolve) => setTimeout(resolve, 1000)); // Wait 1 second
|
|
93
|
+
const statusResponse = yield pieces_common_1.httpClient.sendRequest({
|
|
94
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
95
|
+
url: operationLocation,
|
|
96
|
+
headers: {
|
|
97
|
+
'Ocp-Apim-Subscription-Key': key,
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
if (statusResponse.body.status === 'succeeded') {
|
|
101
|
+
result = statusResponse.body.analyzeResult || { content: '' };
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
else if (statusResponse.body.status === 'failed') {
|
|
105
|
+
throw new Error('Document Intelligence analysis failed');
|
|
106
|
+
}
|
|
107
|
+
attempts++;
|
|
108
|
+
}
|
|
109
|
+
if (!result) {
|
|
110
|
+
throw new Error('Document Intelligence analysis timed out');
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function processWithComputerVision(fileData, filename, endpoint, key, languageHints, objectCategories) {
|
|
116
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
117
|
+
var _a, _b;
|
|
118
|
+
const baseUrl = endpoint.endsWith('/') ? endpoint.slice(0, -1) : endpoint;
|
|
119
|
+
// Use Read API for OCR - latest stable version
|
|
120
|
+
const readUrl = `${baseUrl}/vision/v3.2/read/analyze`;
|
|
121
|
+
// Build query parameters for language hints
|
|
122
|
+
const queryParams = [];
|
|
123
|
+
if (languageHints && languageHints !== 'auto') {
|
|
124
|
+
// Computer Vision Read API supports language parameter
|
|
125
|
+
queryParams.push(`language=${encodeURIComponent(languageHints.split(',')[0])}`);
|
|
126
|
+
}
|
|
127
|
+
const fullReadUrl = queryParams.length > 0 ? `${readUrl}?${queryParams.join('&')}` : readUrl;
|
|
128
|
+
// Start read operation
|
|
129
|
+
const readResponse = yield pieces_common_1.httpClient.sendRequest({
|
|
130
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
131
|
+
url: fullReadUrl,
|
|
132
|
+
headers: {
|
|
133
|
+
'Content-Type': 'application/octet-stream',
|
|
134
|
+
'Ocp-Apim-Subscription-Key': key,
|
|
135
|
+
},
|
|
136
|
+
body: fileData,
|
|
137
|
+
});
|
|
138
|
+
const operationLocationHeader = (_a = readResponse.headers) === null || _a === void 0 ? void 0 : _a['operation-location'];
|
|
139
|
+
const operationLocation = Array.isArray(operationLocationHeader)
|
|
140
|
+
? operationLocationHeader[0]
|
|
141
|
+
: operationLocationHeader;
|
|
142
|
+
if (!operationLocation || typeof operationLocation !== 'string') {
|
|
143
|
+
throw new Error('Failed to get operation location from Computer Vision API');
|
|
144
|
+
}
|
|
145
|
+
// Poll for OCR results
|
|
146
|
+
let readResult = null;
|
|
147
|
+
let attempts = 0;
|
|
148
|
+
const maxAttempts = 60;
|
|
149
|
+
while (attempts < maxAttempts) {
|
|
150
|
+
yield new Promise((resolve) => setTimeout(resolve, 1000));
|
|
151
|
+
const statusResponse = yield pieces_common_1.httpClient.sendRequest({
|
|
152
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
153
|
+
url: operationLocation,
|
|
154
|
+
headers: {
|
|
155
|
+
'Ocp-Apim-Subscription-Key': key,
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
if (statusResponse.body.status === 'succeeded') {
|
|
159
|
+
readResult = statusResponse.body.analyzeResult;
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
else if (statusResponse.body.status === 'failed') {
|
|
163
|
+
throw new Error('Computer Vision OCR analysis failed');
|
|
164
|
+
}
|
|
165
|
+
attempts++;
|
|
166
|
+
}
|
|
167
|
+
// Get object detection if requested
|
|
168
|
+
let objects = [];
|
|
169
|
+
if (objectCategories && objectCategories !== 'auto') {
|
|
170
|
+
try {
|
|
171
|
+
const detectUrl = `${baseUrl}/vision/v3.2/detect`;
|
|
172
|
+
const detectResponse = yield pieces_common_1.httpClient.sendRequest({
|
|
173
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
174
|
+
url: detectUrl,
|
|
175
|
+
headers: {
|
|
176
|
+
'Content-Type': 'application/octet-stream',
|
|
177
|
+
'Ocp-Apim-Subscription-Key': key,
|
|
178
|
+
},
|
|
179
|
+
body: fileData,
|
|
180
|
+
});
|
|
181
|
+
objects = detectResponse.body.objects || [];
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
// Object detection is optional, continue without it
|
|
185
|
+
console.warn('Object detection failed:', error);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Extract text content from read result
|
|
189
|
+
let content = '';
|
|
190
|
+
if (readResult && readResult.readResults) {
|
|
191
|
+
content = readResult.readResults
|
|
192
|
+
.map((page) => {
|
|
193
|
+
if (page.lines) {
|
|
194
|
+
return page.lines.map((line) => line.text).join('\n');
|
|
195
|
+
}
|
|
196
|
+
return '';
|
|
197
|
+
})
|
|
198
|
+
.filter(Boolean)
|
|
199
|
+
.join('\n\n');
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
readResult: readResult ? {
|
|
203
|
+
content,
|
|
204
|
+
pages: ((_b = readResult.readResults) === null || _b === void 0 ? void 0 : _b.map((page) => {
|
|
205
|
+
var _a, _b;
|
|
206
|
+
return ({
|
|
207
|
+
page: page.page,
|
|
208
|
+
words: ((_a = page.lines) === null || _a === void 0 ? void 0 : _a.flatMap((line) => {
|
|
209
|
+
var _a;
|
|
210
|
+
return ((_a = line.words) === null || _a === void 0 ? void 0 : _a.map((word) => ({
|
|
211
|
+
text: word.text,
|
|
212
|
+
boundingBox: word.boundingBox,
|
|
213
|
+
}))) || [];
|
|
214
|
+
})) || [],
|
|
215
|
+
lines: ((_b = page.lines) === null || _b === void 0 ? void 0 : _b.map((line) => ({
|
|
216
|
+
text: line.text,
|
|
217
|
+
boundingBox: line.boundingBox,
|
|
218
|
+
}))) || [],
|
|
219
|
+
});
|
|
220
|
+
})) || []
|
|
221
|
+
} : undefined,
|
|
222
|
+
objects,
|
|
223
|
+
};
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
function extractTextFromDocumentIntelligenceResult(result) {
|
|
227
|
+
if (result.content) {
|
|
228
|
+
return result.content;
|
|
229
|
+
}
|
|
230
|
+
// Fallback: extract from paragraphs or pages
|
|
231
|
+
if (result.paragraphs && result.paragraphs.length > 0) {
|
|
232
|
+
return result.paragraphs.map(p => p.content).join('\n\n');
|
|
233
|
+
}
|
|
234
|
+
if (result.pages && result.pages.length > 0) {
|
|
235
|
+
return result.pages
|
|
236
|
+
.map(page => {
|
|
237
|
+
if (page.lines && page.lines.length > 0) {
|
|
238
|
+
return page.lines.map(line => line.content).join('\n');
|
|
239
|
+
}
|
|
240
|
+
if (page.words && page.words.length > 0) {
|
|
241
|
+
return page.words.map(word => word.content).join(' ');
|
|
242
|
+
}
|
|
243
|
+
return '';
|
|
244
|
+
})
|
|
245
|
+
.filter(Boolean)
|
|
246
|
+
.join('\n\n');
|
|
247
|
+
}
|
|
248
|
+
return '';
|
|
249
|
+
}
|
|
250
|
+
function extractTextFromVisionResult(result) {
|
|
251
|
+
if (!result.readResult) {
|
|
252
|
+
return '';
|
|
253
|
+
}
|
|
254
|
+
if (result.readResult.content) {
|
|
255
|
+
return result.readResult.content;
|
|
256
|
+
}
|
|
257
|
+
if (result.readResult.pages && result.readResult.pages.length > 0) {
|
|
258
|
+
return result.readResult.pages
|
|
259
|
+
.map(page => {
|
|
260
|
+
if (page.lines && page.lines.length > 0) {
|
|
261
|
+
return page.lines.map(line => line.text).join('\n');
|
|
262
|
+
}
|
|
263
|
+
if (page.words && page.words.length > 0) {
|
|
264
|
+
return page.words.map(word => word.text).join(' ');
|
|
265
|
+
}
|
|
266
|
+
return '';
|
|
267
|
+
})
|
|
268
|
+
.filter(Boolean)
|
|
269
|
+
.join('\n\n');
|
|
270
|
+
}
|
|
271
|
+
return '';
|
|
272
|
+
}
|
|
273
|
+
exports.extractTextFromImage = (0, pieces_framework_1.createAction)({
|
|
274
|
+
name: 'extract_text_from_image',
|
|
275
|
+
displayName: 'Extract Text from Image/Document',
|
|
276
|
+
description: 'Extract text and visual elements from images, PDFs, and documents using Azure AI services',
|
|
277
|
+
props: {
|
|
278
|
+
inputMethod: pieces_framework_1.Property.StaticDropdown({
|
|
279
|
+
displayName: 'Input Method',
|
|
280
|
+
description: 'How to provide the file',
|
|
281
|
+
required: true,
|
|
282
|
+
options: {
|
|
283
|
+
options: [
|
|
284
|
+
{ label: 'File Upload', value: 'file' },
|
|
285
|
+
{ label: 'File URL', value: 'url' },
|
|
286
|
+
],
|
|
287
|
+
},
|
|
288
|
+
defaultValue: 'file',
|
|
289
|
+
}),
|
|
290
|
+
file: pieces_framework_1.Property.File({
|
|
291
|
+
displayName: 'File',
|
|
292
|
+
description: 'The file to process (PDF, DOCX, JPG, PNG, etc.)',
|
|
293
|
+
required: false,
|
|
294
|
+
}),
|
|
295
|
+
fileUrl: pieces_framework_1.Property.ShortText({
|
|
296
|
+
displayName: 'File URL',
|
|
297
|
+
description: 'URL of the file to process',
|
|
298
|
+
required: false,
|
|
299
|
+
}),
|
|
300
|
+
outputFormat: pieces_framework_1.Property.StaticDropdown({
|
|
301
|
+
displayName: 'Output Format',
|
|
302
|
+
description: 'What information to include in the output',
|
|
303
|
+
required: false,
|
|
304
|
+
options: {
|
|
305
|
+
options: [
|
|
306
|
+
{ label: 'Raw Text Only', value: 'raw' },
|
|
307
|
+
{ label: 'Structured Data', value: 'structured' },
|
|
308
|
+
{ label: 'Visual Metadata', value: 'metadata' },
|
|
309
|
+
{ label: 'Unified JSON (All)', value: 'unified' },
|
|
310
|
+
],
|
|
311
|
+
},
|
|
312
|
+
defaultValue: 'raw',
|
|
313
|
+
}),
|
|
314
|
+
languageHints: pieces_framework_1.Property.ShortText({
|
|
315
|
+
displayName: 'Language Hints',
|
|
316
|
+
description: 'Comma-separated language codes (e.g., "en,fr") or "auto" for automatic detection',
|
|
317
|
+
required: false,
|
|
318
|
+
defaultValue: 'auto',
|
|
319
|
+
}),
|
|
320
|
+
objectCategories: pieces_framework_1.Property.ShortText({
|
|
321
|
+
displayName: 'Object Categories',
|
|
322
|
+
description: 'Comma-separated object categories to detect (e.g., "person,car") or "auto" for all',
|
|
323
|
+
required: false,
|
|
324
|
+
defaultValue: 'auto',
|
|
325
|
+
}),
|
|
326
|
+
pageRange: pieces_framework_1.Property.ShortText({
|
|
327
|
+
displayName: 'Page Range',
|
|
328
|
+
description: 'Page range for PDFs (e.g., "1-5" or "1,3,5") or "auto" for all pages',
|
|
329
|
+
required: false,
|
|
330
|
+
defaultValue: 'auto',
|
|
331
|
+
}),
|
|
332
|
+
ocrMode: pieces_framework_1.Property.StaticDropdown({
|
|
333
|
+
displayName: 'OCR Mode',
|
|
334
|
+
description: 'OCR processing mode',
|
|
335
|
+
required: false,
|
|
336
|
+
options: {
|
|
337
|
+
options: [
|
|
338
|
+
{ label: 'Auto (Balanced)', value: 'auto' },
|
|
339
|
+
{ label: 'Fast', value: 'fast' },
|
|
340
|
+
{ label: 'High Accuracy', value: 'accurate' },
|
|
341
|
+
],
|
|
342
|
+
},
|
|
343
|
+
defaultValue: 'auto',
|
|
344
|
+
}),
|
|
345
|
+
},
|
|
346
|
+
run(context) {
|
|
347
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
348
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
349
|
+
const { inputMethod, file, fileUrl, outputFormat = 'raw', languageHints = 'auto', objectCategories = 'auto', pageRange = 'auto', } = context.propsValue;
|
|
350
|
+
// Get Azure credentials from environment
|
|
351
|
+
const docIntelligenceEndpoint = (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a['AZURE_DOCUMENT_INTELLIGENCE_ENDPOINT'])) ||
|
|
352
|
+
'https://auxeereader.cognitiveservices.azure.com/';
|
|
353
|
+
const docIntelligenceKey = (typeof process !== 'undefined' && ((_b = process.env) === null || _b === void 0 ? void 0 : _b['AZURE_DOCUMENT_INTELLIGENCE_KEY'])) ||
|
|
354
|
+
'Bt8n2RT8NWmpsopfzOsyA979n5h95BJ0Vc6s0OTbGsylaaxPfWqaJQQJ99BAACYeBjFXJ3w3AAALACOGTRx1';
|
|
355
|
+
const visionEndpoint = (typeof process !== 'undefined' && ((_c = process.env) === null || _c === void 0 ? void 0 : _c['AZURE_COMPUTER_VISION_ENDPOINT'])) ||
|
|
356
|
+
'https://auxee-dev-ai-vision.cognitiveservices.azure.com/';
|
|
357
|
+
const visionKey = (typeof process !== 'undefined' && ((_d = process.env) === null || _d === void 0 ? void 0 : _d['AZURE_COMPUTER_VISION_KEY'])) ||
|
|
358
|
+
'7f1oKNV5QDRLtOUjTOjYvncgXD7mhfvTK0H93nELZ5DN4lbT6rl8JQQJ99BIACYeBjFXJ3w3AAAFACOGqFn1';
|
|
359
|
+
// Get file data
|
|
360
|
+
let fileData;
|
|
361
|
+
let filename;
|
|
362
|
+
let mimeType;
|
|
363
|
+
if (inputMethod === 'file') {
|
|
364
|
+
if (!file || !file.data) {
|
|
365
|
+
throw new Error('File is required when using file upload method');
|
|
366
|
+
}
|
|
367
|
+
fileData = Buffer.from(file.data);
|
|
368
|
+
filename = file.filename || 'file';
|
|
369
|
+
const ext = getFileExtension(filename);
|
|
370
|
+
mimeType = ext ? (mime_types_1.default.lookup(ext) || 'application/octet-stream') : 'application/octet-stream';
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
if (!fileUrl) {
|
|
374
|
+
throw new Error('File URL is required when using URL method');
|
|
375
|
+
}
|
|
376
|
+
const downloaded = yield downloadFileFromUrl(fileUrl);
|
|
377
|
+
fileData = downloaded.data;
|
|
378
|
+
filename = downloaded.filename;
|
|
379
|
+
mimeType = downloaded.mimeType;
|
|
380
|
+
}
|
|
381
|
+
// Check file size (15MB limit)
|
|
382
|
+
const maxSize = 15 * 1024 * 1024; // 15MB
|
|
383
|
+
if (fileData.length > maxSize) {
|
|
384
|
+
throw new Error(`File size (${(fileData.length / 1024 / 1024).toFixed(2)}MB) exceeds maximum allowed size (15MB)`);
|
|
385
|
+
}
|
|
386
|
+
// Determine processing method based on file type
|
|
387
|
+
const isImage = isImageFile(filename);
|
|
388
|
+
const isDocument = isDocumentFile(filename);
|
|
389
|
+
let docIntelligenceResult = null;
|
|
390
|
+
let visionResult = null;
|
|
391
|
+
// Process with Document Intelligence for documents or when structured data is needed
|
|
392
|
+
if (isDocument || outputFormat === 'structured' || outputFormat === 'unified') {
|
|
393
|
+
try {
|
|
394
|
+
docIntelligenceResult = yield processWithDocumentIntelligence(fileData, filename, docIntelligenceEndpoint, docIntelligenceKey, languageHints !== 'auto' ? languageHints : undefined, pageRange !== 'auto' ? pageRange : undefined);
|
|
395
|
+
}
|
|
396
|
+
catch (error) {
|
|
397
|
+
console.warn('Document Intelligence processing failed:', error.message);
|
|
398
|
+
// Continue with vision if document intelligence fails
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
// Process with Computer Vision for images or when metadata is needed
|
|
402
|
+
if (isImage || outputFormat === 'metadata' || outputFormat === 'unified' || !docIntelligenceResult) {
|
|
403
|
+
try {
|
|
404
|
+
visionResult = yield processWithComputerVision(fileData, filename, visionEndpoint, visionKey, languageHints !== 'auto' ? languageHints : undefined, objectCategories !== 'auto' ? objectCategories : undefined);
|
|
405
|
+
}
|
|
406
|
+
catch (error) {
|
|
407
|
+
console.warn('Computer Vision processing failed:', error.message);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// Extract text
|
|
411
|
+
let rawText = '';
|
|
412
|
+
if (docIntelligenceResult) {
|
|
413
|
+
rawText = extractTextFromDocumentIntelligenceResult(docIntelligenceResult);
|
|
414
|
+
}
|
|
415
|
+
else if (visionResult) {
|
|
416
|
+
rawText = extractTextFromVisionResult(visionResult);
|
|
417
|
+
}
|
|
418
|
+
// Build response based on output format
|
|
419
|
+
const response = {};
|
|
420
|
+
if (outputFormat === 'raw' || outputFormat === 'unified') {
|
|
421
|
+
response.rawText = rawText;
|
|
422
|
+
}
|
|
423
|
+
if (outputFormat === 'structured' || outputFormat === 'unified') {
|
|
424
|
+
if (docIntelligenceResult) {
|
|
425
|
+
response.structuredData = {
|
|
426
|
+
pages: (_e = docIntelligenceResult.pages) === null || _e === void 0 ? void 0 : _e.map(page => {
|
|
427
|
+
var _a, _b, _c;
|
|
428
|
+
return ({
|
|
429
|
+
pageNumber: page.pageNumber,
|
|
430
|
+
words: (_a = page.words) === null || _a === void 0 ? void 0 : _a.map(w => ({
|
|
431
|
+
content: w.content,
|
|
432
|
+
boundingBox: w.boundingBox,
|
|
433
|
+
})),
|
|
434
|
+
lines: (_b = page.lines) === null || _b === void 0 ? void 0 : _b.map(l => ({
|
|
435
|
+
content: l.content,
|
|
436
|
+
boundingBox: l.boundingBox,
|
|
437
|
+
})),
|
|
438
|
+
tables: (_c = page.tables) === null || _c === void 0 ? void 0 : _c.map(t => ({
|
|
439
|
+
rowCount: t.rowCount,
|
|
440
|
+
columnCount: t.columnCount,
|
|
441
|
+
cells: t.cells.map(c => ({
|
|
442
|
+
content: c.content,
|
|
443
|
+
rowIndex: c.rowIndex,
|
|
444
|
+
columnIndex: c.columnIndex,
|
|
445
|
+
})),
|
|
446
|
+
})),
|
|
447
|
+
});
|
|
448
|
+
}),
|
|
449
|
+
paragraphs: (_f = docIntelligenceResult.paragraphs) === null || _f === void 0 ? void 0 : _f.map(p => ({
|
|
450
|
+
content: p.content,
|
|
451
|
+
boundingRegions: p.boundingRegions,
|
|
452
|
+
})),
|
|
453
|
+
keyValuePairs: (_g = docIntelligenceResult.keyValuePairs) === null || _g === void 0 ? void 0 : _g.map(kvp => {
|
|
454
|
+
var _a;
|
|
455
|
+
return ({
|
|
456
|
+
key: kvp.key.content,
|
|
457
|
+
value: (_a = kvp.value) === null || _a === void 0 ? void 0 : _a.content,
|
|
458
|
+
});
|
|
459
|
+
}),
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
if (outputFormat === 'metadata' || outputFormat === 'unified') {
|
|
464
|
+
response.visualMetadata = {
|
|
465
|
+
detectedObjects: ((_h = visionResult === null || visionResult === void 0 ? void 0 : visionResult.objects) === null || _h === void 0 ? void 0 : _h.map(obj => ({
|
|
466
|
+
object: obj.object,
|
|
467
|
+
confidence: obj.confidence,
|
|
468
|
+
boundingBox: obj.rectangle,
|
|
469
|
+
}))) || [],
|
|
470
|
+
tags: ((_j = visionResult === null || visionResult === void 0 ? void 0 : visionResult.tags) === null || _j === void 0 ? void 0 : _j.map(tag => ({
|
|
471
|
+
name: tag.name,
|
|
472
|
+
confidence: tag.confidence,
|
|
473
|
+
}))) || [],
|
|
474
|
+
styles: ((_k = docIntelligenceResult === null || docIntelligenceResult === void 0 ? void 0 : docIntelligenceResult.styles) === null || _k === void 0 ? void 0 : _k.map(style => ({
|
|
475
|
+
confidence: style.confidence,
|
|
476
|
+
isHandwritten: style.isHandwritten,
|
|
477
|
+
}))) || [],
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
if (outputFormat === 'unified') {
|
|
481
|
+
response.metadata = {
|
|
482
|
+
filename,
|
|
483
|
+
mimeType,
|
|
484
|
+
fileSize: fileData.length,
|
|
485
|
+
processedAt: new Date().toISOString(),
|
|
486
|
+
pageCount: ((_l = docIntelligenceResult === null || docIntelligenceResult === void 0 ? void 0 : docIntelligenceResult.pages) === null || _l === void 0 ? void 0 : _l.length) || ((_o = (_m = visionResult === null || visionResult === void 0 ? void 0 : visionResult.readResult) === null || _m === void 0 ? void 0 : _m.pages) === null || _o === void 0 ? void 0 : _o.length) || 1,
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
return response;
|
|
490
|
+
});
|
|
491
|
+
},
|
|
492
|
+
});
|
|
493
|
+
//# sourceMappingURL=extract-text-from-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-text-from-image.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/custom/image-document-intelligence/src/lib/actions/extract-text-from-image.ts"],"names":[],"mappings":"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"}
|