Spaces:
Running
Running
| const fs = require('fs'); | |
| const https = require('https'); | |
| async function extractTextFromImage(imageBuffer) { | |
| console.log('[DEBUG] extractTextFromImage: Starting image text extraction'); | |
| console.log('[DEBUG] Image buffer size:', imageBuffer.length, 'bytes'); | |
| return new Promise((resolve, reject) => { | |
| const base64Image = imageBuffer.toString('base64'); | |
| console.log('[DEBUG] Base64 image length:', base64Image.length); | |
| const requestData = JSON.stringify({ | |
| "contents": [ | |
| { | |
| "parts": [ | |
| { | |
| "inline_data": { | |
| "mime_type": "image/png", | |
| "data": base64Image | |
| } | |
| }, | |
| { | |
| "text": "Berikan text yang ada di gambar ini saja, tidak ada informasi lain cukup yang ada di gambar saja, jangan ada text lain kalo bukan dari gambar nya." | |
| } | |
| ] | |
| } | |
| ] | |
| }); | |
| console.log('[DEBUG] Request data prepared, length:', requestData.length); | |
| const options = { | |
| hostname: 'generativelanguage.googleapis.com', | |
| path: '/v1beta/models/gemini-2.5-flash-lite:generateContent', | |
| method: 'POST', | |
| headers: { | |
| 'x-goog-api-key': 'AIzaSyB3-2egs0udKCDX_F7I58uVRAwv7OUX1G8', | |
| 'Content-Type': 'application/json', | |
| 'Content-Length': Buffer.byteLength(requestData) | |
| } | |
| }; | |
| console.log('[DEBUG] Making request to Gemini API...'); | |
| const req = https.request(options, (res) => { | |
| console.log('[DEBUG] API Response status:', res.statusCode); | |
| console.log('[DEBUG] API Response headers:', res.headers); | |
| let data = ''; | |
| res.on('data', (chunk) => { | |
| data += chunk; | |
| }); | |
| res.on('end', () => { | |
| console.log('[DEBUG] Received all response data'); | |
| console.log('[DEBUG] Response data length:', data.length); | |
| try { | |
| const response = JSON.parse(data); | |
| console.log('[DEBUG] Response parsed successfully'); | |
| if (response.candidates && response.candidates[0] && response.candidates[0].content) { | |
| const text = response.candidates[0].content.parts[0].text; | |
| console.log('[DEBUG] β Text extracted:', text); | |
| resolve({ status: true, response: text }); | |
| } else { | |
| console.log('[DEBUG] β No text found in response'); | |
| console.log('[DEBUG] Response structure:', JSON.stringify(response, null, 2)); | |
| if (response.error) { | |
| console.log('[DEBUG] API Error:', response.error); | |
| } | |
| resolve({ status: false, response: 'Tidak ada teks yang ditemukan' }); | |
| } | |
| } catch (error) { | |
| console.error('[DEBUG] β JSON parse error:', error); | |
| console.log('[DEBUG] Raw response data:', data); | |
| reject(error); | |
| } | |
| }); | |
| }); | |
| req.on('error', (error) => { | |
| console.error('[DEBUG] β Request error:', error); | |
| reject(error); | |
| }); | |
| req.on('timeout', () => { | |
| console.error('[DEBUG] β Request timeout'); | |
| req.destroy(); | |
| reject(new Error('Request timeout')); | |
| }); | |
| req.setTimeout(30000); // 30 second timeout | |
| console.log('[DEBUG] Sending request...'); | |
| req.write(requestData); | |
| req.end(); | |
| console.log('[DEBUG] Request sent'); | |
| }); | |
| } | |
| module.exports = { extractTextFromImage }; |