PenReader Handwriting
Recognition Technology


The most precise and fast recognition


42 supported languages


The highest level of accuracy


Millions of users since 1997


  • Technology overview

    PenReader handwriting recognition technology started as early as 1968, when a group of Russian scientists established the idea of handwritten text machine recognition and worked out the fundamental Zenkin-Petrov’s recognition algorithm. This algorithm underlies the first and most primitive handwriting recognition instrument Optical Correcting Recognition Universal System (OCRUS). This tool was used to recognize ancient Tibetan text automatically and convert it into the digital format for further detailed scientific analysis.

    While a user is writing with a fingertip on a touchscreen surface, PenReader is doing a great job – it collects and analyzes coordinates of the finger movements, then converting the data into print characters. Sound easy, doesn't it? But in fact this work is unbelievably resource-consuming. PenReader calculates about 5630 execution paths to get the most precise coordinates and performs 66852 statements to convert these coordinates into print-like text.

    Moreover PenReader has its own specific set of recognition rules for 42 languages and this list is constantly is being populated.

    PenReader history

    Optical Character Recognition Universal System (OCRUS) created

    1968 1984 1996 1997 1999 2001 2004 2007 2011 2014

    Zenkin-Petrov’s Algorithm of handwritten recognition Optical Character Recognition Universal System (OCRUS) created PenReader development started at Paragon Software The first version was released for Apple Newton PenReader was ported on Windows Mobile PenReader engine was able to recognize 28 languages Orthographical correction of recognition results was added. Added cursive text recognition to PenReader for Windows Mobile devices. PenReader became available for Android and iOS devices. PenReader is coming for Tizen multi-device platform. PenReader engine now supports In-Vehicle
    Infotainment systems integration.


    List of supported languages:

    • Albanian
    • Arabic
    • Armenian
    • Belarusian
    • Bulgarian
    • Catalan
    • Chinese
    • Croatian
    • Czech
    • Danish
    • Dutch
    • English
    • Esperanto
    • Estonian
    • Finnish
    • French
    • Georgian
    • German
    • Greek
    • Hebrew
    • Hungarian
    • Icelandic
    • Italian
    • Japanese
    • Kazakh
    • Korean
    • Latvian
    • Lithuanian
    • Maltese
    • Norwegian
    • Polish
    • Portuguese
    • Romanian
    • Russian
    • Slovak
    • Slovenian
    • Spanish
    • Swedish
    • Thai
    • Turkish
    • Ukrainian
    • Welsh



  • Online API

    PenReader SDK

    PenReader Handwriting Recognition SDK is a set of necessary core engine APIs and instructions for interaction with the recognition engine, and includes:

    • Core PenReader engine
    • API for C language
    • Set of examples

    Online API

    In order to receive access to the PenReader Online API, please contact our managers at penreader_sdk@penreader.com to receive login and password information for the online version of the SDK once it is available. You will receive a set of http commands to send strokes and receive recognition results, which will allow you to evaluate the quality of PenReader’s handwriting recognition.

    1. Request format

    HTTP POST request is sent to http://engine.penreader.com/api, its body should be a JSON of the following format:

     
    							
    							
    							

    {"language":"english", "mode":"letter", "points":[[[0,0], [100,100]],[[0,0]]], "auth_token":"your_hex_token"}

    language* - language name, case insensitive

    mode - recognition mode, may have one of the following values:

    letter - letter-by-letter recognition

    separated - separate characters recognition

    solid** - joint-up recognition

    points* - an array of strokes. Each stroke is an array of points. A point is represented by a two-element array of coordinates [x, y].

    auth_token* -a key containing 32-character hex-sequence

    * - is mandatory for each request

    ** - used as a default value

    2. Response format

    In case a request has been successfully processed, the service sends status 200 OK along with a recognized phrase in JSON format:

     
    							
    							
    							

    {"data":"recognized phrase"}

    In the case of an error response is of the following format:

     
    							
    							
    							

    {"error":"error message"}

    3. api usage example

     
    							
    							
    							

    #!/bin/ruby

    require 'json'
    require 'net/http'

    language = 'english'
    token = '0123456789abcdef0123456789abcdef' # this is like login/password pair
    host = 'engine.penreader.com'
    port = 80

    # parsing the file with data. it contains points coordinates and initial phrase, separated by \t
    line = File.read('./data.txt')
    points, char_codes = line.split("\t").map {|json| JSON.parse(json)}
    should_be = char_codes.map{|code| code.chr(Encoding::UTF_8)}.join

    # making http post request
    start_time = Time.now
    http = Net::HTTP.new(host, port)
    request = Net::HTTP::Post.new('/api')
    request.body = {:language => language, :points => points, :auth_token => token}.to_json
    raw_response = http.start {|h| h.request(request)}
    response = JSON.parse raw_response.body # response body is also in json format
    recognition_time = (Time.now.to_f - start_time.to_f).round(2)

    text = response['data']
    puts "should be: #{should_be}"
    puts "response : #{text}"
    # sometimes case may differ
    if text.downcase == should_be.downcase
      puts "Success!!"
    else
      puts "Test failed!!"
    end
    puts "Recognition time: #{recognition_time}"

    The following archive contains a file with input data to be used in the example: penreader_sdk.zip




  • Demo Recognition
    Язык:
    Режим:
    Таймаут:

    Text field:

  • Contacts

    Contact us

    If you would like to know more about PenReader SDK or have any cooperation offers, please mail us: technology@penreader.com

    Address:

    Paragon Software GmbH,
    Heinrich-von-Stephan-Str. 5c
    79100 Freiburg, Germany
    9:00 a.m. - 5:00 p.m.
    Monday - Friday (except holidays)

    Sales:

    Tel: +49-(0)761-59018-201

    Corporate Sales:

    Tel: +49-(0)761-59018-202
    Fax: +49-(0)761-59018-130








© Paragon Software (Smart Handheld Devices Division) 1998 - 2014, Paragon Software Group, All rights reserved