def analyzeDocumentWithTemplate(self, cr, uid, documentId, templateId, context): # Whether templateId is valid or not # Remove previous properties ids = self.pool.get('nan.document.property').search( cr, uid, [('document_id','=',documentId)], context=context ) self.pool.get('nan.document.property').unlink( cr, uid, ids, context ) if templateId: template = self.pool.get('nan.template').getTemplateFromId( cr, uid, templateId, context ) documents = self.read(cr, uid, [documentId], context=context) if not documents: return document = documents[0] fp, image = tempfile.mkstemp() fp = os.fdopen( fp, 'wb+' ) try: fp.write( base64.decodestring( document['datas'] ) ) finally: fp.close() recognizer = Recognizer() recognizer.recognize( QImage( image ) ) doc = recognizer.extractWithTemplate( image, template ) for box in doc.boxes: obj.create(cr, uid, { 'name': box.templateBox.name, 'value': box.text, 'document_id': document['id'], 'template_box_id': box.templateBox.id }, context) self.executeAttachs( cr, uid, [documentId], context ) self.executeActions( cr, uid, [documentId], True, context )
def scanDocumentWithTemplate(self, cr, uid, documentId, templateId): # Whether templateId is valid or not # Remove previous properties obj = self.pool.get('nan.document.property') ids = obj.search(cr, uid, [('document', '=', documentId)]) obj.unlink(cr, uid, ids) if templateId: # Initialize Ocr System (Gamera) initOcrSystem() template = self.pool.get('nan.template').getTemplateFromId( cr, uid, templateId) documents = self.read(cr, uid, [documentId]) if not documents: return document = documents[0] fp, image = tempfile.mkstemp() fp = os.fdopen(fp, 'wb+') fp.write(base64.decodestring(document['datas'])) fp.close() recognizer = Recognizer() recognizer.recognize(QImage(image)) doc = recognizer.extractWithTemplate(image, template) for box in doc.boxes: obj.create( cr, uid, { 'name': box.templateBox.name, 'value': box.text, 'document': document['id'], 'template_box': box.templateBox.id }) self.executeAttachs(cr, uid, [documentId]) self.executeActions(cr, uid, [documentId], True) cr.commit()