Brands ICT logo

SendOCR


Wat is OCR

OCR staat voor “Optical Character Recognition” en wordt gebruikt om papieren documenten te veranderen in digitale, zodat ze te bewerken zijn en in andere applicaties gebruikt kunnen worden. Papieren documenten zoals formulieren, brieven, contracten, facturen en pakbonnen worden in een handomdraai omgezet naar bewerkbare teksten. OCR werkt op basis van patroonherkenning. De tekst die moet worden gelezen, wordt eerst gescand. Op dat moment is de tekst nog gewoon een afbeelding. OCR-software herkent vervolgens de letters, cijfers, illustraties en kan deze informatie in een proces gebruiken.

Wat is SendOCR

SendOCR is een webservice waarbij tekst in een afbeelding kan worden herkend. SendOCR werkt op de volgende manier: een afbeelding kan worden gestuurd naar de webservice als BASE64 string en de tekst in de afbeelding wordt herkend en teruggestuurd. Doordat dit via een webservice wordt aangeboden is het eenvoudig om deze functionaliteit te integreren in een website of software applicatie Naast de OCR functionaliteit herkend SendOCR of het om een PDF gaat. Bij PDF wordt de tekst simpelweg uitgelezen en krijg je dus 100% van de orginele tekst terug.

Geinterreseerd in dit product, informeer naar de mogelijkheden door een mail te sturen naar: info@brandsict.nl

Technische documentatie SendOCR webservice



Functie: sendFile


Parameters

naam type beschrijving
username String vul in voor test: TESTTESTTEST, bij afnemen van licentie krijg je inviduele username
jobId String Hier kan je een eigen referentie meegeven
Filename String Bestandsnaam van het bestand dat je stuurt
Filetype String pdf (lowercase)
bmp
base64content String De inhoud van het bestand als gecodeerd als base64

Return waarde: OcrResultH

naam type beschrijving
sha string hash van de base64 content
OCRResultW Array De herkende woorden met posities

OCRResultW

naam type beschrijving
ocrWord String Het herkende woord
yPosition String De y positie op de pagina
xPosition String De x positie op de pagina
left String
top String
height String De hoogte van het woord in pixels
width String De breedte van het woord in pixels
line String
indexLine String
pageNumber String Pagina nummer waar het woord op staat
charindex int
wordlength int De lengte van het woord in letters


Client voorbeeld code:



Visual Dataflex


    Object myOcr is a cWSOCRService
    End_Object

    Procedure fileRead64 String sFilename
        Set_Argument_Size (40000000)
        String sBuffer
        String filecontent
        Readln channel 9 sBuffer
        Integer iLineCount
        If (SeqEof) Begin      // If we have an available sequential file channel.
            Send Stop_Box "Error!" "Cannot open file. Channel 9 is busy."
            Function_Return 0  // Cannot open file
        End
        Else Begin
            Direct_Input channel 9 ("binary: " + sFilename)

            If (not(SeqEof)) Begin   // File exists.
                Showln "File " sFilename " is open on channel 9."
                Move 0 to iLineCount
                While (not(SeqEof))
                    Increment iLineCount
                    Read_Block channel 9 sBuffer 1024
                    Move (Append(filecontent, sBuffer)) to filecontent                
                Loop           
            End
            Close_Input channel 9
            Showln "length: " (Length(filecontent))
        End

        Object oCharTranslate is a cCharTranslate
        End_Object
        String lbase64str
        Get Base64EncodeToStr of oCharTranslate (AddressOf(filecontent)) (Length(filecontent)) to lbase64str   
  
        String username
        Move "TESTTESTTEST" to username
        
        String jobida
        Move 1 to jobida
              
        tWSOCRService.OcrResultH lResponse
        Get wssendFile of myOcr username jobida sFilename "pdf" lbase64str to lResponse
               
        String word
        Integer iSize
        Move (SizeOfArray(lResponse.OcrResultWArray)) to iSize
        Showln iSize
        
        String sha 
        Move (lResponse.sha) to sha
        Showln "sha" sha
        
        tWSOCRService.NamedData[] myKVKData
        Get wsgetData of myOcr username sha "kvk" to myKVKData
        Integer iX
        For iX from 0 to ((SizeOfArray(myKVKData))-1)
           Showln myKVKData[iX].value
        Loop
         If ( SizeOfArray(myKVKData) = 0 ) Showln "geen kvk gevonden"
        
        tWSOCRService.NamedData[] myIBANData
        Get wsgetData of myOcr username sha "iban" to myIBANData
        Integer iX2
        For iX2 from 0 to ((SizeOfArray(myIBANData))-1)
           Showln myIBANData[iX2].value
        Loop
        If ( SizeOfArray(myIBANData) = 0 ) Showln "geen iban gevonden"
        
        tWSOCRService.NamedData[] myBTWData
        Get wsgetData of myOcr username sha "btwnumber" to myBTWData
        Integer iX3
        For iX3 from 0 to ((SizeOfArray(myBTWData))-1)
            Showln myBTWData[iX3].value
            
        Loop
        If ( SizeOfArray(myBTWData) = 0 ) Showln "geen btw number gevonden"
        
    End_Procedure

Python



from suds.client import Client
import base64

input_file = "test.pdf"
file_type ='pdf'
url ='http://test01.sendocr.nl:6555/?wsdl'

with open(input_file, "rb") as input_file:
	encoded_string = base64.b64encode(input_file.read())

client = Client(url,timeout=600)
response = client.service.sendFile(username = 'TESTTESTTEST', jobId='123', filename= input_file, filetype = file_type, base64content =encoded_string)
print response


PHP


index.html


/*
 * Error reporting is on for testing only, disable for a live environment
 */
ini_set("display_errors", 1);
error_reporting(E_ALL);

/* include our Send OCR class */
require_once("SendOCR.class.php");

/*
 * Create instance of class:
 * First parameter is username
 * Second is timeout time in seconds. (optional, defaults to 60)
 * Third is address of WSDL server (optional, defaults to test server)
 * Fourth is address to send HTTP requests. (optional, defaults to test server)
 */
$OCR = new sendOCR("TESTTESTTEST", 120);

/*
 * Enable debug mode
 * Calling this function disables all SOAP caching from PHP, do not use on live environment.
 */
$OCR->enableDebug();

/*
 * Send file for OCR
 * First parameter is file name
 * Second is file type (pdf or bmp ONLY)
 * Third is path to file, can be a relative or absolute path. File will be read and automatically converted to base64 to send to OCR service
 * Fourth is jobID number (optional)
 * Fifth is weather to return an object (false) or an associative array (true), optional parameter defaults to false.
 */
$Response = $OCR->sendFile("test.pdf", "pdf", "pdf-test.pdf", 1, true);
echo "<h3>Response:</h3><pre>" . print_r($Response, true) . "</pre>";

SendOCR.class.php

/*
 * public OcrResultH sendFile(String username, String jobId, String filename, String filetype, String base64content)
 */
class sendOCR{
private $service, $user, $client, $validFileTypes;
    public function __construct($user, $timeOut = 60, $addrStr="http://test01.sendocr.nl:6555/?wsdl", $location = "http://test01.sendocr.nl:6555/")
    {
        $this->service = $addrStr;
        $this->user = $user;
        $this->client = new SoapClient($this->service, array("connection_timeout"=>$timeOut, "location"=>$location));
        $this->validFileTypes = array("pdf", "bmp");
    }

    public function sendFile($fileName, $fileType, $filePath, $jobId = 0, $Assoc=false){
        $fileType = strtolower($fileType);
            if (!in_array($fileType, $this->validFileTypes)){
               throw new Exception("Invalid file type for OCR");
            }

            if (!file_exists($filePath)){
                throw new Exception("Unable to open $filePath for OCR");
            }

        $Params = array(
            'username'=>$this->user,
            'jobId'=>$jobId,
            'filename' => $fileName,
            "filetype"=>$fileType,
            'base64content'=>base64_encode(file_get_contents($filePath))
        );

        $Resp = $this->client->sendFile($Params);
            if ($Assoc == true){
                return json_decode(json_encode($Resp), true);
            }
        return $Resp;
    }

    public function enableDebug(){
            ini_set('soap.wsdl_cache_enabled',0);
            ini_set('soap.wsdl_cache_ttl',0);
    }
}



Functie: getData


Parameters

naam type beschrijving
username String vul in voor test: TESTTESTTEST, bij afnemen van licentie krijg je inviduele username
sha String De sha van het bestand waar je de betreffende data van terug wilt hebben. Deze sha krijg je in eerste instantie via sendFile
dataname String
Value name Omschrijving
kvk Geeft alle kvk's terug die in het document voorkomen
btwnumber Geeft alle btw nummer terug
iban Geeft alle iban nummers terug

Return waarde: Array of NamedData


NamedData

naam type beschrijving
sha string De sha van het bestand
namedata string de dataname van de aanvraag ( kvk, btwnumber of iban )
value string De waarde die is gevonden
type string Type dat de value is
xpos string xpositie van de value
ypos string ypositie van de value
page string pagina waar de value voorkomt