US20180129877A1 - Digitized handwriting sample ingestion systems and methods - Google Patents
Digitized handwriting sample ingestion systems and methods Download PDFInfo
- Publication number
- US20180129877A1 US20180129877A1 US15/866,314 US201815866314A US2018129877A1 US 20180129877 A1 US20180129877 A1 US 20180129877A1 US 201815866314 A US201815866314 A US 201815866314A US 2018129877 A1 US2018129877 A1 US 2018129877A1
- Authority
- US
- United States
- Prior art keywords
- code point
- handwriting
- sample
- code
- routine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V30/00—Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
- G06V30/10—Character recognition
- G06V30/32—Digital ink
- G06V30/36—Matching; Classification
- G06V30/387—Matching; Classification using human interaction, e.g. selection of the best displayed recognition candidate
-
- G06K9/00436—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/03—Arrangements for converting the position or the displacement of a member into a coded form
- G06F3/041—Digitisers, e.g. for touch screens or touch pads, characterised by the transducing means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0487—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser
- G06F3/0488—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures
- G06F3/04883—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures for inputting data by handwriting, e.g. gesture or text
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K15/00—Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
-
- G06K9/00174—
-
- G06K9/00187—
-
- G06K9/00194—
-
- G06K9/00416—
-
- G06K9/222—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V30/00—Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
- G06V30/10—Character recognition
- G06V30/14—Image acquisition
- G06V30/142—Image acquisition using hand-held instruments; Constructional details of the instruments
- G06V30/1423—Image acquisition using hand-held instruments; Constructional details of the instruments the instrument generating sequences of position coordinates corresponding to handwriting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V30/00—Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
- G06V30/10—Character recognition
- G06V30/32—Digital ink
- G06V30/333—Preprocessing; Feature extraction
- G06V30/347—Sampling; Contour coding; Stroke extraction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/30—Writer recognition; Reading and verifying signatures
- G06V40/37—Writer recognition; Reading and verifying signatures based only on signature signals such as velocity or pressure, e.g. dynamic signature recognition
- G06V40/376—Acquisition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/30—Writer recognition; Reading and verifying signatures
- G06V40/37—Writer recognition; Reading and verifying signatures based only on signature signals such as velocity or pressure, e.g. dynamic signature recognition
- G06V40/382—Preprocessing; Feature extraction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/30—Writer recognition; Reading and verifying signatures
- G06V40/37—Writer recognition; Reading and verifying signatures based only on signature signals such as velocity or pressure, e.g. dynamic signature recognition
- G06V40/382—Preprocessing; Feature extraction
- G06V40/388—Sampling; Contour coding; Stroke extraction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K2215/00—Arrangements for producing a permanent visual presentation of the output data
Definitions
- the present disclosure relates to computer handwriting analysis and synthesis, and more particularly, to systems and methods for digitized handwriting data collection and analysis.
- variable glyph representation may be used to mimic an individual's handwriting, such as the systems and methods described in U.S. Pat. Nos. 8,351,700 and 8,699,794.
- FIG. 1 illustrates an exemplary network topology of a client/server-based handwriting ingestion system in accordance with various embodiments.
- FIG. 2 illustrates a functional block diagram of an exemplary client computing device, suitable for use with the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIG. 3 illustrates a functional block diagram of an exemplary server computing device, suitable for use with the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIG. 4 illustrates a graphical representation of the relationship between character code points, visual representations of the character code points, handwritten glyph representations of the character code points, and the stroke structure of such handwritten glyphs.
- FIGS. 5A-K illustrate a general schematic diagram of an exemplary handwriting ingestion user interface suitable for use with the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIG. 6 illustrates a graphical representation of the relationship between character code points, handwritten glyph representations of the character code points, and the stroke and stroke segment structure of such handwritten glyphs.
- FIGS. 7A-B illustrate a visual illustration of stroke dimensional data obtained by various aspects of the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIG. 8 illustrates a series of data communications between various components of the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIG. 9 illustrates a functional block diagram of a handwriting sample ingestion routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIG. 10 illustrates a functional block diagram of an initial sample collection sub-routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIGS. 11A-B illustrate a functional block diagram of a handwriting code point set completeness sub-routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIG. 12 illustrates a functional block diagram of a supplemental sample collection sub-routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIGS. 13A-B illustrate a functional block diagram of a handwriting sample collection sub-routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIG. 14 illustrates an exemplary network topology of a client/server-based handwriting generation system in accordance with various embodiments.
- FIGS. 15A-D illustrate a general schematic diagram of an exemplary handwriting generation user interface suitable for use with the client/server-based handwriting generation system in accordance with various embodiments.
- FIG. 16 illustrates a series of data communications between various components of the client/server-based handwriting generation system in accordance with various embodiments.
- FIG. 17 illustrates a functional block diagram of a sample text intake routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments.
- FIG. 18 illustrates a functional block diagram of a text-to-handwriting routine which may be implemented by a handwriting generation server of the client/server-based handwriting generation system in accordance with various embodiments.
- FIG. 19 illustrates a functional block diagram of a code point sample selection sub-routine which may be implemented by a handwriting generation server of the client/server-based handwriting generation system in accordance with various embodiments.
- FIGS. 20A-B illustrate a functional block diagram of a ligature stitching sub-routine which may be implemented by a handwriting generation server of the client/server-based handwriting generation system in accordance with various embodiments.
- FIG. 21 illustrates a functional block diagram of a token assembly sub-routine which may be implemented by a handwriting generation server of the client/server-based handwriting generation system in accordance with various embodiments.
- FIG. 22 illustrates a functional block diagram of a token assembly sub-routine which may be implemented by a handwriting generation server of the client/server-based handwriting generation system in accordance with various embodiments.
- FIG. 1 illustrates a first exemplary client/server-based handwriting ingestion system 100 in accordance with various embodiments.
- Client devices 200 A-B and a remote front-end server 300 A are in data communication with a network 103 .
- network 103 may include the Internet, one or more local area networks (“LANs”), one or more wide area networks (“WANs”), cellular data networks, and/or other data networks.
- Network 103 may, at various points, be a wired and/or wireless network.
- Remote front-end server 300 A may be in data communication with a remote handwriting ingestion server 300 B and an administrative data store 105 .
- Remote handwriting ingestion server 300 B may be in data communication with a handwriting sample set data store 108 .
- client devices 200 may be networked computing devices having form factors including general purpose computers (including “desktop,” “laptop,” “notebook,” “tablet” computers, or the like); mobile phones; watches, glasses, or other wearable computing devices; or the like.
- general purpose computers including “desktop,” “laptop,” “notebook,” “tablet” computers, or the like
- mobile phones including “desktop,” “laptop,” “notebook,” “tablet” computers, or the like
- watches, glasses, or other wearable computing devices or the like.
- two client devices are shown, one of which is depicted as a laptop computer and the other of which is depicted as a tablet computer.
- there may be many more client devices 200 there may be many more client devices 200 .
- the primary functional components of an exemplary, form-factor-independent client device 200 are described below in reference to FIG. 2 .
- Client device 200 A may be in data communication with an external digitizing surface device 218 A and a digitizing marking device (e.g. a “stylus”) 220 A. Digitizing marking device 220 A may be in data communication with client device 200 A via external digitizing surface device 218 A or may be in direct data communication with the client device (as indicated by dotted lines).
- a digitizing marking device e.g. a “stylus”
- Digitizing marking device 220 A may be in data communication with client device 200 A via external digitizing surface device 218 A or may be in direct data communication with the client device (as indicated by dotted lines).
- Client device 2001 includes a built in digitizing surface device 218 B and may be in data communication with a digitizing marking device 220 B.
- remote front-end server 300 A and remote handwriting ingestion server 300 B may be networked computing devices generally capable of accepting requests over network 108 , e.g. from client devices 200 , each other, various databases, and/or other networked computing devices, such as a remote handwriting generation server (not shown), and providing responses accordingly.
- a remote handwriting generation server not shown
- the primary functional components of an exemplary remote server 300 such as remote front-end server 300 A and remote handwriting ingestion server 3001 , are described below in reference to FIG. 3 .
- FIG. 2 illustrates several components of an exemplary client device 200 , such as any of client devices 200 A-B, is illustrated.
- a client device 200 may include many more components than those shown in FIG. 2 . However, it is not necessary that all of these generally conventional components be shown in order to disclose an illustrative embodiment.
- the data communications between various components of client device 200 may be accomplished by wired and/or wireless connections
- exemplary client device 200 includes a central processing unit 203 in data communication with memory 205 via a bus 208 .
- Central processing unit 203 is an electronic circuit designed to carry out instructions of a computer program, e.g. Obtained from memory 205 , by performing the basic arithmetic, logical, control and input/output (I/O) operations specified by the program's instructions.
- Memory 205 generally comprises some or all of random access memory (RAM), read-only memory (ROM, and/or a permanent mass storage device, such as a disk drive, flash memory, or the like.
- Bus 208 is a communication system that transfers data between components within client device 200 , and encompasses any related hardware components (wire, optical fiber, etc.) and software, including communication protocols.
- Client device 200 may also include a network interface 210 for connecting to a network such as network 103 , one or more optional user input device(s) 213 , e.g. an alphanumeric keyboard, keypad, a mouse or other pointing device, a touchscreen, and/or a microphone, (or a user input port for connecting an external user input device), an optional digitizing surface device 215 , such as digitizing surface device 215 B, (or a port for connecting an external digitizing surface device, such as digitizing surface device 215 A), an optional digitizing marking device (or a port for connecting to an external digitizing marking device, such as digitizing marking devices 218 A-B), and the like, all interconnected, along with the network interface 210 , to central processing unit 203 and memory 205 via bus 208 .
- a network interface 210 for connecting to a network such as network 103
- one or more optional user input device(s) 213 e.g. an alphanumeric keyboard, keypad, a mouse or other pointing
- Memory 205 of exemplary client device 200 may store program code, executable by central processing unit 203 , corresponding to an operating system 223 , as well as program code corresponding to various software applications, such as a browser application 225 , a handwriting ingestion application 228 , and other software applications (not shown).
- Operating system 223 and such various software applications may be loaded into memory 205 via network interface 210 or via a computer readable storage medium 230 , such as a hard-disk drive, a solid-state drive, an optical disc, a removable memory card, and/or the like.
- Browser application 225 is a software application for retrieving, presenting, and traversing information resources on a network, such as network 108 .
- browser application 225 may be primarily intended to use the World Wide Web, it may also be used to access information resources provided by remote servers in private networks.
- An information resource may be a web page, an image, a video, or other piece of content and may be identified by a Uniform Resource Identifier (URI/URL) on network 108 .
- URI/URL Uniform Resource Identifier
- An information resource may also provide browser application 225 executable program code for web applications, i.e. a software application that runs in and is rendered by browser application 225 .
- operating system 223 manages the hardware and software resources of client device 200 and provides common services and memory allocation for various software applications, such as research study data acquisition and quality control application 228 .
- software applications such as research study data acquisition and quality control application 228 .
- For hardware functions such as network communications via network interface 210 , receiving data via input 213 , outputting data via optional display 215 , and allocation of memory 205 for various software applications, such as handwriting ingestion application 228 , operating system 223 acts as an intermediary between software executing on the client device and the device's hardware.
- operating system 223 may cause a representation of available software applications, such as browser application 225 and handwriting ingestion 228 , to be presented to a user of client device 200 via display 215 . If client device 200 obtains an indication from a user, e.g. via user input 213 , a desire to use handwriting ingestion application 228 , operating system 223 may instantiate a handwriting ingestion application process (not shown), i.e. cause central processing unit 203 to begin executing the executable instructions of the handwriting ingestion application and allocate a portion of memory 205 for its use.
- a handwriting ingestion application process not shown
- browser application 225 may act as an intermediary between a software service operating on a remote server and the operating system 223 .
- a software service equivalent of handwriting ingestion application 228 may be executing on front-end server 400 A.
- a client device 200 may be any of a great number of devices capable of communicating with network 103 and executing instructions for performing handwriting ingestion application 228 .
- FIG. 3 illustrates several components of an exemplary server 300 , such as front-end server 300 A and handwriting ingestion server 300 B, in accordance with at least one exemplary embodiment are illustrated.
- a server 300 may include many more components than those shown in FIG. 3 . However, it is not necessary that all of these generally conventional components be shown in order to disclose an illustrative embodiment.
- a server 300 includes a central processing unit 303 and memory 305 connected by a bus 308 .
- Central processing unit 303 is an electronic circuit designed to carry out instructions of a computer program, e.g. obtained from memory 305 , by performing the basic arithmetic, logical, control and input/output (I/O) operations specified by the program's instructions.
- Memory 305 may generally include some or all of random access memory (RAM), read-only memory (ROM), and/or a permanent mass storage device, such as a disk drive, flash memory, or the like.
- Bus 308 is a communication system that transfers data between components within exemplary server 300 , and includes any related hardware components (wire, optical fiber, etc.) and software, including communication protocols.
- Server 300 may also include a network interface 310 for connecting to a network such as network 103 , one or more optional user input device(s) 313 , e.g. an alphanumeric keyboard, keypad, a mouse or other pointing device, a touchscreen, and/or a microphone, (or a user input port for connecting an external user input device) and/or an optional display 315 (or a display port for connecting an external display device), both interconnected along with the network interface 310 via bus 308 .
- a network interface 310 for connecting to a network such as network 103
- one or more optional user input device(s) 313 e.g. an alphanumeric keyboard, keypad, a mouse or other pointing device, a touchscreen, and/or a microphone, (or a user input port for connecting an external user input device) and/or an optional display 315 (or a display port for connecting an external display device), both interconnected along with the network interface 310 via bus 308 .
- Memory 305 may store an operating system 320 and program code for various software services 323 .
- front-end server 300 A may include executable instructions for performing user session management service 323 A (indicated by dotted lines) and handwriting ingestion server 300 B may include executable instructions for performing handwriting ingestion service 323 B (indicated by dotted lines).
- Program code for these and other such software services may be loaded into memory 305 from a non-transient computer readable storage medium 325 using a drive mechanism (not shown) associated with the non-transient computer readable storage medium, such as, but not limited to, a DVD/CD-ROM drive, memory card, or the like.
- Software components may also be loaded into memory 304 via the network interface 310 .
- a server 300 may also communicate via bus 308 with a database (not shown), such as admin database 105 and/or trial data database 108 , or other local or remote data store.
- operating system 320 manages the hardware and software resources of server 300 and provides common services and memory allocation for various software services, such as user session management service 323 A or handwriting ingestion service 323 B.
- software services such as user session management service 323 A or handwriting ingestion service 323 B.
- operating system 320 may act as an intermediary between software executing on server 300 and the server's hardware.
- a server may be any of a great number of devices capable of communicating with network 103 and executing instructions for performing user session management service 323 A and/or handwriting ingestion service 323 B.
- a server 300 may comprise one or more replicated and/or distributed physical or logical devices.
- one or more of front-end server 300 A and handwriting ingestion server 300 B may be embodied by the same physical device.
- an instance of client handwriting ingestion application 228 operating on a client device such as client devices 200 A-B, remote user session management service 323 A operating on front-end server 300 A, and remote handwriting ingestion service 323 B operating on handwriting ingestion server 300 B (collectively a client/server-based handwriting ingestion system) in accordance with the present embodiments may operate to create a code point sample data set of a user's handwriting comprehensive enough to allow the provider to obtain text data including a message from a user and generate an image, e.g.
- Such a client/server based handwriting ingestion system may be operated in furtherance of a handwriting digitization service provider (not shown) providing handwriting reproduction services.
- Instantiations of client handwriting ingestion application 228 may act as an interface between a user of client device 200 and user session management service 323 A operating on front-end server 300 A.
- client handwriting ingestion application 228 may send a “create new session” request to user session management service 323 A, for example including identifying information for client device 200 , identifying information for the particular instantiation of client handwriting ingestion application 228 , and/or user-account credentials such as a user name and password, obtained from the user or stored in memory 205 . If presented, the user-account credentials may be associated with an existing user account or with a generic, temporary, and/or anonymous “guest” account.
- User session management service 323 A may create a corresponding user session (not shown) associated with the particular instantiation of client handwriting ingestion application 228 , identified by a user-session identifier (referred to herein as a “session ID”) and may obtain user account information, such as a user identifier, associated with the provided identifying information from administrative data store 105 and provide a response to client handwriting ingestion application 228 , which may include information related to features and services provided by the handwriting digitization service provider which the user-account associated with the user-account credentials are authorized to access.
- a user-session identifier referred to herein as a “session ID”
- user account information such as a user identifier
- Client handwriting ingestion application 228 may then present the user with a menu of options, e.g. via optional display 215 , and wait for the user to indicate a selection of a specific option, e.g. via optional input 213 .
- options may include obtaining a new handwriting sample, viewing a measure of completeness of a handwriting sample set associated with the user identifier, creating a new handwriting sample set, and the like.
- client handwriting ingestion application 215 may process the selection and generate a request corresponding to the selected option.
- requests may be provided to user session management service 323 A operating on front-end server 300 A, e.g. via network 103 .
- User session management service 323 A may process the requests, provide related internal requests to handwriting ingestion service 323 B, obtain responses from handwriting ingestion service 323 B, provide responses to client handwriting ingestion application 228 and store records of these requests and responses and other related data, e.g. in administrative data store 105 indexed by a user identifier and/or a user session identifier.
- the handwriting ingestion system may identify a desired style of communication for a user, such as general English language communication, formal Japanese language communication, technical Arabic language communication, and the like. The handwriting ingestion system may then determine a code point sub-set, applicable to the desired style of communication, from one or more universal code point sets, such as the set of standard Unicode character code points.
- the handwriting ingestion system may collect one or more digitized samples of a handwritten glyphs corresponding to the code point.
- handwriting ingestion application 228 may provide a user interface that presents a user of client device 200 with a visual display of one or more code points and instructs the user to write out glyphs corresponding to the one or more code points using digitizing marking device 220 to make one or more strokes on digitizing surface device 218 .
- a digitized glyph sample may be made up of one or more strokes and multiple digitized glyph samples may also be contained within a single stroke.
- handwriting ingestion application 228 may (1) accommodate glyph samples being made up of multiple, non-sequential strokes, for example if the digitizing marking device leaves the digitizing surface device during the glyph sample capture (as may be the case when hand writing the lower case English letters “f,” “i,” “j,” “k,” “t,” and “x” for example) (2) provide a user with the opportunity to segment strokes into individual glyphs, and then provide the user with the opportunity to associate one or more strokes and/or one or more stroke segments with a code point
- the word “This” 403 is made up of four sequential characters represented by four distinct code points: a “T” code point 405 A, an “h” code point 405 B, an “i” code point 405 C, and a “s” code point 405 D; a corresponding digitized hand-written sample 408 of the word “This” may be made up of four sequential glyphs: a “T” glyph 410 A, an “h” glyph 410 B, an “i” glyph 410 C, and an “s” glyph 410 D.
- the digitized hand-written sample of the word “This” is made up of four strokes 413 A-D, however strokes 413 A-D do not respectively correspond to glyphs 410 A-D. Rather, a ‘horizontal’ stroke 413 A and ‘vertical’ stroke 413 B together make up “T” glyph 410 A; a third stroke 413 C makes up “h” glyph 410 B, “s” glyph 410 D, and part of “i” glyph 410 C. A ‘dot’ stroke 413 D makes up the remainder of the “i” glyph 410 C.
- the user may then selectively segment third stroke 413 C into an “h” stroke segment 415 A, an “i” stroke segment 415 B, and an “s” stroke segment 415 C.
- the user may then associate ‘horizontal’ stroke 413 A and ‘vertical’ stroke 413 B as a digitized glyph sample for “T” code point 405 A, “h” stroke segment 415 A as a digitized glyph sample for “h” code point 405 B, “i” stroke segment 415 B and ‘dot’ stroke 413 D as a digitized glyph sample for “i” code point 405 B, and “s” stroke segment 415 C as a digitized glyph sample for “s” code point 405 D.
- the handwriting ingestion system may record code point sample contextual data related to the digitized glyph sample. For example, the handwriting ingestion system may record where the digitized glyph sample was collected within the context of a group of glyphs (e.g. at the beginning, or in the middle of a sequence of glyphs written as a continuous stroke), whether the previous glyph, if any, had an upward or downward exit angle (described in more detail below) and a low or high exit point, and whether the subsequent glyph, if any, had an upward or downward entry angle and a low or high entry point, and the like.
- code point sample contextual data related to the digitized glyph sample. For example, the handwriting ingestion system may record where the digitized glyph sample was collected within the context of a group of glyphs (e.g. at the beginning, or in the middle of a sequence of glyphs written as a continuous stroke), whether the previous glyph, if any, had an upward or downward exit angle (described in more detail below) and a low
- the handwriting ingestion system may also record stroke dimension data. For example, for each stroke, the handwriting ingestion system may obtain and record data values relating to the stroke overall temporal duration; the stroke's relative horizontal displacement over time, the stroke's relative vertical displacement displacement over time, the stroke's relative rotational displacement over time, the stroke's relative angular displacement over time, and the stroke's downward pressure over time.
- Each glyph sample may be added to a code point sample data set associated with the user (e.g. via a user identifier).
- the handwriting ingestion system will continue to collect digitized glyph samples for a given code point until the system determines it can reproduce a full range of glyph variations of the code point.
- FIGS. 5A-K illustrate various states of an exemplary user interface 500 provided by handwriting ingestion application 228 operating on a client device 200 for enabling a user of the client device to selectively provide digitized samples of the user's handwriting via a digitizing surface device in conjunction with a digitizing marking device.
- Exemplary user interface 500 may, for example, be rendered by display 215 in response to the execution of instructions of an instantiation of client handwriting ingestion application 228 operating on a client device 200 .
- Handwriting ingestion UI 500 may be rendered in a window 503 including an instructive prompt 505 , a sample text display 508 , and an input reproduction rendering display 510 .
- handwriting ingestion UI 500 is illustrated in an initial prompt state 500 A.
- instructive prompt 505 displays text instructing a user operating client device 200 to input the sample text (“This is a test”) displayed in sample text display 508 via digitizing surface device 218 and digitizing marking device 220 .
- the displayed sample text includes: one instance of a “T” code point; one instance of an “h” code point; two instances of an “i” code point; three instances of an “s” code point; one instance of an “a” code point; two instances of a “t” code point; and one instance of an “e” code point.
- handwriting ingestion UI 500 is illustrated in a first potential sample ingestion display state 500 B.
- input reproduction rendering display 510 displays a visual rendering of input data corresponding to a first stroke 513 A, e.g. obtained via digitizing surface device 218 in combination with digitizing marking device 220 .
- the characteristics of such input data are discussed in more detail below, particularly in reference to FIGS. 7A-B .
- handwriting ingestion UI 500 is illustrated in a second potential sample ingestion display state 500 C.
- input reproduction rendering display 510 displays a visual rendering of input data corresponding to first stroke 513 A and a second stroke 513 B, e.g. obtained via digitizing surface device 218 in combination with digitizing marking device 220 subsequent to the first stroke.
- first and second strokes 513 A-B make up a glyph sample corresponding to the first, “T” code point of the sample text.
- handwriting ingestion UI 500 is illustrated in a third potential sample ingestion display state 500 D.
- input reproduction rendering display 510 displays a visual rendering of input data corresponding to first stroke 513 A, second stroke 513 B, and a third stroke 513 C.
- third stroke 513 C includes glyph samples corresponding to the “h” code point, part of the “i” code point, and one of the “s” code points of the sample text.
- handwriting ingestion UI 500 is illustrated in a fourth potential sample ingestion display state 500 E.
- input reproduction rendering display 510 displays a visual rendering of input data corresponding to first stroke 513 A, second stroke 513 B, third stroke 513 C, and a fourth stroke 513 D.
- fourth stroke 513 D completes the glyph sample of the “i” code point of the sample text began by stroke 513 C.
- handwriting ingestion UI 500 is illustrated in a fifth potential sample ingestion display state 500 F.
- input reproduction rendering display 510 displays a visual rendering of input data corresponding to first stroke 513 A, second stroke 513 B, third stroke 513 C, and fourth stroke 513 D, along with a fifth stroke 513 E, a sixth stroke 513 F, a seventh stroke 513 G, an eighth stroke 513 H, a ninth stroke 513 I, a tenth stroke 513 J, and an eleventh stroke 513 K.
- First through eleventh strokes 513 A-K collectively make up glyph samples corresponding to the sample text in sample text display 508 .
- handwriting ingestion UI 500 is illustrated in a sample segmentation state 500 G in sample segmentation state 500 G
- instructive prompt 505 displays text instructing a user operating client device 200 to segment any multi-character strokes displayed in input reproduction rendering display 510 .
- the user may user a mouse or other pointer-based user input 213 to select segmentation points 515 within a stroke where one glyph sample ends and another begins.
- third stroke 513 C is segmented at two segmentation points 515 A-B
- fifth stroke 513 C is segmented at one segmentation point 515 C
- eighth stroke 513 H is segmented at two segmentation points 515 D-E.
- third stroke 513 C is segmented into three stroke segments 520 A-C
- fifth stroke 513 C is segmented into two stroke segments 520 D-E
- eighth stroke 513 H is segmented into three stroke segments 520 F-H.
- handwriting ingestion UI 500 is illustrated in an initial stroke assignment state 500 H.
- initial stroke assignment state 500 G the sample text display has been replaced by a character sequence display 523 and instructive prompt 505 displays text instructing a user operating client device 200 to assign the various strokes and stroke segments displayed in reproduction rendering display 510 to a corresponding character from the character sequence display.
- handwriting ingestion UI 500 is illustrated in a first ongoing stroke assignment state 500 I.
- first ongoing stroke assignment state 500 G the first, “T” character of character sequence display 523 has been highlighted and first stroke 513 A has been selected, indicating the first stroke should be associated with a glyph sample for the “T” code point.
- handwriting ingestion UI 500 is illustrated in a second ongoing stroke assignment state 500 J.
- second ongoing stroke assignment state 500 J the first, “T” character of character sequence display 523 is still highlighted and second stroke 513 B has been selected, indicating the second stroke should also be associated with the glyph sample for the “T” code point.
- handwriting ingestion LH 500 is illustrated in a third ongoing stroke assignment state 500 K.
- third ongoing stroke assignment state 500 K the second, “h” character of character sequence display 523 is now highlighted and first stroke segment 520 A has been selected, indicating the first stroke segment should be associated with a glyph sample for the “h” code point. This stroke assignment process may be continued until the user indicates all strokes and stroke segments have been assigned to the appropriate glyph samples.
- FIG. 6 illustrates the assignments of data corresponding to various strokes and stroke samples obtained via digitizing surface device 218 and digitizing marking device 220 during the exemplary handwriting sample ingestion process described above with respect to FIGS. 5A-K are combined into glyph samples and assigned to code points.
- Data collected during stroke 513 G forms glyph sample 603 B, which is assigned to the “a” code point 605 B.
- Data collected during stroke segment 520 G forms glyph sample 603 C, which is assigned to the “e” code point 605 C.
- Data collected during stroke segment 520 A forms glyph sample 603 D, which is assigned to the “h” code point 605 D.
- Data collected during stroke segment 520 C forms glyph sample 603 G, which is assigned to the “s” code point 605 G.
- Data collected during stroke segment 520 E forms glyph sample 603 H, which is also assigned to the “s” code point 605 G.
- Data collected during stroke segment 520 C forms glyph sample 603 G, which is assigned to the “s” code point 605 G.
- Data collected during stroke segment 520 H forms glyph sample 603 I, which is also assigned to the “s” code point 605 G.
- FIGS. 7A-B illustrate respective graphical representations 700 A-B of stroke data collected by client handwriting ingestion application 228 during stroke 513 A and stroke 513 B (which combine to form a capital letter “T” in the English language) in the example described above and obtained via digitizing surface device 218 and digitizing marking device 220 .
- stroke data obtained from digitizing surface device 218 and digitizing marking device 220 corresponding to strokes, such as strokes 513 A-B may take the form of a time-based series of sampled stroke dimensional data values.
- Stroke 513 A extends from an origin point 703 A, through a series of intermediate points 703 B- 1 , to a termination point 703 J.
- Stoke 513 B extends from an origin point 705 A, through a series of intermediate points 705 B-H, to a termination point 705 I.
- An exemplary handwriting code point set data structure may include a character map data structure and other associated values corresponding to various aspects of the code point set, such as a user identifier value, an average character width value, an average character height value, a maximum character height value, and the like.
- An exemplary character map data structure may include a plurality of code point data structures, e.g. a code point data structure for each character in the code point set A, B, C, D, . . . T, . . . h, i, . . . s, . . . ).
- An exemplary code point data structure may include one or more code point sample data structures, e.g. a code point sample data structure for each code point sample obtained for a given code point.
- An exemplary code point sample data structure may include one or more stroke data structures, e.g. a stroke data structure corresponding to each stroke within a given code point sample.
- a code point sample data structure may also include values corresponding to the source of the sample (e.g. the word “This”) and the relative position within the source (e.g. 0 in the case of “T,” 1 in the case of “h,” etc.).
- An exemplary stroke data structure may include of a time-based series of sampled stroke dimensional data values, e.g. data values corresponding to a time value (representing the sampling interval of the stroke), relative horizontal position or displacement values, relative vertical position or displacement values, pressure values, spin values, angle values, and the like. (Examples of the horizontal position values, vertical position values, and pressure values are visually depicted in FIGS. 7A-B (with pressure values being illustrated by data point diameter).)
- an exemplary handwriting code point set data structure may be representable as:
- FIG. 8 illustrates a first exemplary series of communications 800 between client device 200 A, front-end server 300 A, and handwriting ingestion server 300 B in accordance with various embodiments of an exemplary client/server-based handwriting ingestion system, such as the exemplary client/server-based handwriting ingestion system illustrated in FIG. 1 .
- Client device 200 A may obtain 803 and process 805 a user session initiation command, e.g. via user input 213 in response to a prompt provided via display 215 .
- Client device 200 A may provide front-end server 300 A with a corresponding user session initiation request 808 .
- User session initiation request 808 may include user identifying information corresponding to a user of client device 200 A, e.g. via an alphanumeric identifier associated with a user, and the like.
- Front-end server 300 A may process 810 user session initiation request 808 .
- front-end server 300 A may instantiate a user session associated with the user identifying information, obtain additional meta-data relating to the user identifying information, e.g. from administrative data store 105 and/or other sources, and the like.
- Front-end server 300 A may provide handwriting ingestion server 300 B with a user data request 813 .
- User data request 813 may include data obtained from client device 200 A via user session initiation request 808 , such as a user identifier, and via processing 810 the user session initiation request by front-end server 300 A.
- Handwriting ingestion server 300 B may process 815 user data request 813 .
- handwriting ingestion server 300 B may obtain handwriting sample data associated with the user identifier, e.g. from handwriting sample set data store 108 , determine a measure of handwriting sample set completeness, and the like.
- Handwriting ingestion server 300 B may then provide a user data response 818 to front-end server 300 A.
- Front-end server 300 A may then process 820 user data response 818 , e.g. by parsing the user data response to extract data to pass on to client device 200 .
- Front-end server 300 A may then provide a user session initiation response 823 to client device 200 A.
- User session initiation response 823 may include a user session identifier, handwriting sample set data, and/or the like.
- Client device 200 A may then process 825 user session initiation response 820 , for example by rendering information provided in the user session initiation response via display 215 .
- Client device 200 A may then obtain 828 and process 830 new handwriting sample data, such as in the manner described above in reference to FIGS. 5A-K , to obtain stroke dimension data for one or more glyph samples.
- Client device 200 A may provide front-end server 300 A with a corresponding handwriting sample update request 833 .
- Handwriting sample update request 833 may include the user session identifier, code point identifiers, stroke dimension data from one or more glyph samples, and/or the like.
- Front-end server 300 A may process 835 handwriting sample update request 833 and provide handwriting ingestion server 300 B with an internal handwriting sample update request 838 .
- Internal handwriting sample update request 838 may include the user identifier associated with the user session, code point identifiers, stroke dimension data from one or more glyph samples, and/or the like.
- Handwriting ingestion server 300 B may process 840 internal handwriting sample update request 838 .
- handwriting ingestion server 300 B may store the stroke dimension data in handwriting sample set data store 108 associated with the respective user identifier and code point identifiers, determine an updated measure of handwriting sample set completeness, and the like.
- Handwriting ingestion server 300 B may then provide an internal handwriting sample update response 843 to front-end server 300 A.
- internal handwriting sample update response 843 may include an acknowledgement the handwriting sample set associated with the user identifier has been updated, the updated measure of handwriting sample set completeness, and the like.
- Front-end server 300 A may then process 845 internal handwriting sample update response 843 and provide a handwriting sample update response 848 to client device 200 A.
- Handwriting sample update response 848 may include an acknowledgement the handwriting sample set associated with the user identifier has been updated, the updated measure of handwriting sample set completeness, and the like.
- Client device 200 A may then process 850 handwriting sample update response 848 , for example by rendering information provided in the handwriting sample update response via display 215 , and the like.
- FIG. 9 illustrates an exemplary handwriting sample ingestion routine 900 , which may be implemented by client handwriting ingestion application 228 operating on a client device, such as client devices 200 A-B.
- Handwriting sample ingestion routine 900 may obtain a user identifier at execution block 903 .
- client handwriting ingestion application 228 may obtain a user identifier via a user input 213 in response to a user's interaction with a user login interface, a user profile file stored in memory 205 , or the like.
- Handwriting sample ingestion routine 900 may provide a handwriting code point set request, including the user identifier, at execution block 905 .
- client handwriting application may provide the handwriting code point set request to front-end server 300 B via network 103 .
- handwriting sample ingestion routine 900 may call a handwriting code point set completeness sub-routine 1100 , described below in reference to FIG. 11 ; otherwise handwriting sample ingestion routine 900 may proceed to execution block 910 .
- Handwriting sample ingestion routine 900 may then call an initial sample collection sub-routine 1000 , described below in reference to FIG. 10 .
- Handwriting sample ingestion routine 900 may then call handwriting code point set completeness sub-routine 1100 .
- handwriting sample ingestion routine 900 may proceed to decision block 915 ; otherwise handwriting sample ingestion routine 900 may call a supplemental sample collection sub-routine 1200 , discussed below in reference to FIG. 12 . After the completion of supplemental sample collection sub-routine 1200 , handwriting sample ingestion routine 900 may loop back to handwriting code point set completeness sub-routine block 1100 .
- handwriting sample ingestion routine 900 may proceed to execution block 918 ; otherwise, 900 may proceed to execution block 920 .
- handwriting sample ingestion routine 900 may provide a handwriting code point data structure complete prompt, e.g. via display 215 , to inform the user of client device 200 that no additional handwriting samples are needed. Handwriting sample ingestion routine 900 may then proceed to termination block 999 .
- handwriting sample ingestion routine 900 may provide a supplemental sample collection prompt, e.g. via display 215 , to inform the user of client device 200 that the handwriting code point set data structure is usable, but that additional samples may improve the results of handwriting generation services, and inviting the user to provide additional samples.
- handwriting sample ingestion routine 900 may call supplemental sample collection sub-routine 1200 ; otherwise, handwriting sample ingestion routine 900 may proceed to termination block 999 .
- Handwriting sample ingestion routine 900 may end at termination block 999 .
- FIG. 10 illustrates an exemplary initial handwriting sample collection sub-routine 1000 , which may be implemented by client handwriting ingestion application 228 , e.g. in response to a call from handwriting sample ingestion routine 900 .
- Handwriting sample collection sub-routine 1000 may obtain an initial handwriting sample collection request at execution block 1003 .
- the initial handwriting sample collection request may include a user identifier.
- Handwriting sample collection sub-routine 1000 may instantiate a handwriting code point set data structure and associate the handwriting code point set data structure with the user identifier at execution block 1005 .
- Handwriting sample collection sub-routine 1000 may select an initial handwriting sample at execution block 1008 .
- handwriting sample collection sub-routine 1000 may obtain a handwriting style identifier associated with the user identifier and then obtain a handwriting sample identifier associated with the handwriting style identifier.
- Handwriting sample collection sub-routine 1000 may then call a handwriting sample collection sub-routine 1300 , described below in reference to FIG. 13 , which may include providing the handwriting sample identifier to handwriting sample collection sub-routine 1300 .
- Handwriting sample collection sub-routine 1000 may return, e.g. to handwriting sample ingestion routine 900 , at return block 1099 .
- FIGS. 11A-B illustrate an exemplary handwriting code point set completeness sub-routine 1100 , which may be implemented by client handwriting ingestion application 228 , e.g. in response to a call from handwriting sample ingestion routine 900 .
- handwriting code point set completeness sub-routine 1100 may obtain a handwriting code point set completeness request at execution block 1103 .
- Handwriting code point set completeness request may include a user identifier, a handwriting code point set data structure identifier and a handwriting style identifier.
- Handwriting code point set completeness sub-routine 1100 may determine one or more critical code point set requirements associated with the handwriting style identifier at execution block 1105 .
- Handwriting code point set completeness sub-routine 1100 may set a critical pass flag value to true at execution block 1108 .
- handwriting code point set completeness sub-routine 1100 may process each critical code point set requirement in turn.
- handwriting code point set completeness sub-routine 1100 may proceed to execution block 1115 ; otherwise handwriting code point set completeness sub-routine 1100 may proceed to ending loop block 1118 .
- Handwriting code point set completeness sub-routine 1100 may set the critical pass flag value to false at execution block 1115 .
- handwriting code point set completeness sub-routine 1100 may loop back to starting loop block 1110 and process the next critical code point set requirement, if any.
- handwriting code point set completeness sub-routine 1100 may proceed to execution block 1123 ( FIG. 11B ); otherwise handwriting code point set completeness sub-routine 1100 may proceed to return block 1197 .
- handwriting code point set completeness sub-routine 1100 may determine one or more complete code point set requirements associated with the handwriting style identifier at execution block 1123 .
- Handwriting code point set completeness sub-routine 1100 may set a complete pass flag value to true at execution block 1125 .
- handwriting code point set completeness sub-routine 1100 may process each complete code point set requirement in turn.
- handwriting code point set completeness sub-routine 1100 may proceed to execution block 1133 ; otherwise handwriting code point set completeness sub-routine 1100 may proceed to ending loop block 1135 .
- Handwriting code point set completeness sub-routine 1100 may set the complete pass flag value to false at execution block 1133 .
- handwriting code point set completeness sub-routine 1100 may loop back to starting loop block 1128 and process the next complete code point set requirement, if any.
- handwriting code point set completeness sub-routine 1100 may proceed to return block 1198 ; otherwise handwriting code point set completeness sub-routine 1100 may proceed to return block 1199 .
- handwriting code point set completeness sub-routine 1100 may return a handwriting code point set unusable message, e.g. to handwriting sample ingestion routine 900 .
- handwriting code point set completeness sub-routine 1100 may return a handwriting code point set complete message, e.g. to handwriting sample ingestion routine 900 .
- handwriting code point set completeness sub-routine 1100 may return a handwriting code point set usable message, e.g. to handwriting sample ingestion routine 900 .
- FIG. 12 illustrates an exemplary supplemental sample collection sub-routine 1200 , which may be implemented by client handwriting ingestion application 228 , e.g. in response to a call from handwriting sample ingestion routine 900 .
- Supplemental sample collection sub-routine 1200 may obtain a supplemental handwriting sample collection request at execution block 1203 .
- the supplemental handwriting sample collection request may include a user identifier and/or a handwriting code point set data structure identifier.
- Supplemental sample collection sub-routine 1200 may parse a handwriting code point set data structure associated with the handwriting code point set data structure identifier at execution block 1205 .
- supplemental sample collection sub-routine 1200 may determine one or more code points for which the handwriting code point set data structure identifier does not contain a minimum acceptable number of glyph samples.
- Supplemental sample collection sub-routine 1200 may select a supplemental handwriting sample target at execution block 1208 .
- supplemental sample collection sub-routine 1200 may select a supplemental handwriting sample target based on the one or more code-points for which the handwriting code point set data structure identifier does not contain a minimum acceptable number of glyph samples.
- Supplemental sample collection sub-routine 1200 may then call handwriting sample collection sub-routine 1300 , described below in reference to FIG. 13 , which may include providing the supplemental handwriting sample target identifier to handwriting sample collection sub-routine 1300 .
- Supplemental sample collection sub-routine 1200 may return, e.g. to handwriting sample ingestion routine 900 , at return block 1299 .
- FIGS. 13A-B illustrate an exemplary handwriting sample collection sub-routine 1300 , which may be implemented by client handwriting ingestion application 228 , e.g. in response to a call from initial sample collection sub-routine 1000 or supplemental sample collection supplemental sample collection sub-routine 1200 .
- handwriting sample collection sub-routine 1300 may obtain a handwriting sample collection request at execution block 1303 .
- Handwriting sample collection sub-routine 1300 may render a visual representation of the handwriting sample text, e.g. via display 215 , at execution block 1305 (see sample text display 508 , FIG. 5 ).
- handwriting sample collection sub-routine 1300 may proceed to execution block 1311 ; otherwise handwriting sample collection sub-routine 1300 may proceed to decision block 1309 .
- handwriting sample collection sub-routine 1300 may proceed to return block 1398 .
- handwriting sample collection sub-routine 1300 may obtain digitized handwriting sample data, such as the digitized handwriting sample data described above with respect to FIGS. 7A-B , representative of the handwriting sample text and captured by digitizing marking surface 218 and digitizing marking device 220 .
- Handwriting sample collection sub-routine 1300 may provide a digitized handwriting sample image representative of the handwriting sample data, e.g. via display 215 , at execution block 1311 .
- Handwriting sample collection sub-routine 1300 may provide a stroke segmentation prompt; e.g. via display 215 , at execution block 1312 .
- Handwriting sample collection sub-routine 1300 may capture stroke segmentation points, e.g. via user input 213 , at execution block 1313 .
- Handwriting sample collection sub-routine 1300 may map any captured stroke segmentation points to points in the digitized handwriting sample data at execution block 1314 .
- handwriting sample collection sub-routine 1300 may proceed to starting loop block 1318 , described below in reference to FIG. 13B ); otherwise handwriting sample collection sub-routine 1300 may continue to wait for the stroke segmentation process to complete.
- handwriting sample collection sub-routine 1300 may process each code point sample in the handwriting sample text in turn.
- Handwriting sample collection sub-routine 1300 may provide a stroke identification prompt at execution block 1318 , e.g. via display 215 .
- handwriting sample collection sub-routine 1300 may proceed to execution block 1323 ; otherwise handwriting sample collection sub-routine 1300 may continue to wait for a stroke identification response.
- Handwriting sample collection sub-routine 1300 may instantiate a new code point sample value for the current code point of the handwriting sample text in the handwriting code point set data structure at execution block 1323 .
- handwriting sample collection sub-routine 1300 may proceed to starting loop block 1328 ; otherwise handwriting sample collection sub-routine 1300 may proceed to execution block 1338 .
- handwriting sample collection sub-routine 1300 may process each identified stroke segment in turn.
- Handwriting sample collection sub-routine 1300 may instantiate a new segment value for the current sample value in the handwriting code point data structure at execution block 1330 .
- Handwriting sample collection sub-routine 1300 may identify digitized handwriting sample data corresponding to the current stroke segment at execution block 1331 .
- Handwriting sample collection sub-routine 1300 may associate the identified digitized handwriting sample data with the new segment value for the current code point at execution block 1333 .
- handwriting sample collection sub-routine 1300 may loop back to starting loop block 1328 to process the next identified stroke segment, if any.
- handwriting sample collection sub-routine 1300 may identify digitized handwriting sample data corresponding to the identified stroke.
- Handwriting sample collection sub-routine 1300 may associate the identified digitized handwriting sample data with the new code point sample value for the current code point at execution block 1340 .
- handwriting sample collection sub-routine 1300 may loop back to starting loop block 1316 to process the next code point in the handwriting sample text, if any.
- handwriting sample collection sub-routine 1300 may return a collection successful message at termination block 1399 .
- Handwriting sample collection sub-routine 1300 may return a collection successful message at termination block 1399 .
- FIG. 14 illustrates a first exemplary client/server-based handwriting generation system 1400 in accordance with various embodiments.
- Client devices 200 C-D, front-end server 300 A, and a handwriting generation server 300 C are in data communication with a network 103 .
- network 103 may include the Internet, one or more local area networks (“LANs”), one or more wide area networks (“WANs”), cellular data networks, and/or other data networks.
- Network 103 may, at various points, be a wired and/or wireless network.
- Remote front-end server 300 A may be in data communication with a remote handwriting generation server 300 C.
- Remote handwriting generation server 300 C may be in data communication with handwriting sample set data store 108 .
- client devices 200 C-D may be networked computing devices having form factors including general purpose computers (including “desktop,” “laptop,” “notebook,” “tablet” computers, or the like); mobile phones; watches, glasses, or other wearable computing devices; or the like.
- Memory 205 of client devices 200 C-D may store program code, executable by central processing unit 203 , corresponding to an operating system 223 , as well as program code corresponding to various software applications, such as a browser application 225 , a handwriting generation application 233 , and other applications (not shown), such as a handwriting generation application capable of performing the functionality described below.
- client device 200 C is depicted as a laptop computer and client device 200 D is depicted as a mobile phone. In various embodiments there may be many more client devices 200 .
- the primary functional components of an exemplary, form-factor-independent client device 200 are described above in reference to FIG. 2 .
- Client devices 200 C-D may be the same physical devices as some or all of client devices 200 A-B.
- Client device 200 C may be in data communication with an external printing device 1408 .
- remote handwriting generation server 300 C may be networked computing devices generally capable of accepting requests over network 108 , e.g. from client devices 200 , each other, various databases, and/or other networked computing devices, and providing responses according to a handwriting generating service 3230 capable of performing the functionality described below.
- the primary functional components of an exemplary handwriting ingestion server 300 C, are described above in reference to FIG. 3 .
- an instance of client handwriting generation application 233 operating on a client device such as client devices 200 C-D, remote user session management service 323 A operating on front-end server 300 A, and remote handwriting generation service 323 C operating on handwriting ingestion server 300 C (collectively a client/server-based handwriting generation system) in accordance with the present embodiments may operate to utilize a code point sample data set of a user's handwriting, described above, to obtain text data including a message from a user and generate an simulated text image, e.g. for electronic display and/or hard-copy printing, including a sequence of glyphs corresponding the message and having the appearance of being rendered in the user's handwriting.
- Such a client/server based handwriting generation system may be operated in furtherance of a handwriting digitization service provider (not shown) providing handwriting reproduction services.
- Instantiations of client handwriting generation application 233 may act as an interface between a user of client devices 200 C-D and user session management service 323 A operating on front-end server 300 A.
- client handwriting generation application 233 may send a “create new session” request to user session management service 323 A, for example including identifying information for client device 200 , identifying information for the particular instantiation of client handwriting generation application 233 , and/or user-account credentials such as a user name and password, obtained from the user or stored in memory 205 . If presented, the user-account credentials may be associated with an existing user account or with a generic, temporary, and/or anonymous “guest” account.
- User session management service 323 A may create a corresponding user session (not shown) associated with the particular instantiation of client handwriting ingestion generation 233 , identified by a user-session identifier (referred to herein as a “session ID”) and may obtain user account information, such as a user identifier, associated with the provided identifying information from administrative data store 105 and provide a response to client handwriting ingestion application 228 , which may include information related to features and services provided by the handwriting digitization service provider which the user-account associated with the user-account credentials are authorized to access.
- a user-session identifier referred to herein as a “session ID”
- user account information such as a user identifier
- client handwriting generation application 233 may then present the user with a handwriting generation input prompt 1503 , e.g. via optional display 215 , and wait for the user to indicate a selection of a specific option, e.g. via optional input 213 .
- Such options may include providing manual text input 1505 A or selecting a pre-existing file including text data 1505 B, and the like.
- client handwriting generation application 233 may process the selection and generate a request corresponding to the selected option.
- requests may be provided to user session management service 323 A operating on front-end server 300 A, e.g. via network 103 .
- User session management service 323 A may process the requests, provide related internal requests to handwriting generation service 323 C, obtain responses from handwriting generation service 323 C, provide responses to client handwriting generation application 233 and store records of these requests and responses and other related data, e.g. in administrative data store 105 indexed by a user identifier and/or a user session identifier.
- client handwriting generation application 233 may then present the user with a text entry window 1508 .
- Text entry window 1508 may include a text entry prompt 1510 and a text display window 1513 .
- client handwriting generation 233 application may present the user with a customization interface 1515 .
- Customization interface 1515 may include a customization prompt 1518 and one or more customization options, such as a handwriting style option 1520 A (e.g. user A's formal handwriting style, user B's casual handwriting style, and the like), a writing implement option 1520 B (e.g.
- client handwriting generation application 233 may present the user with a simulated text image interface 1523 including a simulated text image 1525 corresponding to the text entered by the user, rendered in the selected handwriting style in accordance with the selected options.
- Simulated text interface 1523 may also provide customization options 1520 A-C to enable the user to make additional changes to simulated text image 1525 .
- FIG. 16 illustrates a second exemplary series of communications 1600 between client device 200 C, front-end server 300 A; and handwriting generation server 300 C in accordance with various embodiments of an exemplary client/server-based handwriting ingestion system, such as the exemplary client/server-based handwriting ingestion system illustrated in FIG. 14 .
- Client device 200 C may obtain 1603 and process 1605 a user session initiation command, e.g. via user input 213 in response to a prompt provided via display 215 .
- Client device 200 A may provide front-end server 300 A with a corresponding user session initiation request 1608 .
- User session initiation request 1608 may include user identifying information corresponding to a user of client device 200 A, e.g. via an alphanumeric identifier associated with a user, and the like.
- Front-end server 300 A may process 1610 user session initiation request 1608 .
- front-end server 300 A may instantiate a user session associated with the user identifying information, obtain additional meta-data relating to the user identifying information, e.g. from administrative data store 105 and/or other sources, and the like.
- Front-end server 300 A may provide handwriting generation server 300 C with a user data request 1613 .
- User data request 1613 may include data obtained from client device 200 A via user session initiation request 1608 , such as a user identifier, and via processing 1610 the user session initiation request by front-end server 300 A.
- Handwriting generation server 300 C may process 1615 user data request 1613 .
- handwriting generation server 300 C may obtain handwriting sample data associated with the user identifier, e.g. from handwriting sample set data store 108 , determine a measure of handwriting sample set completeness, and the like.
- Handwriting generation server 300 C may then provide a user data response 1618 to front-end server 300 A.
- Front-end server 300 A may then process 1620 user data response 1618 , e.g. by parsing the user data response to extract data to pass on to client device 200 .
- Front-end server 300 A may then provide a user session initiation response 1623 to client device 200 A.
- User session initiation response 1623 may include a user session identifier, handwriting sample set data, and/or the like.
- Client device 200 A may then process 1625 user session initiation response 1620 , for example by rendering information provided in the user session initiation response via display 215 .
- Client device 200 A may then obtain 1628 and process 1630 new text-to-handwriting input, such as in the manner described above in reference to FIGS. 15A-C , to obtain text data for conversion.
- Client device 200 A may provide front-end server 300 A with a corresponding text-to-handwriting (“TTH”) request 1633 .
- Text-to-handwriting request 1633 may include the user session identifier, text data, customization option data, and the like.
- Front-end server 300 A may process 1635 TTH request 1633 and provide handwriting generation server 300 C with an internal TTH generation request 1638 .
- Internal TTH generation request 1638 may include the user identifier associated with the may include the user session identifier, text data, and customization option data, and the like.
- Handwriting generation server 300 C may process 1640 internal TTH request 1638 .
- handwriting generation server 300 C may invoke handwriting generation service 323 C to execute instructions approximating the functionality of TIE generation routine 1800 , illustrated in FIG. 18 , and its associated sub-routines.
- Handwriting generation server 300 C may then provide an internal TTH response 1643 to front-end server 300 A.
- internal TTH response 1643 may include a simulated text image corresponding to the text data obtained by internal TTH request 1638 .
- Front-end server 300 A may then process 1645 internal TTH response 1643 and provide a TTH response 1648 to client device 200 C.
- TTH response 1648 may include the simulated text image corresponding to the text data obtained via internal TTH response 1643 .
- Client device 200 C may then process 1650 TTH response 1648 , for example by rendering information provided in the handwriting sample update response via display 215 , as described above with respect to FIG. 15D , and the like.
- FIG. 17 illustrates an exemplary sample text intake routine 1700 , which may be implemented by client handwriting generation application 228 operating on a client device, such as client devices 200 C-D.
- Routine 1700 may obtain a user identifier at execution block 1703 .
- Routine 1700 may provide a user session initialization request at execution block 1705 , e.g. to front-end server 300 A.
- the user session initialization request may include the user identifier obtained in execution block 1703 .
- routine 1700 may proceed to execution block 1710 ; otherwise, routine 1700 may call handwriting sample ingestion routine 900 , described above in reference to FIG. 9 .
- Routine 1700 may provide a handwriting generation prompt, for example as described above in reference to FIG. 15A , at execution block 1710 .
- Routine 1700 may parse handwriting generation input data, e.g. text data, to generate a text-to-handwriting request at execution block 1713 .
- handwriting generation input data e.g. text data
- Routine 1700 may provide the text-to-handwriting request, e.g. to front-end sever 300 A as described above in reference to FIG. 16 , at execution block 1715 .
- the text-to-handwriting request may include a user session identifier, text data, customization option data, and the like.
- routine 1700 may proceed to execution block 1720 ; otherwise routine 1700 may continue to wait for a text-to-handwriting response.
- the text-to-handwriting response may include a generated handwriting image sample and/or a URI that points to a generated handwriting image sample.
- Routine 1700 may render a generated handwriting image sample, such as described above in reference to FIG. 15D , at execution block 1720 .
- routine 1700 may proceed to execution block 1725
- Routine 1700 may provide a link to a file corresponding to the generated handwriting image sample at execution block 1725 .
- the file may be stored locally on client device 200 C or remotely, e.g. on administrative data store 105 or the like.
- Routine 1700 may terminate at termination block 1799 .
- FIG. 18 illustrates an exemplary sample text intake routine 1800 , which may be implemented by handwriting generation service 323 C operating on handwriting generation server 300 C, for example during the processing of a text-to-handwriting generation request 1640 , described above.
- Routine 1800 may obtain a text-to-handwriting (“TTH”) generation request, including text data as described above, and instantiate a TTH data structure at execution block 1803 .
- TTH text-to-handwriting
- Routine 1800 may parse the text data obtained in the TTH request at execution block 1803 . For example, if the text data corresponds to English language text, such as “This is a test,” then routine 1800 may separate the text data into four tokens, each token corresponding to each word (“This,” “is,” “a,” and “test”), and instantiate a token identifier corresponding to each of tokens in the TTH data structure.
- routine 1800 may process each token in the message data in turn.
- Routine 1800 may parse the code points of the current token at execution block 1809 . For example, if the current token corresponds to the word “test,” then routine 1800 may separate the token into four code points (“t,” “e,” “s,” and “t”) and instantiate a code point identifier corresponding to each of the code points in the token.
- routine 1800 may process each code point in the current token in turn.
- Routine 1800 may call code point sample selection sub-routine 1900 , described below in reference to FIG. 19 .
- routine 1800 may loop back to starting loop block 1810 and process the next code point in the current token, if any.
- routine 1800 may call ligature stitching sub-routine 2000 , described below in reference to FIGS. 20A-B ; otherwise; routine 800 may call token assembly sub-routine 2100 , described below in reference to FIG. 21 .
- routine 1800 may loop back to starting loop block 1808 and process the next token in the text data, if any.
- Routine 1800 may call message assembly sub-routine, described below in reference to FIG. 22 .
- Routine 1800 may then generate a handwritten message image using the data in the TTH data structure at execution block 1820 .
- Routine 1800 may provide a TTH response, described above, at execution block 1823 .
- Routine 1800 may terminate at termination block 1899 .
- FIG. 19 illustrates an exemplary code point sample selection sub-routine 1900 which may be implemented by handwriting generation service 323 C operating on handwriting generation server 300 C, for example in response to a call from TTH generation routine 1800 .
- Sub-routine 1900 may obtain a code point selection request at execution block 1903 .
- code point selection request may include a TTH data structure identifier and a code point identifier.
- Sub-routine 1900 may obtain code point samples corresponding to the code point identifier from a handwriting code point set associated with the TTH data structure.
- Sub-routine 1900 may compare the obtained code point samples at execution block 1908 . For example, sub-routine 1900 may rate each code point samples suitability for the current code point identifier based on one or more criteria. Each code point sample may also be assigned an additional, randomized rating.
- Sub-routine 1900 may select the best fit code point sample based on the code point sample ratings, including the randomized rating, if available, at execution block 1910 .
- Sub-routine 1900 may associate the selected code point sample identifier from the handwriting code point set with the code point identifier of the TTH data structure at execution block 1913 .
- Sub-routine 1900 may return to TTH generation routine 1800 at 1999 .
- FIGS. 20A-B illustrate an exemplary ligature stitching sub-routine 2000 which may be implemented by handwriting generation service 323 C operating on handwriting generation server 300 C, for example in response to a call from TTH generation routine 1800 .
- sub-routine 2000 may at execution block 2003 .
- Sub-routine 2000 may at execution block 2005 .
- sub-routine 2000 may process each code point of the current token in turn.
- sub-routine 2000 may proceed to ending loop block 2040 ( FIG. 20B ); otherwise sub-routine 2000 may proceed to starting loop block 2013 .
- sub-routine 2000 may process each possible ingress point of the current code point in turn.
- sub-routine 2000 may process each possible egress point of the previously processed code point in turn.
- Sub-routine 2000 may at execution block 2018 .
- sub-routine 2000 may proceed to execution block 2023 ; otherwise sub-routine 2000 may proceed to ending loop block 2025 .
- Sub-routine 2000 may record the current ingress point and egress point as a potential matching range pair at execution block 2023 .
- sub-routine 2000 may loop back to starting loop block 2015 to process the next possible egress point of the previously processed code point, if any.
- sub-routine 2000 may loop back to starting loop block 2013 to process the next possible ingress point of the current code point, if any.
- sub-routine 2000 may rank the potential matching range pairs at execution block 2030 .
- the matching range pairs may be ranked based on the difference in magnitude between the respective egress angle and ingress angle.
- Sub-routine 2000 may select the best matching range pair based on the rankings at execution block 2033 .
- Sub-routine 2000 may generate a ligature element based on the matching range pair at execution block 2035 .
- Sub-routine 2000 may associate the ligature element with the current code point at execution block 2038 .
- sub-routine 2000 may process the next code point of the current token, if any.
- Sub-routine 2000 may return to TTH generation routine 1800 at return block 2099 .
- FIG. 21 illustrates an exemplary token assembly sub-routine 2100 which may be implemented by handwriting generation service 323 C operating on handwriting generation server 300 C, for example in response to a call from TTH generation routine 1800 .
- Token assembly sub-routine 2100 may function to assemble the code points of a given token in a manner that will simulate the handwriting associated with a specific user identifier.
- Sub-routine 2100 may obtain a token assembly request at execution block 2103 .
- the token assembly request may include a token identifier from the current TTH data structure.
- sub-routine 2100 may process each code point of the token in turn.
- sub-routine 2100 may proceed to decision ending loop block 2135 , described below; otherwise, sub-routine 2100 may proceed to decision block 2110 .
- sub-routine 2100 may proceed to 2113 ; otherwise, sub-routine 2100 may proceed to execution block 2130 , described below.
- Sub-routine 2100 may determine a relative spatial position of an egress point of the previously processed code point at execution block 2113 .
- sub-routine 2100 may proceed to execution block 2123 , described below; otherwise sub-routine 2100 may proceed to execution block 2118 .
- Sub-routine 2100 may assign the relative spatial position of the egress point of the previously processed code point as the ingress point of the current code point at execution block 2118 . Sub-routine 2100 may then proceed to ending loop block 2135 , described below.
- sub-routine 2100 may assign the relative spatial position of the egress point of the previously processed code point as the ingress point of the ligature element associated with the current code point at execution block 2118 .
- Sub-routine 2100 may determine a relative spatial position of an egress point of the ligature element associated with the current code point at execution block 2125 .
- Sub-routine 2100 may assign the relative spatial position of the egress point of the ligature element associated with the current code point as the ingress point of the current code point at execution block 2128 . Sub-routine 2100 may the proceed to ending loop block 2135 , described below.
- sub-routine 2100 may determine a spatial displacement for the current code point relative to the previous code point.
- Sub-routine 2100 may assign an ingress point for the current code point based on the spatial displacement at execution block 2133 .
- sub-routine 2100 may loop back to starting loop block 2105 to process the next code point in the token, if any.
- Sub-routine 2100 may return to TTH generation routine 1800 at return block 2199 .
- FIG. 22 illustrates an exemplary message assembly sub-routine 2200 which may be implemented by handwriting generation service 323 C operating on handwriting generation server 300 C, for example in response to a call from TTH generation routine 1800 .
- Message assembly sub-routine 2100 may function to assemble the tokens of a TTH data structure in a manner that will simulate the handwriting associated with a specific user identifier.
- Sub-routine 2200 may obtain a message assembly request at execution block 2203 .
- the message assembly request may identify a TTH data structure.
- Sub-routine 2200 may determine various handwriting text formatting requirements at execution block 2205 . For example, sub-routine 2200 may determine a maximum code point height for the handwriting text.
- sub-routine 2200 may process each token in the TTH data structure in turn.
- sub-routine 2200 may proceed to execution block 2213 ; otherwise sub-routine 2200 may proceed to execution block 2215 , described below.
- sub-routine 2200 may determine a starting spatial position for the first token in the handwriting image. Sub-routine 2200 may then proceed to execution block 2218 .
- Sub-routine 2200 may determine a spatial position of the ingress point of the current token relative to an egress point of the previous token at execution block 2218 .
- Sub-routine 2200 may assign the determined spatial position as the ingress point for the first code point of the current token at execution block 2218 .
- sub-routine 2200 may loop back to starting loop block 2208 to process the next token in the TTH data structure, if any.
- Sub-routine 2200 may return to TTH generation routine 1800 at return block 2299 .
- Certain aspects of the present methods and systems may focus on computer implemented methods of obtaining digitized hand-writing data corresponding to a sample of a needed code point of a set of code points.
- Such methods may include: obtaining a sample of digitized handwritten text, the sample of digitized handwritten text including glyph data corresponding to a first glyph, the first glyph corresponding to the needed code point of the set of code points; associating the first glyph with the needed code point; identifying stroke data in the glyph data, the stroke data corresponding to a stroke component of the first glyph; determining a plurality of dimensional values of the stroke component in the stroke data; and associating the plurality of dimensional values with a new code point sample of the needed code point in a code point set data structure.
- aspects of the present methods and systems may focus on computer implemented methods of supplementing an incomplete handwriting code point data structure corresponding to a set of code points.
- Such methods may include: identifying a plurality of code points from the set of code points, the plurality of code points corresponding to code points in need of dimensional values for at least one code point sample; selecting a preferred handwriting sample phrase from a plurality of predefined handwriting sample phrases, the preferred handwriting sample phrase including at least a first code point of the plurality of code points; obtaining a sample of digitized handwritten text corresponding to the preferred handwriting sample phrase, the sample of digitized handwritten text including glyph data corresponding to a first glyph, the first glyph corresponding to the first code point; associating the first glyph with the first code point; identifying stroke data in the glyph data, the stroke data corresponding to a stroke component of the first glyph, determining a plurality of dimensional values of the stroke component in the stroke data; and associating the plurality of
- aspects of the present methods and systems may focus on computer implemented methods of generating digitized hand-writing data corresponding to an ordered plurality of tokens including a first token, each token of the ordered plurality of tokens corresponding to an ordered plurality of code points.
- Such methods may include selecting a sequential sub-set of two code points from the ordered plurality of code points corresponding to the first token; selecting a first code point sample corresponding to a first code point of the sequential sub-set of two code points, the first code point sample including a plurality of dimensional values associated with the first code point; selecting a second code point sample corresponding to a second code point of the sequential sub-set of two code points, the second code point sample including a plurality of dimensional values associated with the second code point; and generating image data corresponding to a glyph representation of the ordered plurality of tokens including the first code point sample and the second code point sample using the plurality of dimensional values associated with the first code point and the plurality of dimensional values associated with the second code point.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Multimedia (AREA)
- Information Transfer Between Computers (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
Certain aspects of the present methods and systems may focus on computer implemented methods of obtaining digitized hand-writing data corresponding to a sample of a needed code point of a set of code points. Such methods may include: obtaining a sample of digitized handwritten text, the sample of digitized handwritten text including glyph data corresponding to a first glyph, the first glyph corresponding to the needed code point of the set of code points; associating the first glyph with the needed code point; identifying stroke data in the glyph data, the stroke data corresponding to a stroke component of the first glyph, determining a plurality of dimensional values of the stroke component in the stroke data; and associating the plurality of dimensional values with a new code point sample of the needed code point in a code point set data structure.
Description
- The present disclosure relates to computer handwriting analysis and synthesis, and more particularly, to systems and methods for digitized handwriting data collection and analysis.
- Since the advent of desktop publishing in the mid-1980s, it has become increasingly easy to use commonly-available software to create and print letters, cards, documents, and other printed matter. Moreover, at the present time, a computer user may have scores or even hundreds of high-quality fonts installed on his or her computer, with thousands of additional free and commercial fonts available via the Internet. As a result, many people have become accustomed to receiving printed materials that are not hand-written. Indeed, hand-written notes and cards may signal to a recipient a sense of importance and particular care because the sender personally took the effort to hand-craft the message.
- There are numerous fonts that are intended to mimic generic handwriting to a certain extent. There are even services that will create a font to mimic a particular person's handwriting. However, existing personalized-handwriting fonts may appear mechanical and/or unnatural because individual glyphs may always be printed with identical geometry, whereas in an actual hand-written document, each individual character may have its own subtly unique geometry. Moreover, existing personalized-handwriting fonts and personalized-handwriting-font-creation services may have difficulty isolating individual glyph within a sample of cursive handwriting or other handwriting in which adjacent letters may be connected to one another.
- Other techniques may use a variable glyph representation to mimic an individual's handwriting, such as the systems and methods described in U.S. Pat. Nos. 8,351,700 and 8,699,794.
-
FIG. 1 illustrates an exemplary network topology of a client/server-based handwriting ingestion system in accordance with various embodiments. -
FIG. 2 illustrates a functional block diagram of an exemplary client computing device, suitable for use with the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIG. 3 illustrates a functional block diagram of an exemplary server computing device, suitable for use with the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIG. 4 illustrates a graphical representation of the relationship between character code points, visual representations of the character code points, handwritten glyph representations of the character code points, and the stroke structure of such handwritten glyphs. -
FIGS. 5A-K illustrate a general schematic diagram of an exemplary handwriting ingestion user interface suitable for use with the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIG. 6 illustrates a graphical representation of the relationship between character code points, handwritten glyph representations of the character code points, and the stroke and stroke segment structure of such handwritten glyphs. -
FIGS. 7A-B illustrate a visual illustration of stroke dimensional data obtained by various aspects of the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIG. 8 illustrates a series of data communications between various components of the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIG. 9 illustrates a functional block diagram of a handwriting sample ingestion routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIG. 10 illustrates a functional block diagram of an initial sample collection sub-routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIGS. 11A-B illustrate a functional block diagram of a handwriting code point set completeness sub-routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIG. 12 illustrates a functional block diagram of a supplemental sample collection sub-routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIGS. 13A-B illustrate a functional block diagram of a handwriting sample collection sub-routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIG. 14 illustrates an exemplary network topology of a client/server-based handwriting generation system in accordance with various embodiments. -
FIGS. 15A-D illustrate a general schematic diagram of an exemplary handwriting generation user interface suitable for use with the client/server-based handwriting generation system in accordance with various embodiments. -
FIG. 16 illustrates a series of data communications between various components of the client/server-based handwriting generation system in accordance with various embodiments. -
FIG. 17 illustrates a functional block diagram of a sample text intake routine which may be implemented by a client device of the client/server-based handwriting ingestion system in accordance with various embodiments. -
FIG. 18 illustrates a functional block diagram of a text-to-handwriting routine which may be implemented by a handwriting generation server of the client/server-based handwriting generation system in accordance with various embodiments. -
FIG. 19 illustrates a functional block diagram of a code point sample selection sub-routine which may be implemented by a handwriting generation server of the client/server-based handwriting generation system in accordance with various embodiments. -
FIGS. 20A-B illustrate a functional block diagram of a ligature stitching sub-routine which may be implemented by a handwriting generation server of the client/server-based handwriting generation system in accordance with various embodiments. -
FIG. 21 illustrates a functional block diagram of a token assembly sub-routine which may be implemented by a handwriting generation server of the client/server-based handwriting generation system in accordance with various embodiments. -
FIG. 22 illustrates a functional block diagram of a token assembly sub-routine which may be implemented by a handwriting generation server of the client/server-based handwriting generation system in accordance with various embodiments. - The detailed description that follows is represented largely in terms of processes and symbolic representations of operations by conventional computer components, including a processor, memory storage devices for the processor, connected display devices and input devices. Furthermore, these processes and operations may utilize conventional computer components in a heterogeneous distributed computing environment, including remote file servers, computer servers, and/or memory storage devices. Each of these conventional distributed computing components is accessible by the processor via a communication network, which may include, but is not limited to, the Internet.
- The phrases “in one embodiment,” “in various embodiments,” “in some embodiments,” and the like are used repeatedly. Such phrases do not necessarily refer to the same embodiment. The terms “comprising,” “having,” and “including” are synonymous, unless the context dictates otherwise.
- Reference is now made in detail to the description of the embodiments as illustrated in the drawings. While embodiments are described in connection with the drawings and related descriptions, there is no intent to limit the scope to the embodiments disclosed herein. On the contrary, the intent is to cover all alternatives, modifications, and equivalents. In alternate embodiments, additional devices, or combinations of illustrated devices, may be added to, or combined, without limiting the scope to the embodiments disclosed herein. For example, the embodiments set forth below are primarily described in the context of obtaining data corresponding to digitized samples of handwritten text in the English language via a digitizing surface device and a digitizing marking device. However, these embodiments are exemplary and are in no way limited to the type of item for which recommendations are being generated.
-
FIG. 1 illustrates a first exemplary client/server-basedhandwriting ingestion system 100 in accordance with various embodiments.Client devices 200A-B and a remote front-end server 300A are in data communication with anetwork 103. In various embodiments,network 103 may include the Internet, one or more local area networks (“LANs”), one or more wide area networks (“WANs”), cellular data networks, and/or other data networks.Network 103 may, at various points, be a wired and/or wireless network. Remote front-end server 300A may be in data communication with a remote handwriting ingestion server 300B and anadministrative data store 105. Remote handwriting ingestion server 300B may be in data communication with a handwriting sample setdata store 108. - In these and other embodiments,
client devices 200, such asclient device 200A and client device 200B, may be networked computing devices having form factors including general purpose computers (including “desktop,” “laptop,” “notebook,” “tablet” computers, or the like); mobile phones; watches, glasses, or other wearable computing devices; or the like. For simplified exemplary purposes, two client devices are shown, one of which is depicted as a laptop computer and the other of which is depicted as a tablet computer. In various embodiments there may be manymore client devices 200. The primary functional components of an exemplary, form-factor-independent client device 200 are described below in reference toFIG. 2 . -
Client device 200A may be in data communication with an externaldigitizing surface device 218A and a digitizing marking device (e.g. a “stylus”) 220A. Digitizing markingdevice 220A may be in data communication withclient device 200A via externaldigitizing surface device 218A or may be in direct data communication with the client device (as indicated by dotted lines). - Client device 2001 includes a built in digitizing surface device 218B and may be in data communication with a digitizing marking device 220B.
- In various embodiments, remote front-
end server 300A and remote handwriting ingestion server 300B may be networked computing devices generally capable of accepting requests overnetwork 108, e.g. fromclient devices 200, each other, various databases, and/or other networked computing devices, such as a remote handwriting generation server (not shown), and providing responses accordingly. The primary functional components of an exemplaryremote server 300, such as remote front-end server 300A and remote handwriting ingestion server 3001, are described below in reference toFIG. 3 . -
FIG. 2 illustrates several components of anexemplary client device 200, such as any ofclient devices 200A-B, is illustrated. In some embodiments, aclient device 200 may include many more components than those shown inFIG. 2 . However, it is not necessary that all of these generally conventional components be shown in order to disclose an illustrative embodiment. The data communications between various components ofclient device 200 may be accomplished by wired and/or wireless connections - As shown in
FIG. 2 ,exemplary client device 200 includes acentral processing unit 203 in data communication withmemory 205 via abus 208.Central processing unit 203 is an electronic circuit designed to carry out instructions of a computer program, e.g. Obtained frommemory 205, by performing the basic arithmetic, logical, control and input/output (I/O) operations specified by the program's instructions.Memory 205 generally comprises some or all of random access memory (RAM), read-only memory (ROM, and/or a permanent mass storage device, such as a disk drive, flash memory, or the like.Bus 208 is a communication system that transfers data between components withinclient device 200, and encompasses any related hardware components (wire, optical fiber, etc.) and software, including communication protocols. -
Client device 200 may also include anetwork interface 210 for connecting to a network such asnetwork 103, one or more optional user input device(s) 213, e.g. an alphanumeric keyboard, keypad, a mouse or other pointing device, a touchscreen, and/or a microphone, (or a user input port for connecting an external user input device), an optionaldigitizing surface device 215, such as digitizing surface device 215B, (or a port for connecting an external digitizing surface device, such as digitizing surface device 215A), an optional digitizing marking device (or a port for connecting to an external digitizing marking device, such as digitizing markingdevices 218A-B), and the like, all interconnected, along with thenetwork interface 210, tocentral processing unit 203 andmemory 205 viabus 208. -
Memory 205 ofexemplary client device 200 may store program code, executable bycentral processing unit 203, corresponding to anoperating system 223, as well as program code corresponding to various software applications, such as abrowser application 225, ahandwriting ingestion application 228, and other software applications (not shown).Operating system 223 and such various software applications may be loaded intomemory 205 vianetwork interface 210 or via a computerreadable storage medium 230, such as a hard-disk drive, a solid-state drive, an optical disc, a removable memory card, and/or the like. -
Browser application 225 is a software application for retrieving, presenting, and traversing information resources on a network, such asnetwork 108. Althoughbrowser application 225 may be primarily intended to use the World Wide Web, it may also be used to access information resources provided by remote servers in private networks. An information resource may be a web page, an image, a video, or other piece of content and may be identified by a Uniform Resource Identifier (URI/URL) onnetwork 108. An information resource may also providebrowser application 225 executable program code for web applications, i.e. a software application that runs in and is rendered bybrowser application 225. - In operation,
operating system 223 manages the hardware and software resources ofclient device 200 and provides common services and memory allocation for various software applications, such as research study data acquisition andquality control application 228. For hardware functions such as network communications vianetwork interface 210, receiving data viainput 213, outputting data viaoptional display 215, and allocation ofmemory 205 for various software applications, such ashandwriting ingestion application 228,operating system 223 acts as an intermediary between software executing on the client device and the device's hardware. - For example,
operating system 223 may cause a representation of available software applications, such asbrowser application 225 andhandwriting ingestion 228, to be presented to a user ofclient device 200 viadisplay 215. Ifclient device 200 obtains an indication from a user, e.g. viauser input 213, a desire to usehandwriting ingestion application 228,operating system 223 may instantiate a handwriting ingestion application process (not shown), i.e. causecentral processing unit 203 to begin executing the executable instructions of the handwriting ingestion application and allocate a portion ofmemory 205 for its use. - In the case of a web application,
browser application 225 may act as an intermediary between a software service operating on a remote server and theoperating system 223. For example, a software service equivalent ofhandwriting ingestion application 228 may be executing on front-end server 400A. - Although an
exemplary client device 200 has been described with hardware components that generally conforms to conventional general purpose computing devices, a client device may be any of a great number of devices capable of communicating withnetwork 103 and executing instructions for performinghandwriting ingestion application 228. -
FIG. 3 illustrates several components of anexemplary server 300, such as front-end server 300A and handwriting ingestion server 300B, in accordance with at least one exemplary embodiment are illustrated. In some embodiments, aserver 300 may include many more components than those shown inFIG. 3 . However, it is not necessary that all of these generally conventional components be shown in order to disclose an illustrative embodiment. As shown inFIG. 3 , aserver 300 includes acentral processing unit 303 andmemory 305 connected by abus 308. -
Central processing unit 303 is an electronic circuit designed to carry out instructions of a computer program, e.g. obtained frommemory 305, by performing the basic arithmetic, logical, control and input/output (I/O) operations specified by the program's instructions.Memory 305 may generally include some or all of random access memory (RAM), read-only memory (ROM), and/or a permanent mass storage device, such as a disk drive, flash memory, or the like.Bus 308 is a communication system that transfers data between components withinexemplary server 300, and includes any related hardware components (wire, optical fiber, etc.) and software, including communication protocols. -
Server 300 may also include anetwork interface 310 for connecting to a network such asnetwork 103, one or more optional user input device(s) 313, e.g. an alphanumeric keyboard, keypad, a mouse or other pointing device, a touchscreen, and/or a microphone, (or a user input port for connecting an external user input device) and/or an optional display 315 (or a display port for connecting an external display device), both interconnected along with thenetwork interface 310 viabus 308. -
Memory 305 may store anoperating system 320 and program code for various software services 323. For example, front-end server 300A may include executable instructions for performing usersession management service 323A (indicated by dotted lines) and handwriting ingestion server 300B may include executable instructions for performinghandwriting ingestion service 323B (indicated by dotted lines). - Program code for these and other such software services, such as a software services (not shown) equivalent to
handwriting ingestion application 228, may be loaded intomemory 305 from a non-transient computerreadable storage medium 325 using a drive mechanism (not shown) associated with the non-transient computer readable storage medium, such as, but not limited to, a DVD/CD-ROM drive, memory card, or the like. Software components may also be loaded into memory 304 via thenetwork interface 310. Aserver 300 may also communicate viabus 308 with a database (not shown), such asadmin database 105 and/ortrial data database 108, or other local or remote data store. - In operation,
operating system 320 manages the hardware and software resources ofserver 300 and provides common services and memory allocation for various software services, such as usersession management service 323A orhandwriting ingestion service 323B. For hardware functions such as network communications vianetwork interface 310 and allocation ofmemory 305 for various software services, such ashandwriting ingestion service 323B,operating system 320 may act as an intermediary between software executing onserver 300 and the server's hardware. - Although an
exemplary server 300 has been described having hardware components that generally conform to a conventional general purpose computing device, a server may be any of a great number of devices capable of communicating withnetwork 103 and executing instructions for performing usersession management service 323A and/orhandwriting ingestion service 323B. - In some embodiments, a
server 300 may comprise one or more replicated and/or distributed physical or logical devices. In some embodiments, one or more of front-end server 300A and handwriting ingestion server 300B may be embodied by the same physical device. - Referring collectively to
FIGS. 1-3 , and as is described in more detail below, an instance of clienthandwriting ingestion application 228 operating on a client device, such asclient devices 200A-B, remote usersession management service 323A operating on front-end server 300A, and remotehandwriting ingestion service 323B operating on handwriting ingestion server 300B (collectively a client/server-based handwriting ingestion system) in accordance with the present embodiments may operate to create a code point sample data set of a user's handwriting comprehensive enough to allow the provider to obtain text data including a message from a user and generate an image, e.g. for electronic display and/or hard-copy printing, including a sequence of glyphs corresponding the message and having the appearance of being rendered in the user's handwriting. Such a client/server based handwriting ingestion system may be operated in furtherance of a handwriting digitization service provider (not shown) providing handwriting reproduction services. - Instantiations of client
handwriting ingestion application 228 may act as an interface between a user ofclient device 200 and usersession management service 323A operating on front-end server 300A. Upon instantiation, clienthandwriting ingestion application 228 may send a “create new session” request to usersession management service 323A, for example including identifying information forclient device 200, identifying information for the particular instantiation of clienthandwriting ingestion application 228, and/or user-account credentials such as a user name and password, obtained from the user or stored inmemory 205. If presented, the user-account credentials may be associated with an existing user account or with a generic, temporary, and/or anonymous “guest” account. - User
session management service 323A may create a corresponding user session (not shown) associated with the particular instantiation of clienthandwriting ingestion application 228, identified by a user-session identifier (referred to herein as a “session ID”) and may obtain user account information, such as a user identifier, associated with the provided identifying information fromadministrative data store 105 and provide a response to clienthandwriting ingestion application 228, which may include information related to features and services provided by the handwriting digitization service provider which the user-account associated with the user-account credentials are authorized to access. - Client
handwriting ingestion application 228 may then present the user with a menu of options, e.g. viaoptional display 215, and wait for the user to indicate a selection of a specific option, e.g. viaoptional input 213. Such options may include obtaining a new handwriting sample, viewing a measure of completeness of a handwriting sample set associated with the user identifier, creating a new handwriting sample set, and the like. Upon obtaining a selection of one of the presented options, e.g. viauser input 213, clienthandwriting ingestion application 215 may process the selection and generate a request corresponding to the selected option. - These requests may be provided to user
session management service 323A operating on front-end server 300A, e.g. vianetwork 103. Usersession management service 323A may process the requests, provide related internal requests tohandwriting ingestion service 323B, obtain responses fromhandwriting ingestion service 323B, provide responses to clienthandwriting ingestion application 228 and store records of these requests and responses and other related data, e.g. inadministrative data store 105 indexed by a user identifier and/or a user session identifier. - When a user indicates a desire to create a new handwriting sample set, the handwriting ingestion system may identify a desired style of communication for a user, such as general English language communication, formal Japanese language communication, technical Arabic language communication, and the like. The handwriting ingestion system may then determine a code point sub-set, applicable to the desired style of communication, from one or more universal code point sets, such as the set of standard Unicode character code points.
- For each code point within the applicable code point sub-set, the handwriting ingestion system may collect one or more digitized samples of a handwritten glyphs corresponding to the code point. For example, as is explained in more detail below,
handwriting ingestion application 228 may provide a user interface that presents a user ofclient device 200 with a visual display of one or more code points and instructs the user to write out glyphs corresponding to the one or more code points using digitizingmarking device 220 to make one or more strokes on digitizingsurface device 218. Depending on the desired style of communication and the user's individual writing style, a digitized glyph sample may be made up of one or more strokes and multiple digitized glyph samples may also be contained within a single stroke. Therefore,handwriting ingestion application 228 may (1) accommodate glyph samples being made up of multiple, non-sequential strokes, for example if the digitizing marking device leaves the digitizing surface device during the glyph sample capture (as may be the case when hand writing the lower case English letters “f,” “i,” “j,” “k,” “t,” and “x” for example) (2) provide a user with the opportunity to segment strokes into individual glyphs, and then provide the user with the opportunity to associate one or more strokes and/or one or more stroke segments with a code point - Referring to
FIG. 4 by way of example, the word “This” 403 is made up of four sequential characters represented by four distinct code points: a “T”code point 405A, an “h” code point 405B, an “i” code point 405C, and a “s” code point 405D; a corresponding digitized hand-writtensample 408 of the word “This” may be made up of four sequential glyphs: a “T”glyph 410A, an “h”glyph 410B, an “i”glyph 410C, and an “s” glyph 410D. In this example, the digitized hand-written sample of the word “This” is made up of fourstrokes 413A-D, however strokes 413A-D do not respectively correspond toglyphs 410A-D. Rather, a ‘horizontal’stroke 413A and ‘vertical’ stroke 413B together make up “T”glyph 410A; athird stroke 413C makes up “h”glyph 410B, “s” glyph 410D, and part of “i”glyph 410C. A ‘dot’ stroke 413D makes up the remainder of the “i”glyph 410C. - In accordance with various embodiments, after a user finishes ‘dot’ stroke 413D, the user may then selectively segment
third stroke 413C into an “h” stroke segment 415A, an “i” stroke segment 415B, and an “s” stroke segment 415C. The user may then associate ‘horizontal’stroke 413A and ‘vertical’ stroke 413B as a digitized glyph sample for “T”code point 405A, “h” stroke segment 415A as a digitized glyph sample for “h” code point 405B, “i” stroke segment 415B and ‘dot’ stroke 413D as a digitized glyph sample for “i” code point 405B, and “s” stroke segment 415C as a digitized glyph sample for “s” code point 405D. - For each digitized glyph sample, the handwriting ingestion system may record code point sample contextual data related to the digitized glyph sample. For example, the handwriting ingestion system may record where the digitized glyph sample was collected within the context of a group of glyphs (e.g. at the beginning, or in the middle of a sequence of glyphs written as a continuous stroke), whether the previous glyph, if any, had an upward or downward exit angle (described in more detail below) and a low or high exit point, and whether the subsequent glyph, if any, had an upward or downward entry angle and a low or high entry point, and the like.
- For each stroke and/or stroke segment making up the digitized glyph sample, the handwriting ingestion system may also record stroke dimension data. For example, for each stroke, the handwriting ingestion system may obtain and record data values relating to the stroke overall temporal duration; the stroke's relative horizontal displacement over time, the stroke's relative vertical displacement displacement over time, the stroke's relative rotational displacement over time, the stroke's relative angular displacement over time, and the stroke's downward pressure over time.
- Each glyph sample may be added to a code point sample data set associated with the user (e.g. via a user identifier). The handwriting ingestion system will continue to collect digitized glyph samples for a given code point until the system determines it can reproduce a full range of glyph variations of the code point.
-
FIGS. 5A-K illustrate various states of an exemplary user interface 500 provided byhandwriting ingestion application 228 operating on aclient device 200 for enabling a user of the client device to selectively provide digitized samples of the user's handwriting via a digitizing surface device in conjunction with a digitizing marking device. Exemplary user interface 500 may, for example, be rendered bydisplay 215 in response to the execution of instructions of an instantiation of clienthandwriting ingestion application 228 operating on aclient device 200. Handwriting ingestion UI 500 may be rendered in awindow 503 including aninstructive prompt 505, asample text display 508, and an inputreproduction rendering display 510. - In
FIG. 5A , handwriting ingestion UI 500 is illustrated in an initialprompt state 500A. In initialprompt state 500A,instructive prompt 505 displays text instructing a useroperating client device 200 to input the sample text (“This is a test”) displayed insample text display 508 via digitizingsurface device 218 and digitizingmarking device 220. In the illustrated example, the displayed sample text includes: one instance of a “T” code point; one instance of an “h” code point; two instances of an “i” code point; three instances of an “s” code point; one instance of an “a” code point; two instances of a “t” code point; and one instance of an “e” code point. - In
FIG. 5B , handwriting ingestion UI 500 is illustrated in a first potential sampleingestion display state 500B. In first potential sampleingestion display state 500B, inputreproduction rendering display 510 displays a visual rendering of input data corresponding to afirst stroke 513A, e.g. obtained via digitizingsurface device 218 in combination with digitizing markingdevice 220. The characteristics of such input data are discussed in more detail below, particularly in reference toFIGS. 7A-B . - In
FIG. 5C , handwriting ingestion UI 500 is illustrated in a second potential sample ingestion display state 500C. In second potential sample ingestion display state 500C, inputreproduction rendering display 510 displays a visual rendering of input data corresponding tofirst stroke 513A and asecond stroke 513B, e.g. obtained via digitizingsurface device 218 in combination with digitizing markingdevice 220 subsequent to the first stroke. Similar to the example discussed above with reference toFIG. 4 , first andsecond strokes 513A-B make up a glyph sample corresponding to the first, “T” code point of the sample text. - In
FIG. 5D , handwriting ingestion UI 500 is illustrated in a third potential sample ingestion display state 500D. In third potential sample ingestion display state 500D, inputreproduction rendering display 510 displays a visual rendering of input data corresponding tofirst stroke 513A,second stroke 513B, and athird stroke 513C. Similar to the example discussed above with reference toFIG. 4 ,third stroke 513C includes glyph samples corresponding to the “h” code point, part of the “i” code point, and one of the “s” code points of the sample text. - In
FIG. 5E , handwriting ingestion UI 500 is illustrated in a fourth potential sampleingestion display state 500E. In fourth potential sampleingestion display state 500E; inputreproduction rendering display 510 displays a visual rendering of input data corresponding tofirst stroke 513A,second stroke 513B,third stroke 513C, and a fourth stroke 513D. Similar to the example discussed above with reference toFIG. 4 , fourth stroke 513D completes the glyph sample of the “i” code point of the sample text began bystroke 513C. - In
FIG. 5F , handwriting ingestion UI 500 is illustrated in a fifth potential sampleingestion display state 500F. In fifth potential sampleingestion display state 500F, inputreproduction rendering display 510 displays a visual rendering of input data corresponding tofirst stroke 513A,second stroke 513B,third stroke 513C, and fourth stroke 513D, along with afifth stroke 513E, asixth stroke 513F, a seventh stroke 513G, aneighth stroke 513H, a ninth stroke 513I, atenth stroke 513J, and aneleventh stroke 513K. First througheleventh strokes 513A-K collectively make up glyph samples corresponding to the sample text insample text display 508. - In
FIG. 5G , handwriting ingestion UI 500 is illustrated in asample segmentation state 500G insample segmentation state 500G,instructive prompt 505 displays text instructing a useroperating client device 200 to segment any multi-character strokes displayed in inputreproduction rendering display 510. For example, the user may user a mouse or other pointer-baseduser input 213 to select segmentation points 515 within a stroke where one glyph sample ends and another begins. In the illustrated example,third stroke 513C is segmented at two segmentation points 515A-B,fifth stroke 513C is segmented at onesegmentation point 515C, andeighth stroke 513H is segmented at two segmentation points 515D-E. As is shown inFIG. 5H ,third stroke 513C is segmented into threestroke segments 520A-C,fifth stroke 513C is segmented into two stroke segments 520D-E, andeighth stroke 513H is segmented into threestroke segments 520F-H. - In
FIG. 5H , handwriting ingestion UI 500 is illustrated in an initialstroke assignment state 500H. In initialstroke assignment state 500G, the sample text display has been replaced by acharacter sequence display 523 andinstructive prompt 505 displays text instructing a useroperating client device 200 to assign the various strokes and stroke segments displayed inreproduction rendering display 510 to a corresponding character from the character sequence display. - In
FIG. 5I , handwriting ingestion UI 500 is illustrated in a first ongoing stroke assignment state 500I. In first ongoingstroke assignment state 500G, the first, “T” character ofcharacter sequence display 523 has been highlighted andfirst stroke 513A has been selected, indicating the first stroke should be associated with a glyph sample for the “T” code point. - In
FIG. 5J , handwriting ingestion UI 500 is illustrated in a second ongoingstroke assignment state 500J. In second ongoingstroke assignment state 500J, the first, “T” character ofcharacter sequence display 523 is still highlighted andsecond stroke 513B has been selected, indicating the second stroke should also be associated with the glyph sample for the “T” code point. - In
FIG. 5K , handwriting ingestion LH 500 is illustrated in a third ongoingstroke assignment state 500K. In third ongoingstroke assignment state 500K, the second, “h” character ofcharacter sequence display 523 is now highlighted andfirst stroke segment 520A has been selected, indicating the first stroke segment should be associated with a glyph sample for the “h” code point. This stroke assignment process may be continued until the user indicates all strokes and stroke segments have been assigned to the appropriate glyph samples. -
FIG. 6 illustrates the assignments of data corresponding to various strokes and stroke samples obtained via digitizingsurface device 218 and digitizingmarking device 220 during the exemplary handwriting sample ingestion process described above with respect toFIGS. 5A-K are combined into glyph samples and assigned to code points. - Data collected during
stroke 513A andstroke 513B are combined to formglyph sample 603A, which is assigned to the “T”code point 605A. - Data collected during stroke 513G forms glyph sample 603B, which is assigned to the “a” code point 605B.
- Data collected during
stroke segment 520Gforms glyph sample 603C, which is assigned to the “e”code point 605C. - Data collected during
stroke segment 520A forms glyph sample 603D, which is assigned to the “h” code point 605D. - Data collected during
stroke segment 520B and stroke 513D are combined to form glyph sample 603E, which is assigned to the “i” code point 605E. Data collected during stroke segment 520D andstroke 513F are combined to formglyph sample 603F, which is also assigned to the “i” code point 605E. - Data collected during
stroke segment 520F andstroke 513J are combined to formglyph sample 603J, which is assigned to the “t”code point 605F. Data collected during stroke 513I andstroke 513K are combined to formglyph sample 603K, which is also assigned to the “t”code point 605F. - Data collected during
stroke segment 520C forms glyph sample 603G, which is assigned to the “s” code point 605G. Data collected duringstroke segment 520E forms glyph sample 603H, which is also assigned to the “s” code point 605G. Data collected duringstroke segment 520C forms glyph sample 603G, which is assigned to the “s” code point 605G. Data collected duringstroke segment 520H forms glyph sample 603I, which is also assigned to the “s” code point 605G. -
FIGS. 7A-B illustrate respectivegraphical representations 700A-B of stroke data collected by clienthandwriting ingestion application 228 duringstroke 513A andstroke 513B (which combine to form a capital letter “T” in the English language) in the example described above and obtained via digitizingsurface device 218 and digitizingmarking device 220. - Referring to
FIG. 7A , stroke data obtained from digitizingsurface device 218 and digitizingmarking device 220 corresponding to strokes, such asstrokes 513A-B, may take the form of a time-based series of sampled stroke dimensional data values.Stroke 513A extends from anorigin point 703A, through a series of intermediate points 703B-1, to atermination point 703J.Stoke 513B extends from anorigin point 705A, through a series of intermediate points 705B-H, to a termination point 705I. - An exemplary handwriting code point set data structure (hw_cp_set_DS) may include a character map data structure and other associated values corresponding to various aspects of the code point set, such as a user identifier value, an average character width value, an average character height value, a maximum character height value, and the like.
- An exemplary character map data structure (char_map_DS) may include a plurality of code point data structures, e.g. a code point data structure for each character in the code point set A, B, C, D, . . . T, . . . h, i, . . . s, . . . ).
- An exemplary code point data structure may include one or more code point sample data structures, e.g. a code point sample data structure for each code point sample obtained for a given code point.
- An exemplary code point sample data structure may include one or more stroke data structures, e.g. a stroke data structure corresponding to each stroke within a given code point sample. A code point sample data structure may also include values corresponding to the source of the sample (e.g. the word “This”) and the relative position within the source (e.g. 0 in the case of “T,” 1 in the case of “h,” etc.).
- An exemplary stroke data structure may include of a time-based series of sampled stroke dimensional data values, e.g. data values corresponding to a time value (representing the sampling interval of the stroke), relative horizontal position or displacement values, relative vertical position or displacement values, pressure values, spin values, angle values, and the like. (Examples of the horizontal position values, vertical position values, and pressure values are visually depicted in
FIGS. 7A-B (with pressure values being illustrated by data point diameter).) - Thus, an exemplary handwriting code point set data structure may be representable as:
-
hw_cp_set_DS{ char_map_Ds: { ... A′: [ Sample_1{ Strokes: [ Stroke_1{ Times: [T0, T1, T2, ..., Tn], Xs: [X0, X1, X2, ..., Xn], Ys: [Y0, Y1, Y2, ..., Yn.], Pressures: [P0, P1, P2, ..., Pn], Spins: [S0, S1, S2, ..., Sn] Angles: [A0, A1, A2, ..., An] }, Stroke_2 { Times: [T0, T1, T2, ..., Tm], Xs: [X0, X1, X2, ..., Xm], Ys: [Y0, Y1, Y2, ..., Ym], Pressures: [P0, P1, P2, ..., Pm], Spins: [S0, S1, S2, ..., Sm] Angles: [A0, A1, A2, ..., Am] }, Stroke_3 { ... } ... ] } Sample_2 { Strokes:[ ... ] } Sample_3 { ... } ... ] B′[ ... } -
FIG. 8 illustrates a first exemplary series ofcommunications 800 betweenclient device 200A, front-end server 300A, and handwriting ingestion server 300B in accordance with various embodiments of an exemplary client/server-based handwriting ingestion system, such as the exemplary client/server-based handwriting ingestion system illustrated inFIG. 1 . -
Client device 200A may obtain 803 and process 805 a user session initiation command, e.g. viauser input 213 in response to a prompt provided viadisplay 215. -
Client device 200A may provide front-end server 300A with a corresponding usersession initiation request 808. Usersession initiation request 808 may include user identifying information corresponding to a user ofclient device 200A, e.g. via an alphanumeric identifier associated with a user, and the like. - Front-
end server 300A may process 810 usersession initiation request 808. For example, front-end server 300A may instantiate a user session associated with the user identifying information, obtain additional meta-data relating to the user identifying information, e.g. fromadministrative data store 105 and/or other sources, and the like. - Front-
end server 300A may provide handwriting ingestion server 300B with auser data request 813. User data request 813 may include data obtained fromclient device 200A via usersession initiation request 808, such as a user identifier, and viaprocessing 810 the user session initiation request by front-end server 300A. - Handwriting ingestion server 300B may process 815
user data request 813. For example, handwriting ingestion server 300B may obtain handwriting sample data associated with the user identifier, e.g. from handwriting sample setdata store 108, determine a measure of handwriting sample set completeness, and the like. - Handwriting ingestion server 300B may then provide a
user data response 818 to front-end server 300A. - Front-
end server 300A may then process 820user data response 818, e.g. by parsing the user data response to extract data to pass on toclient device 200. - Front-
end server 300A may then provide a usersession initiation response 823 toclient device 200A. Usersession initiation response 823 may include a user session identifier, handwriting sample set data, and/or the like. -
Client device 200A may then process 825 usersession initiation response 820, for example by rendering information provided in the user session initiation response viadisplay 215. -
Client device 200A may then obtain 828 andprocess 830 new handwriting sample data, such as in the manner described above in reference toFIGS. 5A-K , to obtain stroke dimension data for one or more glyph samples. -
Client device 200A may provide front-end server 300A with a corresponding handwritingsample update request 833. Handwritingsample update request 833 may include the user session identifier, code point identifiers, stroke dimension data from one or more glyph samples, and/or the like. - Front-
end server 300A may process 835 handwritingsample update request 833 and provide handwriting ingestion server 300B with an internal handwritingsample update request 838. Internal handwritingsample update request 838 may include the user identifier associated with the user session, code point identifiers, stroke dimension data from one or more glyph samples, and/or the like. - Handwriting ingestion server 300B may process 840 internal handwriting
sample update request 838. For example, handwriting ingestion server 300B may store the stroke dimension data in handwriting sample setdata store 108 associated with the respective user identifier and code point identifiers, determine an updated measure of handwriting sample set completeness, and the like. - Handwriting ingestion server 300B may then provide an internal handwriting
sample update response 843 to front-end server 300A. For example, internal handwritingsample update response 843 may include an acknowledgement the handwriting sample set associated with the user identifier has been updated, the updated measure of handwriting sample set completeness, and the like. - Front-
end server 300A may then process 845 internal handwritingsample update response 843 and provide a handwritingsample update response 848 toclient device 200A. Handwritingsample update response 848 may include an acknowledgement the handwriting sample set associated with the user identifier has been updated, the updated measure of handwriting sample set completeness, and the like. -
Client device 200A may then process 850 handwritingsample update response 848, for example by rendering information provided in the handwriting sample update response viadisplay 215, and the like. -
FIG. 9 illustrates an exemplary handwritingsample ingestion routine 900, which may be implemented by clienthandwriting ingestion application 228 operating on a client device, such asclient devices 200A-B. - Handwriting
sample ingestion routine 900 may obtain a user identifier atexecution block 903. For example, clienthandwriting ingestion application 228 may obtain a user identifier via auser input 213 in response to a user's interaction with a user login interface, a user profile file stored inmemory 205, or the like. - Handwriting
sample ingestion routine 900 may provide a handwriting code point set request, including the user identifier, atexecution block 905. For example, client handwriting application may provide the handwriting code point set request to front-end server 300B vianetwork 103. - At
decision block 908, if a handwriting code point set associated with the user identifier is obtained, e.g. from front-end server 300B (or directly fromhandwriting ingestion server 300A) vianetwork 103 in response to the handwriting code point set request, then handwritingsample ingestion routine 900 may call a handwriting code point setcompleteness sub-routine 1100, described below in reference toFIG. 11 ; otherwise handwritingsample ingestion routine 900 may proceed toexecution block 910. - Handwriting
sample ingestion routine 900 may then call an initialsample collection sub-routine 1000, described below in reference toFIG. 10 . - Handwriting
sample ingestion routine 900 may then call handwriting code point setcompleteness sub-routine 1100. - At
decision block 913, if the result of handwriting code point setcompleteness sub-routine 1100 indicates the handwriting code point set in its current state is useable, handwritingsample ingestion routine 900 may proceed to decision block 915; otherwise handwritingsample ingestion routine 900 may call a supplementalsample collection sub-routine 1200, discussed below in reference toFIG. 12 . After the completion of supplementalsample collection sub-routine 1200, handwritingsample ingestion routine 900 may loop back to handwriting code point setcompleteness sub-routine block 1100. - At
decision block 915, if the result of handwriting code point setcompleteness sub-routine 1100 indicates the handwriting code point set in its current state is complete, handwritingsample ingestion routine 900 may proceed toexecution block 918; otherwise, 900 may proceed toexecution block 920. - At
execution block 918, handwritingsample ingestion routine 900 may provide a handwriting code point data structure complete prompt, e.g. viadisplay 215, to inform the user ofclient device 200 that no additional handwriting samples are needed. Handwritingsample ingestion routine 900 may then proceed totermination block 999. - At
execution block 920, handwritingsample ingestion routine 900 may provide a supplemental sample collection prompt, e.g. viadisplay 215, to inform the user ofclient device 200 that the handwriting code point set data structure is usable, but that additional samples may improve the results of handwriting generation services, and inviting the user to provide additional samples. - At
decision block 923, if handwritingsample ingestion routine 900 obtains an affirmative response to the supplemental sample collection prompt, then handwritingsample ingestion routine 900 may call supplementalsample collection sub-routine 1200; otherwise, handwritingsample ingestion routine 900 may proceed totermination block 999. - Handwriting
sample ingestion routine 900 may end attermination block 999. -
FIG. 10 illustrates an exemplary initial handwritingsample collection sub-routine 1000, which may be implemented by clienthandwriting ingestion application 228, e.g. in response to a call from handwritingsample ingestion routine 900. - Handwriting
sample collection sub-routine 1000 may obtain an initial handwriting sample collection request atexecution block 1003. The initial handwriting sample collection request may include a user identifier. - Handwriting
sample collection sub-routine 1000 may instantiate a handwriting code point set data structure and associate the handwriting code point set data structure with the user identifier atexecution block 1005. - Handwriting
sample collection sub-routine 1000 may select an initial handwriting sample atexecution block 1008. For example, handwritingsample collection sub-routine 1000 may obtain a handwriting style identifier associated with the user identifier and then obtain a handwriting sample identifier associated with the handwriting style identifier. - Handwriting
sample collection sub-routine 1000 may then call a handwritingsample collection sub-routine 1300, described below in reference toFIG. 13 , which may include providing the handwriting sample identifier to handwritingsample collection sub-routine 1300. - Handwriting
sample collection sub-routine 1000 may return, e.g. to handwritingsample ingestion routine 900, atreturn block 1099. -
FIGS. 11A-B illustrate an exemplary handwriting code point setcompleteness sub-routine 1100, which may be implemented by clienthandwriting ingestion application 228, e.g. in response to a call from handwritingsample ingestion routine 900. - Referring to
FIG. 11A , handwriting code point setcompleteness sub-routine 1100 may obtain a handwriting code point set completeness request atexecution block 1103. Handwriting code point set completeness request may include a user identifier, a handwriting code point set data structure identifier and a handwriting style identifier. - Handwriting code point set
completeness sub-routine 1100 may determine one or more critical code point set requirements associated with the handwriting style identifier atexecution block 1105. - Handwriting code point set
completeness sub-routine 1100 may set a critical pass flag value to true atexecution block 1108. - At starting
loop block 1110, handwriting code point setcompleteness sub-routine 1100 may process each critical code point set requirement in turn. - At
decision block 1113, if the handwriting code point set data structure associated with the handwriting code point set data structure identifier does not contain a minimum acceptable number of glyph samples for the current critical code point set requirement, handwriting code point setcompleteness sub-routine 1100 may proceed toexecution block 1115; otherwise handwriting code point setcompleteness sub-routine 1100 may proceed to endingloop block 1118. - Handwriting code point set
completeness sub-routine 1100 may set the critical pass flag value to false atexecution block 1115. - At ending
loop block 1118, handwriting code point setcompleteness sub-routine 1100 may loop back to startingloop block 1110 and process the next critical code point set requirement, if any. - At
decision block 1120, if the critical pass flag false is equal to true, handwriting code point setcompleteness sub-routine 1100 may proceed to execution block 1123 (FIG. 11B ); otherwise handwriting code point setcompleteness sub-routine 1100 may proceed to returnblock 1197. - Referring now to
FIG. 11B , handwriting code point setcompleteness sub-routine 1100 may determine one or more complete code point set requirements associated with the handwriting style identifier atexecution block 1123. - Handwriting code point set
completeness sub-routine 1100 may set a complete pass flag value to true atexecution block 1125. - At starting
loop block 1128, handwriting code point setcompleteness sub-routine 1100 may process each complete code point set requirement in turn. - At
decision block 1130, if the handwriting code point set data structure associated with the handwriting code point set data structure identifier does not contain a minimum acceptable number of glyph samples for the current complete code point set requirement, handwriting code point setcompleteness sub-routine 1100 may proceed toexecution block 1133; otherwise handwriting code point setcompleteness sub-routine 1100 may proceed to endingloop block 1135. - Handwriting code point set
completeness sub-routine 1100 may set the complete pass flag value to false atexecution block 1133. - At ending
loop block 1135, handwriting code point setcompleteness sub-routine 1100 may loop back to startingloop block 1128 and process the next complete code point set requirement, if any. - At
decision block 1138, if the complete pass flag false is equal to true, handwriting code point setcompleteness sub-routine 1100 may proceed to returnblock 1198; otherwise handwriting code point setcompleteness sub-routine 1100 may proceed to returnblock 1199. - At
return block 1197, handwriting code point setcompleteness sub-routine 1100 may return a handwriting code point set unusable message, e.g. to handwritingsample ingestion routine 900. - At
return block 1198, handwriting code point setcompleteness sub-routine 1100 may return a handwriting code point set complete message, e.g. to handwritingsample ingestion routine 900. - At
return block 1199, handwriting code point setcompleteness sub-routine 1100 may return a handwriting code point set usable message, e.g. to handwritingsample ingestion routine 900. -
FIG. 12 illustrates an exemplary supplementalsample collection sub-routine 1200, which may be implemented by clienthandwriting ingestion application 228, e.g. in response to a call from handwritingsample ingestion routine 900. - Supplemental
sample collection sub-routine 1200 may obtain a supplemental handwriting sample collection request atexecution block 1203. The supplemental handwriting sample collection request may include a user identifier and/or a handwriting code point set data structure identifier. - Supplemental
sample collection sub-routine 1200 may parse a handwriting code point set data structure associated with the handwriting code point set data structure identifier atexecution block 1205. For example, supplementalsample collection sub-routine 1200 may determine one or more code points for which the handwriting code point set data structure identifier does not contain a minimum acceptable number of glyph samples. - Supplemental
sample collection sub-routine 1200 may select a supplemental handwriting sample target atexecution block 1208. For example, supplementalsample collection sub-routine 1200 may select a supplemental handwriting sample target based on the one or more code-points for which the handwriting code point set data structure identifier does not contain a minimum acceptable number of glyph samples. - Supplemental
sample collection sub-routine 1200 may then call handwritingsample collection sub-routine 1300, described below in reference toFIG. 13 , which may include providing the supplemental handwriting sample target identifier to handwritingsample collection sub-routine 1300. - Supplemental
sample collection sub-routine 1200 may return, e.g. to handwritingsample ingestion routine 900, atreturn block 1299. -
FIGS. 13A-B illustrate an exemplary handwritingsample collection sub-routine 1300, which may be implemented by clienthandwriting ingestion application 228, e.g. in response to a call from initialsample collection sub-routine 1000 or supplemental sample collection supplementalsample collection sub-routine 1200. - Referring to
FIG. 13A , handwritingsample collection sub-routine 1300 may obtain a handwriting sample collection request atexecution block 1303. - Handwriting
sample collection sub-routine 1300 may render a visual representation of the handwriting sample text, e.g. viadisplay 215, at execution block 1305 (seesample text display 508,FIG. 5 ). - At
decision block 1308, if digitized handwriting sample data collection is complete, then handwritingsample collection sub-routine 1300 may proceed toexecution block 1311; otherwise handwritingsample collection sub-routine 1300 may proceed todecision block 1309. - At
decision block 1309, if a sample collection period timeout or user cancellation interrupt has been received, handwritingsample collection sub-routine 1300 may proceed to returnblock 1398. - At
execution block 1310, handwritingsample collection sub-routine 1300 may obtain digitized handwriting sample data, such as the digitized handwriting sample data described above with respect toFIGS. 7A-B , representative of the handwriting sample text and captured by digitizing markingsurface 218 and digitizingmarking device 220. - Handwriting
sample collection sub-routine 1300 may provide a digitized handwriting sample image representative of the handwriting sample data, e.g. viadisplay 215, atexecution block 1311. - Handwriting
sample collection sub-routine 1300 may provide a stroke segmentation prompt; e.g. viadisplay 215, atexecution block 1312. - Handwriting
sample collection sub-routine 1300 may capture stroke segmentation points, e.g. viauser input 213, atexecution block 1313. - Handwriting
sample collection sub-routine 1300 may map any captured stroke segmentation points to points in the digitized handwriting sample data atexecution block 1314. - At
decision block 1315, if the stroke segmentation process is complete, handwritingsample collection sub-routine 1300 may proceed to startingloop block 1318, described below in reference toFIG. 13B ); otherwise handwritingsample collection sub-routine 1300 may continue to wait for the stroke segmentation process to complete. - Referring now to
FIG. 13B , at startingloop block 1316, handwritingsample collection sub-routine 1300 may process each code point sample in the handwriting sample text in turn. - Handwriting
sample collection sub-routine 1300 may provide a stroke identification prompt atexecution block 1318, e.g. viadisplay 215. - At
decision block 1320, if a stroke identification response is obtained, e.g. viauser input 213, handwritingsample collection sub-routine 1300 may proceed toexecution block 1323; otherwise handwritingsample collection sub-routine 1300 may continue to wait for a stroke identification response. - Handwriting
sample collection sub-routine 1300 may instantiate a new code point sample value for the current code point of the handwriting sample text in the handwriting code point set data structure atexecution block 1323. - At
decision block 1325, if multiple stroke segments were identified for the current code point during stroke identification, then handwritingsample collection sub-routine 1300 may proceed to startingloop block 1328; otherwise handwritingsample collection sub-routine 1300 may proceed toexecution block 1338. - At starting
loop block 1328, handwritingsample collection sub-routine 1300 may process each identified stroke segment in turn. - Handwriting
sample collection sub-routine 1300 may instantiate a new segment value for the current sample value in the handwriting code point data structure atexecution block 1330. - Handwriting
sample collection sub-routine 1300 may identify digitized handwriting sample data corresponding to the current stroke segment atexecution block 1331. - Handwriting
sample collection sub-routine 1300 may associate the identified digitized handwriting sample data with the new segment value for the current code point atexecution block 1333. - At ending
loop block 1335, handwritingsample collection sub-routine 1300 may loop back to startingloop block 1328 to process the next identified stroke segment, if any. - At
execution block 1338, handwritingsample collection sub-routine 1300 may identify digitized handwriting sample data corresponding to the identified stroke. - Handwriting
sample collection sub-routine 1300 may associate the identified digitized handwriting sample data with the new code point sample value for the current code point atexecution block 1340. - At ending
loop block 1343, handwritingsample collection sub-routine 1300 may loop back to startingloop block 1316 to process the next code point in the handwriting sample text, if any. - At termination block 1398 (see
FIG. 13A ), handwritingsample collection sub-routine 1300 may return a collection successful message attermination block 1399. - Handwriting
sample collection sub-routine 1300 may return a collection successful message attermination block 1399. -
FIG. 14 illustrates a first exemplary client/server-basedhandwriting generation system 1400 in accordance with various embodiments. Client devices 200C-D, front-end server 300A, and ahandwriting generation server 300C are in data communication with anetwork 103. In various embodiments,network 103 may include the Internet, one or more local area networks (“LANs”), one or more wide area networks (“WANs”), cellular data networks, and/or other data networks.Network 103 may, at various points, be a wired and/or wireless network. Remote front-end server 300A may be in data communication with a remotehandwriting generation server 300C. Remotehandwriting generation server 300C may be in data communication with handwriting sample setdata store 108. - In these and other embodiments, client devices 200C-D may be networked computing devices having form factors including general purpose computers (including “desktop,” “laptop,” “notebook,” “tablet” computers, or the like); mobile phones; watches, glasses, or other wearable computing devices; or the like.
Memory 205 of client devices 200C-D may store program code, executable bycentral processing unit 203, corresponding to anoperating system 223, as well as program code corresponding to various software applications, such as abrowser application 225, ahandwriting generation application 233, and other applications (not shown), such as a handwriting generation application capable of performing the functionality described below. - For simplified exemplary purposes, two
client devices 200 are shown, client device 200C is depicted as a laptop computer and client device 200D is depicted as a mobile phone. In various embodiments there may be manymore client devices 200. The primary functional components of an exemplary, form-factor-independent client device 200 are described above in reference toFIG. 2 . Client devices 200C-D may be the same physical devices as some or all ofclient devices 200A-B. Client device 200C may be in data communication with anexternal printing device 1408. - In various embodiments, remote
handwriting generation server 300C may be networked computing devices generally capable of accepting requests overnetwork 108, e.g. fromclient devices 200, each other, various databases, and/or other networked computing devices, and providing responses according to a handwriting generating service 3230 capable of performing the functionality described below. The primary functional components of an exemplaryhandwriting ingestion server 300C, are described above in reference toFIG. 3 . - Client/Server-Based Handwriting Generation Service
- Referring collectively to
FIGS. 1-14 , and as is described in more detail below, an instance of clienthandwriting generation application 233 operating on a client device, such as client devices 200C-D, remote usersession management service 323A operating on front-end server 300A, and remotehandwriting generation service 323C operating onhandwriting ingestion server 300C (collectively a client/server-based handwriting generation system) in accordance with the present embodiments may operate to utilize a code point sample data set of a user's handwriting, described above, to obtain text data including a message from a user and generate an simulated text image, e.g. for electronic display and/or hard-copy printing, including a sequence of glyphs corresponding the message and having the appearance of being rendered in the user's handwriting. Such a client/server based handwriting generation system may be operated in furtherance of a handwriting digitization service provider (not shown) providing handwriting reproduction services. - Instantiations of client
handwriting generation application 233 may act as an interface between a user of client devices 200C-D and usersession management service 323A operating on front-end server 300A. Upon instantiation, clienthandwriting generation application 233 may send a “create new session” request to usersession management service 323A, for example including identifying information forclient device 200, identifying information for the particular instantiation of clienthandwriting generation application 233, and/or user-account credentials such as a user name and password, obtained from the user or stored inmemory 205. If presented, the user-account credentials may be associated with an existing user account or with a generic, temporary, and/or anonymous “guest” account. - User
session management service 323A may create a corresponding user session (not shown) associated with the particular instantiation of clienthandwriting ingestion generation 233, identified by a user-session identifier (referred to herein as a “session ID”) and may obtain user account information, such as a user identifier, associated with the provided identifying information fromadministrative data store 105 and provide a response to clienthandwriting ingestion application 228, which may include information related to features and services provided by the handwriting digitization service provider which the user-account associated with the user-account credentials are authorized to access. - Referring also now to
FIGS. 15A-D , clienthandwriting generation application 233 may then present the user with a handwriting generation input prompt 1503, e.g. viaoptional display 215, and wait for the user to indicate a selection of a specific option, e.g. viaoptional input 213. Such options may include providingmanual text input 1505A or selecting a pre-existing file including text data 1505B, and the like. Upon obtaining a selection of one of the presented options, e.g. viauser input 213, clienthandwriting generation application 233 may process the selection and generate a request corresponding to the selected option. - These requests may be provided to user
session management service 323A operating on front-end server 300A, e.g. vianetwork 103. Usersession management service 323A may process the requests, provide related internal requests tohandwriting generation service 323C, obtain responses fromhandwriting generation service 323C, provide responses to clienthandwriting generation application 233 and store records of these requests and responses and other related data, e.g. inadministrative data store 105 indexed by a user identifier and/or a user session identifier. - For example, if the user selects
manual input 1505A, clienthandwriting generation application 233 may then present the user with atext entry window 1508.Text entry window 1508 may include a text entry prompt 1510 and atext display window 1513. After a user enters text for conversion (e.g. “This is a test”),client handwriting generation 233 application may present the user with acustomization interface 1515.Customization interface 1515 may include acustomization prompt 1518 and one or more customization options, such as ahandwriting style option 1520A (e.g. user A's formal handwriting style, user B's casual handwriting style, and the like), a writing implement option 1520B (e.g. ballpoint pen, fountain pen, calligraphy brush, spray can, and the like), and/orother options 1520C (e.g. animation, color, and the like). After a user selects options 1520, clienthandwriting generation application 233 may present the user with a simulatedtext image interface 1523 including asimulated text image 1525 corresponding to the text entered by the user, rendered in the selected handwriting style in accordance with the selected options. -
Simulated text interface 1523 may also providecustomization options 1520A-C to enable the user to make additional changes tosimulated text image 1525. - Exemplary Series of Communications
-
FIG. 16 illustrates a second exemplary series ofcommunications 1600 between client device 200C, front-end server 300A; andhandwriting generation server 300C in accordance with various embodiments of an exemplary client/server-based handwriting ingestion system, such as the exemplary client/server-based handwriting ingestion system illustrated inFIG. 14 . - Client device 200C may obtain 1603 and process 1605 a user session initiation command, e.g. via
user input 213 in response to a prompt provided viadisplay 215. -
Client device 200A may provide front-end server 300A with a corresponding user session initiation request 1608. User session initiation request 1608 may include user identifying information corresponding to a user ofclient device 200A, e.g. via an alphanumeric identifier associated with a user, and the like. - Front-
end server 300A may process 1610 user session initiation request 1608. For example, front-end server 300A may instantiate a user session associated with the user identifying information, obtain additional meta-data relating to the user identifying information, e.g. fromadministrative data store 105 and/or other sources, and the like. - Front-
end server 300A may providehandwriting generation server 300C with auser data request 1613.User data request 1613 may include data obtained fromclient device 200A via user session initiation request 1608, such as a user identifier, and via processing 1610 the user session initiation request by front-end server 300A. -
Handwriting generation server 300C may process 1615user data request 1613. For example,handwriting generation server 300C may obtain handwriting sample data associated with the user identifier, e.g. from handwriting sample setdata store 108, determine a measure of handwriting sample set completeness, and the like. -
Handwriting generation server 300C may then provide a user data response 1618 to front-end server 300A. - Front-
end server 300A may then process 1620 user data response 1618, e.g. by parsing the user data response to extract data to pass on toclient device 200. - Front-
end server 300A may then provide a usersession initiation response 1623 toclient device 200A. Usersession initiation response 1623 may include a user session identifier, handwriting sample set data, and/or the like. -
Client device 200A may then process 1625 user session initiation response 1620, for example by rendering information provided in the user session initiation response viadisplay 215. -
Client device 200A may then obtain 1628 andprocess 1630 new text-to-handwriting input, such as in the manner described above in reference toFIGS. 15A-C , to obtain text data for conversion. -
Client device 200A may provide front-end server 300A with a corresponding text-to-handwriting (“TTH”) request 1633. Text-to-handwriting request 1633 may include the user session identifier, text data, customization option data, and the like. - Front-
end server 300A may process 1635 TTH request 1633 and providehandwriting generation server 300C with an internalTTH generation request 1638. InternalTTH generation request 1638 may include the user identifier associated with the may include the user session identifier, text data, and customization option data, and the like. -
Handwriting generation server 300C may process 1640internal TTH request 1638. For example,handwriting generation server 300C may invokehandwriting generation service 323C to execute instructions approximating the functionality ofTIE generation routine 1800, illustrated inFIG. 18 , and its associated sub-routines. -
Handwriting generation server 300C may then provide an internal TTH response 1643 to front-end server 300A. For example, internal TTH response 1643 may include a simulated text image corresponding to the text data obtained byinternal TTH request 1638. - Front-
end server 300A may then process 1645 internal TTH response 1643 and provide a TTH response 1648 to client device 200C. TTH response 1648 may include the simulated text image corresponding to the text data obtained via internal TTH response 1643. - Client device 200C may then process 1650 TTH response 1648, for example by rendering information provided in the handwriting sample update response via
display 215, as described above with respect toFIG. 15D , and the like. -
FIG. 17 illustrates an exemplary sampletext intake routine 1700, which may be implemented by clienthandwriting generation application 228 operating on a client device, such as client devices 200C-D. -
Routine 1700 may obtain a user identifier atexecution block 1703. -
Routine 1700 may provide a user session initialization request atexecution block 1705, e.g. to front-end server 300A. The user session initialization request may include the user identifier obtained inexecution block 1703. - At
decision block 1708, if a complete handwriting code point set is associated with said user identifier; routine 1700 may proceed toexecution block 1710; otherwise, routine 1700 may call handwritingsample ingestion routine 900, described above in reference toFIG. 9 . -
Routine 1700 may provide a handwriting generation prompt, for example as described above in reference toFIG. 15A , atexecution block 1710. -
Routine 1700 may parse handwriting generation input data, e.g. text data, to generate a text-to-handwriting request atexecution block 1713. -
Routine 1700 may provide the text-to-handwriting request, e.g. to front-end sever 300A as described above in reference toFIG. 16 , atexecution block 1715. The text-to-handwriting request may include a user session identifier, text data, customization option data, and the like. - At
decision block 1718, if a text-to-handwriting response has been obtained, then routine 1700 may proceed toexecution block 1720; otherwise routine 1700 may continue to wait for a text-to-handwriting response. The text-to-handwriting response may include a generated handwriting image sample and/or a URI that points to a generated handwriting image sample. -
Routine 1700 may render a generated handwriting image sample, such as described above in reference toFIG. 15D , atexecution block 1720. - At
decision block 1723, if routine 1700 obtains approval of the generated handwriting image sample, e.g. viauser input 213, routine 1700 may proceed toexecution block 1725 -
Routine 1700 may provide a link to a file corresponding to the generated handwriting image sample atexecution block 1725. The file may be stored locally on client device 200C or remotely, e.g. onadministrative data store 105 or the like. -
Routine 1700 may terminate attermination block 1799. -
FIG. 18 illustrates an exemplary sampletext intake routine 1800, which may be implemented byhandwriting generation service 323C operating onhandwriting generation server 300C, for example during the processing of a text-to-handwriting generation request 1640, described above. -
Routine 1800 may obtain a text-to-handwriting (“TTH”) generation request, including text data as described above, and instantiate a TTH data structure atexecution block 1803. -
Routine 1800 may parse the text data obtained in the TTH request atexecution block 1803. For example, if the text data corresponds to English language text, such as “This is a test,” then routine 1800 may separate the text data into four tokens, each token corresponding to each word (“This,” “is,” “a,” and “test”), and instantiate a token identifier corresponding to each of tokens in the TTH data structure. - At starting
loop block 1808, routine 1800 may process each token in the message data in turn. -
Routine 1800 may parse the code points of the current token atexecution block 1809. For example, if the current token corresponds to the word “test,” then routine 1800 may separate the token into four code points (“t,” “e,” “s,” and “t”) and instantiate a code point identifier corresponding to each of the code points in the token. - At starting
loop block 1810, routine 1800 may process each code point in the current token in turn. -
Routine 1800 may call code pointsample selection sub-routine 1900, described below in reference toFIG. 19 . - At ending
loop block 1813, routine 1800 may loop back to startingloop block 1810 and process the next code point in the current token, if any. - At
decision block 1815, if intra-code point ligatures are required for the current token (e.g. in the case of cursive English language handwriting), then routine 1800 may callligature stitching sub-routine 2000, described below in reference toFIGS. 20A-B ; otherwise; routine 800 may calltoken assembly sub-routine 2100, described below in reference toFIG. 21 . - At ending
loop block 1818, routine 1800 may loop back to startingloop block 1808 and process the next token in the text data, if any. -
Routine 1800 may call message assembly sub-routine, described below in reference toFIG. 22 . -
Routine 1800 may then generate a handwritten message image using the data in the TTH data structure atexecution block 1820. -
Routine 1800 may provide a TTH response, described above, atexecution block 1823. -
Routine 1800 may terminate attermination block 1899. -
FIG. 19 illustrates an exemplary code pointsample selection sub-routine 1900 which may be implemented byhandwriting generation service 323C operating onhandwriting generation server 300C, for example in response to a call fromTTH generation routine 1800. -
Sub-routine 1900 may obtain a code point selection request atexecution block 1903. For example, code point selection request may include a TTH data structure identifier and a code point identifier. -
Sub-routine 1900 may obtain code point samples corresponding to the code point identifier from a handwriting code point set associated with the TTH data structure. -
Sub-routine 1900 may compare the obtained code point samples atexecution block 1908. For example, sub-routine 1900 may rate each code point samples suitability for the current code point identifier based on one or more criteria. Each code point sample may also be assigned an additional, randomized rating. -
Sub-routine 1900 may select the best fit code point sample based on the code point sample ratings, including the randomized rating, if available, atexecution block 1910. -
Sub-routine 1900 may associate the selected code point sample identifier from the handwriting code point set with the code point identifier of the TTH data structure atexecution block 1913. -
Sub-routine 1900 may return toTTH generation routine 1800 at 1999. -
FIGS. 20A-B illustrate an exemplaryligature stitching sub-routine 2000 which may be implemented byhandwriting generation service 323C operating onhandwriting generation server 300C, for example in response to a call fromTTH generation routine 1800. - Referring to
FIG. 20A , sub-routine 2000 may at execution block 2003, -
Sub-routine 2000 may at execution block 2005. - At starting
loop block 2008, sub-routine 2000 may process each code point of the current token in turn. - At decision block 2010, if the current code point is the first code point of the current token, then sub-routine 2000 may proceed to ending loop block 2040 (
FIG. 20B ); otherwise sub-routine 2000 may proceed to starting loop block 2013. - At starting loop block 2013, sub-routine 2000 may process each possible ingress point of the current code point in turn.
- At starting loop block 2015, sub-routine 2000 may process each possible egress point of the previously processed code point in turn.
-
Sub-routine 2000 may at execution block 2018. - At decision block 2020, if the slope of the current ingress point matches the slope of the current egress point within a pre-defined tolerance range, then sub-routine 2000 may proceed to execution block 2023; otherwise sub-routine 2000 may proceed to ending loop block 2025.
-
Sub-routine 2000 may record the current ingress point and egress point as a potential matching range pair at execution block 2023. - At ending loop block 2025, sub-routine 2000 may loop back to starting loop block 2015 to process the next possible egress point of the previously processed code point, if any.
- At ending loop block 2028, sub-routine 2000 may loop back to starting loop block 2013 to process the next possible ingress point of the current code point, if any.
- Referring now to
FIG. 20B , sub-routine 2000 may rank the potential matching range pairs atexecution block 2030. For example, the matching range pairs may be ranked based on the difference in magnitude between the respective egress angle and ingress angle. -
Sub-routine 2000 may select the best matching range pair based on the rankings atexecution block 2033. -
Sub-routine 2000 may generate a ligature element based on the matching range pair atexecution block 2035. -
Sub-routine 2000 may associate the ligature element with the current code point atexecution block 2038. - At ending
loop block 2040, sub-routine 2000 may process the next code point of the current token, if any. -
Sub-routine 2000 may return toTTH generation routine 1800 atreturn block 2099. -
FIG. 21 illustrates an exemplarytoken assembly sub-routine 2100 which may be implemented byhandwriting generation service 323C operating onhandwriting generation server 300C, for example in response to a call fromTTH generation routine 1800.Token assembly sub-routine 2100 may function to assemble the code points of a given token in a manner that will simulate the handwriting associated with a specific user identifier. -
Sub-routine 2100 may obtain a token assembly request atexecution block 2103. For example, the token assembly request may include a token identifier from the current TTH data structure. - At starting
loop block 2105, sub-routine 2100 may process each code point of the token in turn. - At
decision block 2108, if the current code point is the first code point of the token, then sub-routine 2100 may proceed to decision endingloop block 2135, described below; otherwise, sub-routine 2100 may proceed todecision block 2110. - At
decision block 2110, if the code points of the current TTH data structure are to be linked by ligatures, sub-routine 2100 may proceed to 2113; otherwise, sub-routine 2100 may proceed toexecution block 2130, described below. -
Sub-routine 2100 may determine a relative spatial position of an egress point of the previously processed code point atexecution block 2113. - At
decision block 2115, if a ligature element is associated with the current code point identifier, then sub-routine 2100 may proceed toexecution block 2123, described below; otherwise sub-routine 2100 may proceed toexecution block 2118. -
Sub-routine 2100 may assign the relative spatial position of the egress point of the previously processed code point as the ingress point of the current code point atexecution block 2118.Sub-routine 2100 may then proceed to endingloop block 2135, described below. - At
execution block 2123, sub-routine 2100 may assign the relative spatial position of the egress point of the previously processed code point as the ingress point of the ligature element associated with the current code point atexecution block 2118. -
Sub-routine 2100 may determine a relative spatial position of an egress point of the ligature element associated with the current code point atexecution block 2125. -
Sub-routine 2100 may assign the relative spatial position of the egress point of the ligature element associated with the current code point as the ingress point of the current code point atexecution block 2128.Sub-routine 2100 may the proceed to endingloop block 2135, described below. - At
execution block 2130, sub-routine 2100 may determine a spatial displacement for the current code point relative to the previous code point. -
Sub-routine 2100 may assign an ingress point for the current code point based on the spatial displacement atexecution block 2133. - At ending
loop block 2135, sub-routine 2100 may loop back to startingloop block 2105 to process the next code point in the token, if any. -
Sub-routine 2100 may return toTTH generation routine 1800 atreturn block 2199. -
FIG. 22 illustrates an exemplarymessage assembly sub-routine 2200 which may be implemented byhandwriting generation service 323C operating onhandwriting generation server 300C, for example in response to a call fromTTH generation routine 1800.Message assembly sub-routine 2100 may function to assemble the tokens of a TTH data structure in a manner that will simulate the handwriting associated with a specific user identifier. -
Sub-routine 2200 may obtain a message assembly request atexecution block 2203. The message assembly request may identify a TTH data structure. -
Sub-routine 2200 may determine various handwriting text formatting requirements atexecution block 2205. For example, sub-routine 2200 may determine a maximum code point height for the handwriting text. - At starting
loop block 2208, sub-routine 2200 may process each token in the TTH data structure in turn. - At
decision block 2210, if the current token is the first token in the TTH data structure, then sub-routine 2200 may proceed toexecution block 2213; otherwise sub-routine 2200 may proceed toexecution block 2215, described below. - At
execution block 2213, sub-routine 2200 may determine a starting spatial position for the first token in the handwriting image.Sub-routine 2200 may then proceed toexecution block 2218. -
Sub-routine 2200 may determine a spatial position of the ingress point of the current token relative to an egress point of the previous token atexecution block 2218. -
Sub-routine 2200 may assign the determined spatial position as the ingress point for the first code point of the current token atexecution block 2218. - At ending
loop block 2220, sub-routine 2200 may loop back to startingloop block 2208 to process the next token in the TTH data structure, if any. -
Sub-routine 2200 may return toTTH generation routine 1800 atreturn block 2299. - Although specific embodiments have been illustrated and described herein, a variety of alternate and/or equivalent implementations may be substituted for the specific embodiments shown and described without departing from the scope of the present disclosure. This application is intended to cover any adaptations or variations of the embodiments discussed herein.
- Certain aspects of the present methods and systems may focus on computer implemented methods of obtaining digitized hand-writing data corresponding to a sample of a needed code point of a set of code points. Such methods may include: obtaining a sample of digitized handwritten text, the sample of digitized handwritten text including glyph data corresponding to a first glyph, the first glyph corresponding to the needed code point of the set of code points; associating the first glyph with the needed code point; identifying stroke data in the glyph data, the stroke data corresponding to a stroke component of the first glyph; determining a plurality of dimensional values of the stroke component in the stroke data; and associating the plurality of dimensional values with a new code point sample of the needed code point in a code point set data structure.
- Other, not-mutually exclusive, aspects of the present methods and systems may focus on computer implemented methods of supplementing an incomplete handwriting code point data structure corresponding to a set of code points. Such methods may include: identifying a plurality of code points from the set of code points, the plurality of code points corresponding to code points in need of dimensional values for at least one code point sample; selecting a preferred handwriting sample phrase from a plurality of predefined handwriting sample phrases, the preferred handwriting sample phrase including at least a first code point of the plurality of code points; obtaining a sample of digitized handwritten text corresponding to the preferred handwriting sample phrase, the sample of digitized handwritten text including glyph data corresponding to a first glyph, the first glyph corresponding to the first code point; associating the first glyph with the first code point; identifying stroke data in the glyph data, the stroke data corresponding to a stroke component of the first glyph, determining a plurality of dimensional values of the stroke component in the stroke data; and associating the plurality of dimensional values with a new code point sample of the needed code point in the code point set data structure.
- Other, not-mutually exclusive, aspects of the present methods and systems may focus on computer implemented methods of generating digitized hand-writing data corresponding to an ordered plurality of tokens including a first token, each token of the ordered plurality of tokens corresponding to an ordered plurality of code points. Such methods may include selecting a sequential sub-set of two code points from the ordered plurality of code points corresponding to the first token; selecting a first code point sample corresponding to a first code point of the sequential sub-set of two code points, the first code point sample including a plurality of dimensional values associated with the first code point; selecting a second code point sample corresponding to a second code point of the sequential sub-set of two code points, the second code point sample including a plurality of dimensional values associated with the second code point; and generating image data corresponding to a glyph representation of the ordered plurality of tokens including the first code point sample and the second code point sample using the plurality of dimensional values associated with the first code point and the plurality of dimensional values associated with the second code point.
Claims (20)
1. A computer implemented method of generating digitized hand-writing data corresponding to an ordered plurality of tokens including a first token, each token of the ordered plurality of tokens corresponding to an ordered plurality of code points, the method comprising:
(a) selecting a sequential sub-set of two code points from the ordered plurality of code points corresponding to the first token;
(b) selecting a first code point sample corresponding to a first code point of said sequential sub-set of two code points, said first code point sample including a plurality of dimensional values associated with said first code point;
(c) selecting a second code point sample corresponding to a second code point of said sequential sub-set of two code points, said second code point sample including a plurality of dimensional values associated with said second code point; and
(d) generating image data corresponding to a glyph representation of said ordered plurality of tokens including said first code point sample and said second code point sample using said plurality of dimensional values associated with said first code point and said plurality of dimensional values associated with said second code point.
2. The computer implemented method of claim 1 , wherein said plurality of dimensional values includes a plurality of time values, a plurality of horizontal displacement values; a plurality of vertical displacement values, a plurality of rotational displacement values, a plurality of angular displacement values, and a plurality of pressure values.
3. The computer implemented method of claim 1 , wherein the method includes determining said first code point and said second code point should be joined by a ligature; step (c) includes:
(c.1) comparing a first slope value, said first slope value being associated with a potential egress point of said first code point sample, and a second slope value, said second slope value being associated with a potential ingress point of said second code point sample,
(c.2) determining said first slope value and said second slope value match within a predefined tolerance level, and
(c.3) generating a ligature element for connecting said potential egress point of said first code point sample and said ingress point of said second code point sample; and
step (d) includes generating said image data using said ligature element to join said first code point sample at said potential egress point of said first code point sample and said second code point sample at said potential ingress point of said second code point sample.
4. The computer implemented method of claim 1 , wherein the ordered plurality of tokens includes a second token and the method further comprises determining a spatial displacement value between a final code point of said first token and an initial code point of said second token and step (d) includes generating said image data using said spatial displacement value to separate said final code point of said first token and said initial code point of said second token.
5. The computer implemented method of claim 1 , wherein step (b) includes:
obtaining a plurality of code point samples corresponding to said first code point;
rating each of said plurality of code point samples based on a comparison of each of said plurality of code point samples to a requirement of the digitized hand-writing data; and
selecting a code point sample of said plurality of code point samples as said first code point sample base on said rating of each of said plurality of code point samples.
6. The computer implemented method of claim 1 , further comprising providing said image data in an image file to a remote device.
7. The computer implemented method of claim 1 , further comprising storing said image data as an image file and providing a uniform resource identifier corresponding to said image file.
8. The computer implemented method of claim 1 , further comprising printing said image data.
9. The computer implemented method of claim 1 , wherein the method further comprises obtaining a writing implement selection and step (d) includes generating said image data in accordance with a style associated with said writing implement selection.
10. The computer implemented method of claim 1 , further comprising generating an animation corresponding to said image data.
11. A computing device comprising:
a computer processing unit; and
memory in data communication with said computer unit, and the computing device configured to:
(a) select a sequential sub-set of two code points from the ordered plurality of code points corresponding to the first token;
(b) select a first code point sample corresponding to a first code point of said sequential sub-set of two code points, said first code point sample including a plurality of dimensional values associated with said first code point;
(c) select a second code point sample corresponding to a second code point of said sequential sub-set of two code points, said second code point sample including a plurality of dimensional values associated with said second code point; and
(d) generate image data corresponding to a glyph representation of said ordered plurality of tokens including said first code point sample and said second code point sample using said plurality of dimensional values associated with said first code point and said plurality of dimensional values associated with said second code point.
12. The computing device of claim 11 , wherein said plurality of dimensional values includes a plurality of time values, a plurality of horizontal displacement values, a plurality of vertical displacement values, a plurality of rotational displacement values, a plurality of angular displacement values, and a plurality of pressure values.
13. The computing device of claim 11 , wherein the computing device is further configured to determine said first code point and said second code point should be joined by a ligature; step (c) includes:
(c.1) comparing a first slope value, said first slope value being associated with a potential egress point of said first code point sample, and a second slope value, said second slope value being associated with a potential ingress point of said second code point sample,
(c.2) determining said first slope value and said second slope value match within a predefined tolerance level, and
(c.3) generating a ligature element for connecting said potential egress point of said first code point sample and said ingress point of said second code point sample; and
step (d) includes generating said image data using said ligature element to join said first code point sample at said potential egress point of said first code point sample and said second code point sample at said potential ingress point of said second code point sample.
14. The computing device of claim 11 , wherein the ordered plurality of tokens includes a second token and the computing device is further configured to determine a spatial displacement value between a final code point of said first token and an initial code point of said second token and step (d) includes generating said image data using said spatial displacement value to separate said final code point of said first token and said initial code point of said second token.
15. The computing device of claim 11 , wherein step (b) includes:
obtaining a plurality of code point samples corresponding to said first code point;
rating each of said plurality of code point samples based on a comparison of each of said plurality of code point samples to a requirement of the digitized hand-writing data; and
selecting a code point sample of said plurality of code point samples as said first code point sample base on said rating of each of said plurality of code point samples.
16. The computing device of claim 11 , wherein the computing device is further configured to provide said image data in an image file to a remote device.
17. The computing device of claim 11 , wherein the computing device is further configured to store said image data as an image file and provide a uniform resource identifier corresponding to said image file.
18. The computing device of claim 11 , wherein the computing device is further configured to print said image data.
19. The computing device of claim 11 , wherein the computing device is further configured to obtain a writing implement selection and step (d) includes generating said image data in accordance with a style associated with said writing implement selection.
20. The computing device of claim 11 , wherein the computing device is further configured to generate an animation corresponding to said image data.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/866,314 US20180129877A1 (en) | 2016-09-22 | 2018-01-09 | Digitized handwriting sample ingestion systems and methods |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/273,610 US9934422B1 (en) | 2016-09-22 | 2016-09-22 | Digitized handwriting sample ingestion systems and methods |
US15/349,963 US9886626B1 (en) | 2016-09-22 | 2016-11-11 | Digitized handwriting sample ingestion and generation systems and methods |
US15/866,314 US20180129877A1 (en) | 2016-09-22 | 2018-01-09 | Digitized handwriting sample ingestion systems and methods |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US15/349,963 Continuation US9886626B1 (en) | 2016-09-22 | 2016-11-11 | Digitized handwriting sample ingestion and generation systems and methods |
Publications (1)
Publication Number | Publication Date |
---|---|
US20180129877A1 true US20180129877A1 (en) | 2018-05-10 |
Family
ID=61027067
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US15/349,963 Active US9886626B1 (en) | 2016-09-22 | 2016-11-11 | Digitized handwriting sample ingestion and generation systems and methods |
US15/866,314 Abandoned US20180129877A1 (en) | 2016-09-22 | 2018-01-09 | Digitized handwriting sample ingestion systems and methods |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US15/349,963 Active US9886626B1 (en) | 2016-09-22 | 2016-11-11 | Digitized handwriting sample ingestion and generation systems and methods |
Country Status (1)
Country | Link |
---|---|
US (2) | US9886626B1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110609653A (en) * | 2018-06-15 | 2019-12-24 | 广州视源电子科技股份有限公司 | Dual-system equipment, writing method and device thereof and interactive intelligent tablet |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10503396B2 (en) * | 2017-06-02 | 2019-12-10 | Apple Inc. | Device, method, and graphical user interface for simulating and interacting with handwritten text |
US10521654B2 (en) * | 2018-03-29 | 2019-12-31 | Fmr Llc | Recognition of handwritten characters in digital images using context-based machine learning |
US11257267B2 (en) * | 2019-09-18 | 2022-02-22 | ConversionRobotics Inc. | Method for generating a handwriting vector |
US11727192B2 (en) * | 2021-03-03 | 2023-08-15 | Adobe Inc. | Font customization based on stroke properties |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5412771A (en) * | 1992-02-07 | 1995-05-02 | Signature Software, Inc. | Generation of interdependent font characters based on ligature and glyph categorizations |
US6298154B1 (en) * | 1999-03-29 | 2001-10-02 | Eastman Kodak Company | Method for rendering improved personal handwriting |
US7188313B2 (en) * | 2001-10-03 | 2007-03-06 | Hallmark Cards, Incorporated | Context sensitive font generation |
US7227993B2 (en) * | 2003-01-27 | 2007-06-05 | Microsoft Corporation | Learning-based system and process for synthesizing cursive handwriting |
US7352899B2 (en) * | 2004-10-12 | 2008-04-01 | Loeb Enterprises, Llc | Realistic machine-generated handwriting with personalized fonts |
US7483570B1 (en) * | 2004-02-11 | 2009-01-27 | Knight Andrew F | Software and method for creating a dynamic handwriting font |
US20090041354A1 (en) * | 2007-08-10 | 2009-02-12 | Microsoft Corporation | Hidden Markov Model Based Handwriting/Calligraphy Generation |
US8103100B2 (en) * | 2006-08-16 | 2012-01-24 | Kyung-Ho Jang | System of implementing user handwriting and method thereof |
US20130027406A1 (en) * | 2011-07-29 | 2013-01-31 | International Business Machines Corporation | System And Method For Improved Font Substitution With Character Variant Replacement |
US20130106865A1 (en) * | 2010-07-23 | 2013-05-02 | Sony Ericsson Mobile Communications Ab | Device, method and computer program product |
US8749800B2 (en) * | 2009-12-30 | 2014-06-10 | Eastman Kodak Company | System for generating personalized documents |
US20140363082A1 (en) * | 2013-06-09 | 2014-12-11 | Apple Inc. | Integrating stroke-distribution information into spatial feature extraction for automatic handwriting recognition |
US9230514B1 (en) * | 2012-06-20 | 2016-01-05 | Amazon Technologies, Inc. | Simulating variances in human writing with digital typography |
US20160210505A1 (en) * | 2015-01-16 | 2016-07-21 | Simplo Technology Co., Ltd. | Method and system for identifying handwriting track |
US20160328620A1 (en) * | 2015-05-04 | 2016-11-10 | King Fahd University Of Petroleum And Minerals | Systems and associated methods for arabic handwriting using synthetic extension concatenation and synthesis |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07106660B2 (en) * | 1986-05-27 | 1995-11-15 | キヤノン株式会社 | How to create handwritten manuscript |
US5327342A (en) * | 1991-03-31 | 1994-07-05 | Roy Prannoy L | Method and apparatus for generating personalized handwriting |
US6256410B1 (en) | 1998-07-30 | 2001-07-03 | International Business Machines Corp. | Methods and apparatus for customizing handwriting models to individual writers |
JP2004145072A (en) * | 2002-10-25 | 2004-05-20 | Riso Kagaku Corp | Handwritten-character font preparing device and handwritten-character font preparing program |
GB0310765D0 (en) * | 2003-05-10 | 2003-06-18 | Hewlett Packard Development Co | Improvements relating to the security of and the generation of documents |
US8121338B2 (en) * | 2004-07-07 | 2012-02-21 | Directsmile Gmbh | Process for generating images with realistic text insertion |
US7697001B2 (en) | 2005-01-31 | 2010-04-13 | Microsoft Corporation | Personalized ink font |
US20120001922A1 (en) * | 2009-01-26 | 2012-01-05 | Escher Marc | System and method for creating and sharing personalized fonts on a client/server architecture |
US8351700B2 (en) | 2009-04-08 | 2013-01-08 | Gracious Eloise, Inc. | Variable glyph system and method |
-
2016
- 2016-11-11 US US15/349,963 patent/US9886626B1/en active Active
-
2018
- 2018-01-09 US US15/866,314 patent/US20180129877A1/en not_active Abandoned
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5412771A (en) * | 1992-02-07 | 1995-05-02 | Signature Software, Inc. | Generation of interdependent font characters based on ligature and glyph categorizations |
US6298154B1 (en) * | 1999-03-29 | 2001-10-02 | Eastman Kodak Company | Method for rendering improved personal handwriting |
US7188313B2 (en) * | 2001-10-03 | 2007-03-06 | Hallmark Cards, Incorporated | Context sensitive font generation |
US7227993B2 (en) * | 2003-01-27 | 2007-06-05 | Microsoft Corporation | Learning-based system and process for synthesizing cursive handwriting |
US7483570B1 (en) * | 2004-02-11 | 2009-01-27 | Knight Andrew F | Software and method for creating a dynamic handwriting font |
US7352899B2 (en) * | 2004-10-12 | 2008-04-01 | Loeb Enterprises, Llc | Realistic machine-generated handwriting with personalized fonts |
US8103100B2 (en) * | 2006-08-16 | 2012-01-24 | Kyung-Ho Jang | System of implementing user handwriting and method thereof |
US20090041354A1 (en) * | 2007-08-10 | 2009-02-12 | Microsoft Corporation | Hidden Markov Model Based Handwriting/Calligraphy Generation |
US8749800B2 (en) * | 2009-12-30 | 2014-06-10 | Eastman Kodak Company | System for generating personalized documents |
US20130106865A1 (en) * | 2010-07-23 | 2013-05-02 | Sony Ericsson Mobile Communications Ab | Device, method and computer program product |
US20130027406A1 (en) * | 2011-07-29 | 2013-01-31 | International Business Machines Corporation | System And Method For Improved Font Substitution With Character Variant Replacement |
US9230514B1 (en) * | 2012-06-20 | 2016-01-05 | Amazon Technologies, Inc. | Simulating variances in human writing with digital typography |
US20140363082A1 (en) * | 2013-06-09 | 2014-12-11 | Apple Inc. | Integrating stroke-distribution information into spatial feature extraction for automatic handwriting recognition |
US20160210505A1 (en) * | 2015-01-16 | 2016-07-21 | Simplo Technology Co., Ltd. | Method and system for identifying handwriting track |
US20160328620A1 (en) * | 2015-05-04 | 2016-11-10 | King Fahd University Of Petroleum And Minerals | Systems and associated methods for arabic handwriting using synthetic extension concatenation and synthesis |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110609653A (en) * | 2018-06-15 | 2019-12-24 | 广州视源电子科技股份有限公司 | Dual-system equipment, writing method and device thereof and interactive intelligent tablet |
Also Published As
Publication number | Publication date |
---|---|
US9886626B1 (en) | 2018-02-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9934422B1 (en) | Digitized handwriting sample ingestion systems and methods | |
US20180129877A1 (en) | Digitized handwriting sample ingestion systems and methods | |
US8930360B2 (en) | System and method for online handwriting recognition in web queries | |
TWI627540B (en) | A font cloud service system | |
RU2634194C1 (en) | Verification of optical character recognition results | |
US9483740B1 (en) | Automated data classification | |
CN108959257A (en) | A kind of natural language analytic method, device, server and storage medium | |
CN110519155B (en) | Information processing method and system | |
US9516089B1 (en) | Identifying and processing a number of features identified in a document to determine a type of the document | |
CN110007842A (en) | Web page contents choosing method and device | |
US10558861B2 (en) | Supplementing a media stream with additional information | |
US20050276480A1 (en) | Handwritten input for Asian languages | |
CN111542817A (en) | Information processing device, video search method, generation method, and program | |
CN110377167B (en) | Font generating method and font generating device | |
JP2017111500A (en) | Character recognizing apparatus, and program | |
KR102370552B1 (en) | System for creating logo based on adjective keyword and method thereof | |
CN110609968A (en) | Image-text information sorting processing method, device and equipment | |
US20240160912A1 (en) | Machine-learning model for intelligent rule generation | |
US20230328013A1 (en) | Comment art management system, comment art management method, comment art management program, and computer-readable recording medium | |
KR20240031706A (en) | Method for generating poster image and contents distribution server using the same | |
JP2017045123A (en) | Image processing system, method, program and recording medium using landscape picture including text | |
JP6693045B2 (en) | Personal information display program, personal information display method, and display control device | |
WO2019175896A1 (en) | System and method for interacting with digitalscreensusing voice input and image processing technique | |
US20080294652A1 (en) | Personalized Identification Of System Resources | |
CN117873619A (en) | Method and device for generating product description document, storage medium and terminal equipment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: GRACIOUS ELOISE, INC., NEW YORK Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:STOUT, HUGH;HURLEY, R. FORD;EHLERS, GROVER S.;SIGNING DATES FROM 20180508 TO 20180524;REEL/FRAME:045894/0657 |
|
AS | Assignment |
Owner name: MAILING SERVICES OF PITTSBURGH INC., PENNSYLVANIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:GRACIOUS ELOISE, INC.;REEL/FRAME:047283/0270 Effective date: 20180612 |
|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |