Bots de conversa de Telegram amb Google Apps Script

Bots de conversa Exemples Dades pràctiques   Recursos CITCEA
Google Apps Script Projectes Interacció   Inici

Llegir el text contingut en una foto

És possible publicar una fotografia al bot de conversa i que aquest generi una variable amb el text contingut a la imatge, fent servir reconeixement òptic de caràcters (OCR). Amb aquest text, segons les aplicacions, podríem fer algun tractament, traduir-lo o altres coses que se'ns puguin acudir.

La funció que farem servir rep les dades de la fotografia enviada (obtingudes amb data.message.photo, n'obté la fotografia i la guarda en un document de Google Drive amb l'opció de reconeixement òptic de caràcters activada. Després obre el fitxer, n'extreu el text i marca el fitxer com esborrat. Es fa servir un bloc try-catch per si hi ha algun problema en la gestió del reconeixement òptic.

En aquesta funció s'empra el servei Drive. Si és la primera vegada que el fem servir al nostre entorn de Google Apps Script ens caldrà habilitar-lo.

function TextOcr(foto){
  try{
    // La foto es recull en forma de vector
    // Normalment el darrer element del vector és el que té millor resolució
    var llarg = foto.length;
    var fitxer = foto[llarg - 1].file_id;
    // Demanem la imatge a Telegram
    var url_document = telegramUrl + "/getFile?file_id=" + fitxer;
    // Recollim la imatge rebuda
    var document = UrlFetchApp.fetch(url_document);
    // Recull el text rebut
    var json_document= document.getContentText();
    // Tracta el JSON rebut
    var dades = JSON.parse(json_document);
    // Ruta del document
    var ruta_document = dades.result.file_path;
    // Adreça completa del fitxer
    var documentUrl = "https://api.telegram.org/file/bot" + token + "/" + ruta_document;
    // Agafem el BLOB de la imatge
    var imatge = UrlFetchApp.fetch(documentUrl).getBlob();
    var file = {
          title: 'OCR File',
          mimeType: 'image/png'
        };  // configurem el nom i el tipus del document 
    // Guardem la image en un document de Google Drive amb l'opció d'OCR activada
    file = Drive.Files.insert(file, imatge, {ocr: true});
    // Obrim el fitxer
    var doc = DocumentApp.openById(file.id);
    // Llegim el text del Document
    var text_igm = doc.getBody().getText();
    // Un cop llegit el text, marquem el fitxer com a esborrat
    DriveApp.getFileById(file.id).setTrashed(true);
    return text_igm;
  } catch(err){
    return err; 
  }  
}

Cal preveure la possibilitat que la funció retorni una cadena buida en cas que la imatge no tingui cap text reconeixible.

Si emprem Telegram en un dispositiu mòbil, enviarem la fotografia picant la icona del clip

Clip

i triant quina és la imatge que volem enviar. Si fem servir Telegram a l'ordinador, a més de l'opció ja comentada, podem arrossegar la imatge sobre el xat corresponent i se'ns presentaran diverses opcions

Telegram

i triarem la que fa referència a fotografies.

Si li enviem la imatge següent:

Cartell

Obtindrem el següent resultat:

RECOLLIR TIQUET
RECOGER TIQUE PRENDRE LE TICKET
TAKE A TICKET

En aquest exemple hi ha un programa complet que fa servir aquesta funció.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.