以下、実施の形態について図面を参照して説明する。
まず、図1を参照して、一実施形態に係る情報処理装置と、当該情報処理装置と連携する電子機器とを含むクラウドサービスシステムについて説明する。この情報処理装置は、例えば、サーバコンピュータ(以下、クラウドサーバとも称する)1として実現され得る。クラウドサーバ1は、オンラインストレージサービス、他の各種クラウドコンピューティングサービスを実行する。クラウドサーバ1は、手書き端末2Aや閲覧端末2B,2Cのような各種の電子機器(以下、クライアント端末とも称する)と連携することができる。
手書き端末2Aは、例えば、ペン又は指によって手書き入力可能なペン・ベースの携帯型電子機器である。この手書き端末2Aは、タブレットコンピュータ、ノートブック型パーソナルコンピュータ、スマートフォン、PDA等として実現され得る。また、閲覧端末2B,2Cは、手書き端末2Aを用いた手書き入力によって作成された手書き文書を閲覧するための電子機器である。この閲覧端末2B,2Cは、タブレットコンピュータ、ノートブック型パーソナルコンピュータ、デスクトップ型コンピュータ、スマートフォン、PDA等として実現され得る。
クラウドサーバ1は、例えば、LANなどの通信デバイスを備えている。また、手書き端末2A及び閲覧端末2B,2Cは、例えば、無線LANなどの無線通信デバイスを備えている。したがって、クラウドサーバ1は、手書き端末2A及び閲覧端末2B,2Cの各々との通信を実行することができる。
手書き端末2Aは、ユーザによる手書き入力操作に応じて作成された、文字や図形を含む手書き文書のデータを、ネットワーク(例えば、インターネット)を介してクラウドサーバ1に送信して、クラウドサーバ1内のストレージ(例えば、ハードディスクドライブ(HDD))に記録することができる(アップロード)。クラウドサーバ1と手書き端末2Aとの間のセキュアな通信を確保するために、通信開始時には、クラウドサーバ1が手書き端末2Aを認証するようにしてもよい。この場合、手書き端末2Aの画面上に、ユーザに対してIDやパスワードの入力を促すダイアログを表示してもよいし、手書き端末2AのIDなどを自動的に手書き端末2Aからクラウドサーバ1に送信してもよい。
これにより、手書き端末2A上で作成された手書き文書データを、クラウドサーバ1で管理することが可能になる。
クラウドサーバ1は、クラウドサーバ1のストレージに記録されている手書き文書データを、ネットワーク(例えば、インターネット)を介して閲覧端末2B,2Cに送信する。例えば、クラウドサーバ1は、クラウドサーバ1のストレージに記録されている複数の手書き文書データから、閲覧端末2B,2Cによる検索要求(検索クエリ)に応じた手書き文書データを検索し、その検索結果を閲覧端末2B,2Cに送信する。閲覧端末2B,2Cは、クラウドサーバ1によって送信された検索結果を受信し(ダウンロード)、その検索結果を閲覧端末2B,2Cのディスプレイの画面に表示することができる。閲覧端末2B,2Cは、受信した検索結果に基づいて、例えば、取得された手書き文書の一覧や、取得された手書き文書を画面に表示する。
クラウドサーバ1に手書き文書の検索を要求する閲覧端末は、手書き入力可能な閲覧端末2Bであってもよいし、手書き入力ができない閲覧端末2Cであってもよい。手書き入力可能な閲覧端末2Bでは、ユーザによる手書き入力操作によって手書きされた文字や図形に対応する手書きデータを含む検索要求をサーバ1に送信することによって、その手書きデータを検索キーとした検索結果を取得することができる。手書き入力ができない閲覧端末2Cでは、キーボード等を用いて入力された文字列に対応する文字コードを含む検索要求をサーバ1に送信することによって、その文字コードを検索キーとした検索結果を取得することができる。なお、手書き入力可能な閲覧端末2Bでも、ソフトウェアキーボード等を用いて入力された文字列に対応する文字コードを含む検索要求をサーバ1に送信することによって、その文字コードを検索キーとした検索結果を取得してもよい。
クラウドサーバ1と閲覧端末2B,2Cとの間のセキュアな通信を確保するために、通信開始時には、クラウドサーバ1が閲覧端末2B,2Cを認証するようにしてもよい。この場合、閲覧端末2B,2Cの画面上に、ユーザに対してIDやパスワードの入力を促すダイアログを表示してもよいし、閲覧端末2B,2CのIDなどを自動的に閲覧端末2B,2Cからクラウドサーバ1に送信してもよい。なお、手書き端末2Aを閲覧端末2Bとして用いることもできる。
図2は、クラウドサーバ1のシステム構成の例を示す。クラウドサーバ1は、CPU(Central Processing Unit)11、主メモリ12、I/Oデバイス13、ハードディスクドライブ(HDD)14、グラフィクスコントローラ15、LCD(Liquid Crystal Display)16、及びLANコントローラ17等を備える。
CPU11は各種プログラムを実行するプロセッサである。CPU11は、各種演算処理を実行すると共に、クラウドサーバ1内の各部を制御する。
主メモリ12は、CPU11によって実行される、オペレーティングシステム(OS)12A、手書き文書管理プログラム12Bのような各種アプリケーションプログラム、及び各種データを格納するためのメインメモリである。主メモリ12には、例えばOS12A及び手書き文書管理プログラム12Bがロードされている。手書き文書管理プログラム12Bは、クライアント端末からアップロードされた複数の手書き文書データを管理する。手書き文書管理プログラム12Bは、クライアント端末からアップロードされた手書き文書データをストレージデバイスに保存する機能と、保存された複数の手書き文書データから、クライアント端末による検索要求に応じた手書き文書データを取得する機能とを有する。
I/Oデバイス13は、クラウドサーバ1に対するデータの入出力を実行するための各種入出力デバイスである。また、HDD14は、各種プログラムやデータを格納するためのストレージデバイスである。HDD14に格納された各種プログラムやデータは、クラウドサーバ1内の各部による要求に応じて、主メモリ12へロードされる。また、このHDD14には、上述のように、クライアント端末からアップロードされた複数の手書き文書データが格納される。
グラフィクスコントローラ15は、クラウドサーバ1のディスプレイモニタとして使用されるLCD16を制御する。このグラフィクスコントローラ15によって生成される表示信号はLCD16に送られる。グラフィクスコントローラ15及びLCD16を用いることにより、例えば、管理者による操作に応じた画面を表示することができる。
LANコントローラ17は、例えばEthernet(登録商標)規格の有線通信を実行する有線通信デバイスである。
また、図3は、手書き入力可能な閲覧端末2Bの外観を示す斜視図である。以下では、この閲覧端末2Bがタブレットコンピュータとして実現されていることを想定する。タブレットコンピュータ2Bは、タブレット又はスレートコンピュータとも称される携帯型電子機器であり、図3に示すように、本体20とタッチスクリーンディスプレイ206とを備える。タッチスクリーンディスプレイ206は、本体20の上面に重ね合わせるように取り付けられている。
本体20は、薄い箱形の筐体を有している。タッチスクリーンディスプレイ206には、フラットパネルディスプレイと、フラットパネルディスプレイの画面上のペン又は指の接触位置を検出するように構成されたセンサとが組み込まれている。フラットパネルディスプレイは、例えば、液晶表示装置(LCD)であってもよい。センサには、例えば、静電容量方式のタッチパネル、電磁誘導方式のデジタイザなどを使用することができる。以下では、デジタイザとタッチパネルの2種類のセンサの双方がタッチスクリーンディスプレイ206に組み込まれていることを想定する。
デジタイザ及びタッチパネルタッチの各々は、フラットパネルディスプレイの画面を覆うように設けられる。このタッチスクリーンディスプレイ206は、指を使用した画面に対するタッチ操作のみならず、ペン100を使用した画面に対するタッチ操作も検出することができる。ペン100は例えば電磁誘導ペンであってもよい。ユーザは、外部オブジェクト(ペン100又は指)を使用してタッチスクリーンディスプレイ206上で手書き入力操作を行うことができる。手書き入力操作中においては、画面上の外部オブジェクト(ペン100又は指)の動きの軌跡、つまり手書き入力操作によって手書きされるストロークの軌跡(筆跡)がリアルタイムに描画され、これによって各ストロークの軌跡が画面上に表示される。外部オブジェクトが画面に接触されている間の外部オブジェクトの動きの軌跡が1ストロークに相当する。手書きされた文字又は図形などに対応する多数のストロークの集合、つまり多数の軌跡(筆跡)の集合は、イメージデータではなく、各ストロークの軌跡の座標列とストローク間の順序関係を示す時系列情報を含む手書きデータとして用いられる。また、この手書きデータを、例えば、ページ毎の手書き文書データとして用いることもできる。手書きデータに含まれる時系列情報の詳細は図6を参照して後述するが、この時系列情報は、概して、複数のストロークにそれぞれ対応する時系列のストロークデータの集合を意味する。各ストロークデータは、ある1つのストロークに対応し、このストロークの軌跡上の点それぞれに対応する座標データ系列(時系列座標)を含む。これらストロークデータの並びの順序は、ストロークそれぞれが手書きされた順序つまり筆順に相当する。
タブレットコンピュータ2Bは、サーバ1に検索キーとなる手書きデータを送信し、この検索キーに基づいて検索された手書き文書データをサーバ1から受信する。閲覧端末2Bは、受信した手書き文書データに対応する手書き文書、つまりこの手書き文書データに含まれる時系列情報によって示される複数のストロークそれぞれに対応する軌跡を画面上に表示することができる。
なお、タブレットコンピュータ2Bは、記憶媒体から既存の任意の手書き文書データを読み出し、読み出した手書き文書データに対応する手書き文書を画面上に表示することもできる。その場合、ユーザは、タッチスクリーンディスプレイ206を用いて、表示された手書き文書の一部を検索キーとして選択することもできる。タブレットコンピュータ2Bは、選択された手書き文書の一部に対応する手書きデータ(ストロークデータ)を含む検索要求をサーバ1に送信し、この検索キーに基づいて検索された手書き文書データをサーバ1から受信する。
また、本実施形態では、手書き文書データ(時系列情報)は、1つ又は複数のページとして管理されうる。この場合、手書き文書データを1つの画面に収まる面積単位で区切ることによって、1つの画面に収まる時系列情報のまとまりを1つのページとして記録してもよい。あるいは、ページのサイズを可変できるようにしてもよい。この場合、ページのサイズは1つの画面のサイズよりも大きい面積に広げることができるので、画面のサイズよりも大きな面積の手書き文書を一つのページとして扱うことができる。1つのページ全体をディスプレイに同時に表示できない場合は、そのページを縮小してするようにしてもよいし、縦横スクロールによってページ内の表示対象部分を移動するようにしてもよい。
図4は、タブレットコンピュータ2Bのシステム構成の例を示す。タブレットコンピュータ2Bは、CPU(Central Processing Unit)201、主メモリ202、ソリッドステートドライブ(SSD)204、グラフィクスコントローラ205、タッチスクリーンディスプレイ206、及び無線LANコントローラ207等を備える。
CPU201は各種プログラムを実行するプロセッサである。CPU201は、各種演算処理を実行すると共に、タブレットコンピュータ2B内の各部を制御する。
主メモリ202は、CPU201によって実行される、オペレーティングシステム202A、デジタルノートブックアプリケーションプログラム202Bのような各種アプリケーションプログラム、及び各種データを格納するためのメインメモリである。主メモリ202には、例えばOS202A及びデジタルノートブックアプリケーションプログラム202Bがロードされている。デジタルノートブックアプリケーションプログラム202Bは、サーバ1に手書き文書データの検索を要求し、その検索結果を受信して表示する機能を有する。また、デジタルノートブックアプリケーションプログラム202は、手書き文書データを作成し、その手書き文書データをサーバ1に送信する機能も有し得る。
SSD204は、各種プログラムやデータを格納するための不揮発性の記憶装置である。SSD204に格納された各種プログラムやデータは、タブレットコンピュータ2B内の各部による要求に応じて、主メモリ202へロードされる。
グラフィクスコントローラ205は、タッチスクリーンディスプレイ206に表示すべき表示信号を生成する。タッチスクリーンディスプレイ206には、フラットパネルディスプレイ206Aと、フラットパネルディスプレイ206Aの画面上のペン又は指の接触位置を検出するように構成されたセンサとが組み込まれている。フラットパネルディスプレイ206Aは、例えば、液晶表示装置(LCD)であってもよい。センサとしては、例えば、静電容量方式のタッチパネル206B、電磁誘導方式のデジタイザなどを使用することができる。
無線LANコントローラ207はIEEE 802.11規格に基づいて無線通信を実行するように構成されている。
手書き入力可能なタブレットコンピュータ(閲覧端末)2Bは、手書き文書を作成および編集するための手書き端末2Aとしても使用され得る。つまり、上述のタブレットコンピュータ2Bの構成によって、手書き文書を作成又は編集し、サーバ1にアップロードすることができる。
なお、手書き入力ができない閲覧端末2Cは、例えば、タッチスクリーンディスプレイ206が設けられていないコンピュータである。閲覧端末2Cは、例えば、キーボードを用いて入力された文字列に対応する文字コードを検索キーとしてサーバ1に送信し、この検索キーに基づいて検索された手書き文書データをサーバ1から受信する。閲覧端末2Cでも、手書き入力可能な閲覧端末2Bと同様に、受信した手書き文書データに対応する手書き文書、つまりこの手書き文書データに含まれる時系列情報によって示される複数のストロークそれぞれに対応する軌跡を画面上に表示することができる。なお、閲覧端末2Cは、記憶媒体から既存の任意の手書き文書データを読み出し、読み出した手書き文書データに対応する手書き文書を画面上に表示することもできる。ユーザは、マウスやタッチパッドのようなポインティングデバイスを用いて、表示された手書き文書の一部を検索キーとして選択することもできる。閲覧端末2Cは、選択された手書き文書の一部に対応する手書きデータ(ストロークデータ)を含む検索要求をサーバ1に送信し、この検索キーに基づいて検索された手書き文書データをサーバ1から受信する。
次いで、図5および図6を参照して、ユーザによって手書きされたストローク(文字、マーク、図形、表など)と時系列情報との関係について説明する。図5は、ペン100などを使用してタッチスクリーンディスプレイ206上に手書きされる手書き文書(手書き文字列及び手書き図形)の例を示している。
手書き文書では、一旦手書きされた文字や図形などの上に、さらに別の文字や図形などが手書きされるというケースが多い。図5においては、「ABC」の手書き文字列が「A」、「B」、「C」の順番で手書きされ、この後に、手書きの矢印が、手書き文字「A」のすぐ近くに手書きされた場合が想定されている。
手書き文字「A」は、ペン100などを使用して手書きされる2つのストローク(「∧」形状の軌跡、「−」形状の軌跡)によって、つまり2つの軌跡によって表現される。最初に手書きされる「∧」形状のペン100の軌跡は例えば等時間間隔でリアルタイムにサンプリングされ、これによって「∧」形状のストロークの時系列座標SD11、SD12、…SD1nが得られる。同様に、次に手書きされる「−」形状のペン100の軌跡もサンプリングされ、これによって「−」形状のストロークの時系列座標SD21、SD21、…SD2nが得られる。
手書き文字「B」は、ペン100などを使用して手書きされた2つのストローク、つまり2つの軌跡によって表現される。手書き文字「C」は、ペン100などを使用して手書きされた手書きされた1つのストローク、つまり1つの軌跡によって表現される。手書きの「矢印」は、ペン100などを使用して手書きされた手書きされた2つのストローク、つまり2つの軌跡によって表現される。
図6は、図5の手書き文書に対応する時系列情報41Bを示している。時系列情報は、複数のストロークデータSD1、SD2、…、SD7を含む。時系列情報41B内においては、これらストロークデータSD1、SD2、…、SD7は、筆跡順に、つまり複数のストロークが手書きされた順に時系列に並べている。
時系列情報41Bにおいて、先頭の2つのストロークデータSD1、SD2は、手書き文字「A」の2つのストロークをそれぞれ示している。3番目と4番目のストロークデータSD3、SD4は、手書き文字「B」を構成する2つのストロークをそれぞれ示している。5番目のストロークデータSD5は、手書き文字「C」を構成する1つのストロークを示している。6番目と7番目のストロークデータSD6、SD7は、手書き「矢印」を構成する2つのストロークをそれぞれ示している。
各ストロークデータは、一つのストロークに対応する座標データ系列(時系列座標)、つまり一つのストロークの軌跡上の複数の点それぞれに対応する複数の座標を含む。各ストロークデータにおいては、複数の座標はストロークが書かれた順に時系列に並べられている。例えば、手書き文字「A」に関しては、ストロークデータSD1は、手書き文字「A」の「∧」形状のストロークの軌跡上の点それぞれに対応する座標データ系列(時系列座標)、つまりn個の座標データSD11、SD12、…SD1nを含む。ストロークデータSD2は、手書き文字「A」の「−」形状のストロークの軌跡上の点それぞれに対応する座標データ系列、つまりn個の座標データSD21、SD22、…SD2nを含む。なお、座標データの数はストロークデータ毎に異なっていてもよい。
各座標データは、対応する軌跡内のある1点に対応するX座標およびY座標を示す。例えば、座標データSD11は、「∧」形状のストロークの始点のX座標(X11)およびY座標(Y11)を示す。SD1nは、「∧」形状のストロークの終点のX座標(X1n)およびY座標(Y1n)を示す。
さらに、各座標データは、その座標に対応する点が手書きされた時点に対応するタイムスタンプ情報Tを含んでいてもよい。手書きされた時点は、絶対時間(例えば、年月日時分秒)またはある時点を基準とした相対時間のいずれであってもよい。例えば、各ストロークデータに、ストロークが書き始められた絶対時間(例えば、年月日時分秒)をタイムスタンプ情報として付加し、さらに、ストロークデータ内の各座標データに、絶対時間との差分を示す相対時間をタイムスタンプ情報Tとして付加してもよい。
このように、各座標データにタイムスタンプ情報Tが追加された時系列情報を使用することにより、ストローク間の時間的関係をより精度よく表すことができる。
さらに、各座標データには、筆圧を示す情報(Z)を追加してもよい。
本実施形態では、上述したように、手書き文書は、イメージまたは文字認識結果ではなく、時系列のストロークデータの集合から構成される時系列情報41Bとして記憶されるので、手書き文字の言語に依存せずに手書き文字を扱うことができる。よって、本実施形態の時系列情報41Bの構造は、異なる言語で用いられる様々な文字で共通に使用できる。
次いで、図7を参照して、サーバ1によって実行される手書き文書管理プログラム12Bの機能構成について説明する。手書き文書管理プログラム12Bは、上述のように、クライアント端末(例えば、手書き端末2A)からアップロードされた手書き文書データをストレージデバイスに保存する機能と、保存された複数の手書き文書データから、クライアント端末(例えば、閲覧端末2B,2C)による検索要求に応じた手書き文書データを取得する機能とを有する。
手書き文書管理プログラム12Bは、例えば、手書き文書受信部31、特徴量算出部32、文字認識部33、検索要求受信部34、検索決定部35、筆跡検索部36、文字検索部37、手書き文書リード部38、送信部39を備える。
まず、クライアント端末(手書き端末2A)からサーバ1に手書き文書データがアップロードされた際の動作について説明する。
手書き文書受信部31は、クライアント端末によってアップロードされた手書き文書データを受信する。手書き文書受信部31は、受信した手書き文書データを手書き文書データベース41(例えば、HDD14のような記憶媒体)に記憶する。手書き文書受信部31は、例えば、受信した手書き文書データに対して、その手書き文書(手書きページ)を一意に識別可能な識別情報(ページID)と、当該手書き文書を作成したユーザの識別情報(ユーザID)とを付加して手書き文書データベース41に格納する。
図8は、手書き文書データベース41に格納された手書き文書データ41Aの一構成例を示す。手書き文書データ41Aは、複数の手書き文書(手書きページ)に対応する複数のエントリを含む。各エントリは、例えば、ページID、ユーザID、ストロークID、ストロークデータを含む。ある手書き文書に対応するエントリにおいて、「ページID」は、その手書き文書に付与された識別情報を示す。「ユーザID」は、その手書き文書を作成したユーザに付与された識別情報を示す。「ストロークID」は、その手書き文書に手書きされたストロークに付与された識別情報を示す。「ストロークデータ」は、その手書き文書に手書きされたストロークに対応する座標データ系列(時系列座標)41Bを示す。
図8に示しているように、ある手書き文書に対応するエントリには、その手書き文書に手書きされた複数のストロークに対応して、複数の「ストロークID」と「ストロークデータ」とのペアが含まれる。つまり、ある手書き文書に対応するエントリには、その手書き文書に手書きされたストロークの数だけ、「ストロークID」と「ストロークデータ」とのペアが含まれる。
なお、手書き文書データ41Aは、上記のエントリと同様の内容が記述された手書き文書ファイルであってもよい。
また、手書き文書受信部31は、受信した手書き文書データ41Aを特徴量算出部32と文字認識部33とに出力する。
特徴量算出部32は、手書き文書受信部31によって受信された手書き文書データ41Aに含まれる複数のストロークデータ(時系列情報)41Bを解析することによって、手書き文書に手書きされた複数のストロークそれぞれに対応する複数の特徴量を算出する。特徴量算出部32は、各ストロークに対応する座標データ系列を用いて、例えば、ストロークの傾きのような形状を表す特徴量であって、ストロークのサイズ(長さ)や、ストローク上でサンプリングされた座標点数(座標データ数)のような形状以外の特徴が正規化された特徴量を算出する。特徴量算出部32は、算出された特徴量を含む特徴量データ42Aを特徴量データベース42(例えば、HDD14のような記憶媒体)に記憶する。
図9は、特徴量データベース42に格納された特徴量データ42Aの一構成例を示す。特徴量データ42Aは、手書き文書(手書きページ)に含まれる複数のストロークに対応する複数のエントリを含む。各エントリは、例えば、ページID、ストロークID、特徴量を含む。あるストロークに対応するエントリにおいて、「ページID」は、そのストロークが手書きされた手書き文書に付与された識別情報を示す。「ストロークID」は、そのストロークに付与された識別情報を示す。「特徴量」は、そのストロークを解析することによって算出された特徴量を示す。
文字認識部33は、手書き文書受信部31によって受信された手書き文書データ41Aに含まれるストロークデータ(時系列情報)41Bを解析することによって、手書き文書に手書きされた複数のストロークに対応する複数の手書きの文字や記号を認識し、それら複数の手書きの文字や記号のそれぞれを文字コードに変換する。より具体的には、まず、文字認識部33は、複数のストロークを文字毎のストロークを含む文字ブロックに分割する。そして、文字認識部33は、予め用意された手書き文字の辞書データを用いて、文字ブロック毎に、文字ブロック内のストロークに対応する文字を認識する。手書き文字の辞書データでは、例えば、様々な文字や記号のそれぞれに対して、多くの手書き文字データ(多数人による手書き文字データ)を解析することによって得られた手書き文字(記号)の標準パターンが関連付けられている。文字認識部33は、例えば、手書き文字の辞書データに示される複数の文字から、その標準パターンと文字ブロック内のストロークとの類似度がしきい値以上である文字を認識する。なお、認識される文字は、文字認識に誤りが生じる可能性を考慮して、類似度がしきい値以上である複数の文字候補であってもよい。文字認識部33は、認識された文字を文字コードに変換する。
次いで、文字認識部33は、ストローク(ストローク群)と文字コードとの関係を示す文字データ43Aを文字データベース43に格納する。文字認識部33は、例えば、ストローク群に対応するストロークIDの範囲と文字コードとを含む文字データ43Aを文字データベース43(例えば、HDD14のような記憶媒体)に記憶する。文字認識部33は、文字ブロック毎に認識された文字(文字候補)が、単語単位や手書き文書上の行単位で結合された文字列(文字列候補)の文字コードと、その文字列に対応するストローク群のストロークIDの範囲とを含む文字データ43Aを文字データベース43に格納してもよい。
図10は、文字検索データベース43に格納された文字データ43Aの一構成例を示す。文字データ43Aは、例えば、手書き文書(手書きページ)に手書きされたストロークを解析することによって認識された複数のストローク群に対応する複数のエントリを含む。各エントリは、例えば、「ページID」、「ストロークID範囲」、「文字列」を含む。あるストローク群に対応するエントリにおいて、「ページID」は、そのストローク群が手書きされた手書き文書の識別情報を示す。「ストロークID範囲」は、そのストローク群に付与された識別情報の範囲を示す。「文字列」は、そのストローク群に対する文字認識結果に対応する複数の文字列候補の文字コード(文字コード群)を示す。
上述したように、文字データ43Aでは、あるストローク群に対して、文字認識結果に基づく複数の文字列候補(文字コード)が関連付けられてもよい。すなわち、あるエントリにおいて第1文字コードに関連付けられたストローク範囲と重複するストローク範囲が、別のエントリにおいて第2文字コードに関連付けられていてもよい。文字認識部33によって、あるストローク群に対して複数の文字列候補を関連付けておくことにより、後述する文字コードを用いた文字検索の際に、ユーザが取得したい手書き文書を精度よく取得することができる。
次いで、クライアント端末(閲覧端末)2B,2Cからサーバ1に、検索キーに基づく手書き文書データに対する検索が要求された際の動作について説明する。手書き文書管理プログラム12Bは、検索キーのストロークデータ(筆跡)を用いて、手書き文書データから検索キーに対応するストロークデータを取得する筆跡検索と、検索キーの文字コードと手書き文書データに含まれる複数のストロークデータに対応する複数の文字コードとを用いて、検索キーに対応するストロークデータを取得する文字検索のいずれか少なくとも一方を実行することによって、ストレージに保存された手書き文書データ41Aを検索する。
まず、検索要求受信部34は、クライアント端末2B,2Cから送信された検索要求(検索クエリ)を受信する。この検索要求には、例えば、クライアント端末2B,2Cを使用しているユーザ(すなわち、手書き文書の検索を要求したユーザ)のユーザIDと、検索キーとが含まれている。検索要求受信部34は、受信した検索要求を検索決定部35に出力する。
検索決定部35は、手書き文書データベース41から、検索対象の手書き文書の一覧を取得する。検索決定部35は、手書き文書データベース41を参照して、例えば、検索を要求したユーザによるアクセスが許可されている手書き文書を検出し、それら手書き文書の一覧を、検索対象の手書き文書の一覧として生成する。そして、検索決定部35は、取得した手書き文書一覧に含まれる手書き文書のそれぞれに対して、筆跡検索と文字検索のいずれの検索処理を実行するかを決定する。筆跡検索では、手書きされたストローク群それぞれの形状を示す特徴量(特徴量データ42A)や、ストローク群の時系列順(筆順)に基づいて、手書き文書が検索される。文字検索では、手書きされたストローク群に対する文字認識結果(文字データ43A)に基づいて、手書き文書が検索される。
より具体的には、検索決定部35は、まず、取得した一覧から、検索キーが含まれるか否かを判定する対象の手書き文書(以下、判定対象手書き文書とも称する)を選択する。次いで、検索決定部35は、検索要求に含まれる検索キーが手書き入力データを含む否か、すなわち、検索キーがストロークデータを含む時系列情報を含むか否かを判定する。この手書き入力データは、例えば、図5及び図6を参照して説明した構造を有するものである。
検索キーが手書き入力データでない場合、すなわち、検索キーが1以上の文字コードを含む場合、検索決定部35は、判定対象手書き文書に対して文字コードを用いた文字検索を行うことを決定する。検索決定部35は、文字検索部37に対して、判定対象手書き文書に対して文字コードを用いた文字検索を行うことを要求する。
文字検索部37は、検索決定部35による要求に応じて、文字検索データベース43から、判定対象手書き文書に対応する文字データ43Aを読み出す。そして、文字検索部37は、読み出された文字データ43Aに示される文字コード(例えば、複数の文字列候補の文字コード)に、検索キーの文字コードが含まれているか否かを判定する。換言すると、文字検索部37は、判定対象手書き文書に対応する複数の文字コードと検索キーに対応する1以上の文字コードとを用いて文字検索を実行することによって、判定対象手書き文書に対応する複数の文字コードに、検索キーに対応する1以上の文字コードが含まれるか否かを判定する。そして、判定対象手書き文書に対応する複数の文字コードに、検索キーに対応する1以上の文字コードが含まれるとき、判定対象の手書き文書を、検索キーを含む手書き文書であると決定する。その場合、文字検索部37は、判定対象手書き文書を、検索キーに該当する手書き文書として、該当文書一覧に追加する。文字検索部37は、例えば、判定対象手書き文書に付与された識別情報(ページID)を該当文書一覧に追加する。
一方、検索キーが手書き入力データである場合、検索決定部35は、判定対象手書き文書を作成した作成ユーザと、クライアント端末を使用している検索ユーザ(手書き文書の検索を要求した検索ユーザ)とが同じであるか否かを判定する。つまり、検索決定部35は、判定対象手書き文書を作成した作成ユーザのユーザIDと、クライアント端末を使用している検索ユーザのユーザIDとが同一であるか否かを判定する。判定対象手書き文書を作成したユーザとクライアント端末を使用しているユーザとが同じである場合、判定対象手書き文書に対して、少なくとも手書き入力データを用いた筆跡検索を行うことを決定する。検索決定部35は、特徴量算出部32および筆跡検索部36に対して、判定対象手書き文書に対して手書き入力データを用いた筆跡検索を行うこと要求する。
特徴量算出部32は、検索決定部35による要求に応じて、検索キーであるストロークデータ(時系列情報)を解析することによって、検索キーとして手書きされた1以上のストロークそれぞれに対応する1以上の特徴量を算出する。特徴量算出部32は、各ストロークに対応する座標データ系列を用いて、例えば、ストロークの傾きのような形状を表す特徴量であって、ストロークのサイズ(長さ)や、ストローク上でサンプリングされた座標点数(座標データ数)のような形状以外の特徴が正規化された特徴量を算出する。そして、特徴量算出部32は、算出された検索キーの1以上の特徴量を筆跡検索部36に出力する。
筆跡検索部36は、特徴量データベース42から判定対象手書き文書に対応する特徴量を読み出す。判定対象手書き文書に対応する特徴量は、この手書き文書に含まれる複数のストロークに対応する複数の特徴量である。筆跡検索部36は、読み出された判定対象手書き文書に対応する複数の特徴量と、検索キーに対応する1以上の特徴量とを用いて筆跡検索を実行することによって、読み出された判定対象手書き文書に対応する複数の特徴量の中に、検索キーの特徴量に相当する特徴量があるか否かを判定する。つまり、筆跡検索部36は、判定対象手書き文書に対応する複数の特徴量と検索キーの特徴量とを用いて、判定対象手書き文書内に検索キーに類似する手書き文字や図形(すなわち、検索キーに近しい手書き文字や図形)が含まれているか否かを判定する。より具体的には、筆跡検索部36は、例えば、判定対象手書き文書に対応する複数の特徴量に、検索キーに対応する1以上の特徴量との類似度がしきい値以上である特徴量が含まれる場合、判定対象手書き文書を、検索キーを含む手書き文書であると決定する。その場合、筆跡検索部36は、判定対象手書き文書を、検索キーに該当する手書き文書として、該当文書一覧に追加する。筆跡検索部36は、例えば、判定対象手書き文書に付与された識別情報(ページID)を該当文書一覧に追加する。
上述の筆跡検索では、判定対象の手書き文書を作成したユーザと手書き文書の検索を要求したユーザとが同じである場合に、手書き文字の辞書データのような、ユーザ間で共通の特徴を有する手書き文字の標準パターンを利用することなく、各ユーザの手書きによる文字の形状や筆順、文字の略し方等の特徴を利用して、手書き文書を検索することができる。したがって、ユーザ固有の特徴を含む手書き文書の特徴量と検索キーの特徴量とが用いられるので、ある手書き文書に検索キーが含まれているか否かを判定する精度を向上することができ、また、対応する文字コードがない記号や図形(文字コードに変換できない記号や図形)を検索キーとして手書き文書検索を行うこともできる。
一方、判定対象手書き文書を作成したユーザとクライアント端末を使用しているユーザとが異なる場合には、検索決定部35は、判定対象手書き文書に対して、少なくとも手書き入力データを用いた文字検索を行うことを決定する。検索決定部35は、文字認識部33および文字検索部37に対して、判定対象手書き文書に対する手書き入力データを用いた文字検索を行うことを要求する。
文字認識部33は、検索決定部35による要求に応じて、検索キーである手書き入力データに含まれる時系列情報を解析することによって、検索キーとして手書きされた複数のストロークに対応する文字や記号を認識する。上述した手書き文書に対する文字認識と同様に、文字認識部33は、まず、複数のストロークを文字毎のストロークを含む文字ブロックに分割する。そして、文字認識部33は、予め用意された手書き文字の辞書データを用いて、文字ブロック毎に、文字ブロック内のストロークに対応する文字を認識する。手書き文字の辞書データでは、例えば、様々な文字や記号のそれぞれに対して、多くの手書き文字データ(例えば、多数人が手書きした手書き文字のデータ)を解析することによって得られた、手書き文字(記号)の標準パターンが関連付けられている。文字認識部33は、例えば、手書き文字の辞書データに示される複数の文字から、その標準パターンと文字ブロック内のストロークとの類似度が最大である文字を検出し、検出された文字を文字コードに変換する。なお、検索キーに複数の手書き文字が含まれる場合には、文字認識部33は、それら複数の手書き文字に対応する複数の文字コード(文字コード列)を取得する。文字認識部33は、検索キーから認識された文字(文字列)に対応する文字コード(文字コード列)を、文字検索部37に出力する。
文字検索部37は、文字検索データベース43から、判定対象手書き文書に対応する文字データ43Aを読み出す。そして、文字検索部37は、読み出された文字データ43Aに示される文字コード(例えば、複数の文字列候補の文字コード)に、文字認識部33によって出力された検索キーの文字コードが含まれているか否かを判定する。換言すると、文字検索部37は、判定対象手書き文書に対する複数の文字コード(文字コード列)に、検索キーに対応する1以上の文字コード(文字コード列)が含まれているか否かを判定する。文字検索部37は、判定対象手書き文書に対する複数の文字コードに、検索キーに対応する1以上の文字コードが含まれる場合、その判定対象手書き文書を、検索キーを含む手書き文書であると決定する。そして、文字検索部37は、判定対象手書き文書を、検索キーに該当する手書き文書として、該当文書一覧に追加する。文字検索部37は、例えば、判定対象手書き文書に付与された識別情報(ページID)を該当文書一覧に追加する。
上記の処理によって、全ての判定対象手書き文書に対して筆跡検索と文字検索のいずれかの検索が行われた後、手書き文書リード部38は、手書き文書データベース41から、該当文書一覧に示される手書き文書(ページID)に対応する手書き文書データ41Aを読み出す。そして、送信部39は、読み出された手書き文書データ41Aと、手書き文書内の検索キーに該当するストロークを示すデータ(すなわち、ヒットワードを示すデータ)とを、手書き文書検索を要求したクライアント端末2B,2Cに送信する。手書き文書内の検索キーに該当するストロークは、筆跡検索部36又は文字検索部37による検索時に特定されたものであり、例えば、手書き文書データに含まれるストロークデータのストロークID(ストロークIDの範囲)で示される。なお、例えば、全ての判定対象手書き文書に対して筆跡検索と文字検索のいずれかの検索が行われた後に、検索キーを含む手書き文書データが所定数以上取得されていないとき、筆跡検索によって検索キーを含むか否かが判定された手書き文書データ41Aに対して、文字検索をさらに実行してもよい。
クライアント端末2B,2Cは、サーバ1の送信部39によって送信された手書き文書データ41Aと、手書き文書内の検索キーに該当するストローク(ストロークID)を示すデータとを受信し、それらデータを用いて、検索キーに基づく検索結果を画面に表示する。クライアント端末2B,2Cは、例えば、受信した手書き文書データ41Aに含まれる複数のストロークデータに対応する複数のストロークの軌跡を画面に表示し、それら複数のストロークの軌跡の内、検索キーに対応するストロークの軌跡(ヒットワード部分)を強調して表示する。クライアント端末2B,2Cは、検索キーに対応するストロークの軌跡を強調表示する場合に、筆跡検索によって検出されたストロークと文字検索によって検出されたストロークとを、異なる表示形態(例えば、異なる色)で強調表示してもよい。なお、クライアント端末2B,2Cは、受信した手書き文書データ41Aに含まれる複数のストロークデータに対応する複数のストロークの軌跡が描画された手書き文書のサムネイルを画面に表示し、そのサムネイル内の検索キーに対応するストロークの軌跡を強調表示してもよい。例えば、クライアント端末2B,2Cは、検索結果として複数の手書き文書データ41Aが受信された場合には、ヒットワードが強調表示された、複数の手書き文書のサムネイルの一覧を画面に表示する。
また、上述の手書き文書管理プログラム12Bは、クライアント端末2B,2C上で実行されてもよい。その場合、手書き文書管理プログラム12Bは、例えば、タッチスクリーンディスプレイ206上で入力された検索要求(検索キー)に応じて、SSD204等のストレージデバイスに保存された手書き文書データ41Aを検索し、その検索結果をタッチスクリーンディスプレイ206の画面上に表示する。手書き文書管理プログラム12Bは、表示処理部40をさらに備え、上述のように検索キーに基づく検索結果を画面に表示する。
図11から図13を参照して、クライアント端末2B,2C(又は、表示処理部40)によって表示される手書き文書検索画面500の例について説明する。
図11に示すように、手書き文書検索画面500は、検索キー入力領域501、検索ボタン501A、クリアボタン501Bを表示する。検索キー入力領域501は、検索キーとすべき文字列または図形を手書きするための入力領域である。検索ボタン501Aは、手書き文書検索処理の実行をサーバ1(検索要求受信部34)に要求するためのボタンである。クリアボタン501Bは、検索キー入力領域501に手書きされた文字列または図形の削除(クリア)を指示するためのボタンである。
検索キー入力領域501は、キーボード(ソフトウェアキーボード)を用いて、検索キーとすべき文字列を入力するための入力領域としても使用され得る。その場合、クリアボタン501Bは、検索キー入力領域501にキーボード入力された文字列の削除(クリア)を指示するために用いられる。
手書き文書検索画面500は、さらに、複数の手書き文書サムネイル601を表示するための領域を有する。図11の例においては、手書き文書検索画面500には、検索結果として取得される手書き文書(手書きページ)の内の9個の手書き文書それぞれに対応する、9個の手書き文書サムネイル601を表示することができる。
図12に示されているように、検索キー入力領域501に手書き文字列「TABLET」が入力されている状態で検索ボタン501Aが押下された場合、この手書き文字列「TABLET」を構成するストローク群に対応するストロークデータに基づく手書き文書検索がサーバ1に要求される。そして、手書き文書検索画面500上には、サーバ1から受け取った検索結果に基づいて、手書き文字列「TABLET」を含むいくつかの手書き文書それぞれに対応する手書き文書サムネイル601が表示される。つまり、手書き文書検索画面500上には、手書き文字列「TABLET」と推定されるストローク群を含むいくつかの手書き文書それぞれに対応する手書き文書サムネイル601が表示される。図12においては、5個の手書き文書が手書き文字列「TABLET」を含む手書き文書として検索された場合が例示されている。ヒットワード、つまり5個の手書き文書サムネイル601中の手書き文字列「TABLET」(すなわち、手書き文字列「TABLET」に対応するストローク群)は強調表示される。
また、図13に示されているように、手書き文書検索画面500上に、サーバ1に対して要求する検索の種類を選択するためのボタン502A,502Bをさらに表示してもよい。ユーザは、「筆跡検索」ボタン502Aと「文字検索」ボタン502Bとを用いて、サーバ1に対して、筆跡検索と文字検索のいずれか、又は筆跡検索と文字検索の両方で手書き文書検索を行うことを指示できる。クライアント端末2B,2Cは、サーバ1に対する検索要求に、「筆跡検索」ボタン502Aと「文字検索」ボタン502Bとを用いて指定された検索の種類を示す情報を含めて送信する。サーバ1は、この検索要求に応じて、指定された種類の検索を実行する。
図13においては、筆跡検索と文字検索の両方で手書き文書検索が行われた場合が例示されている。この場合、手書き文書サムネイル601に含まれるヒットワードにおいては、両方の検索でヒットした文字列と、筆跡検索のみでヒットした文字列と、文字検索のみでヒットした文字列とが、別々の表示形態で強調表示される。例えば、両方の検索でヒットした文字列と、筆跡検索のみでヒットした文字列と、文字検索のみでヒットした文字列とは、異なる色で強調表示される。
なお、上記説明では、サーバ1から手書き文書データ41Aと、手書き文書内の検索キーに該当する部分を示すデータとを受信する例について述べたが、サーバ1(送信部39)は、検索キーに該当する部分が強調表示された、該当文書一覧に示される手書き文書のサムネイルをクライアント端末2B,2Cに送信してもよい。その場合、クライアント端末2B,2Cは、サーバ1から受信した手書き文書のサムネイルを画面に表示するだけでよく、クライアント端末2B,2C側での処理を軽減することができる。
次いで、図14のフローチャートを参照して、サーバ1によって実行される手書き文書検索処理の手順の例を説明する。
まず、検索要求受信部34は、クライアント端末2B,2Cから検索要求を受信する(ブロックB101)。この検索要求には、例えば、検索を要求したユーザのユーザID、検索キー等が含まれる。検索決定部35は、検索要求を受信したことに応じて、手書き文書データベース41を参照して、検索対象の手書き文書の一覧を取得し(ブロックB102)、取得した一覧から、検索キーを含むか否かを判定する手書き文書(判定対象の手書き文書)を選択する(ブロックB103)。
次いで、検索決定部35は、検索キーが手書き入力データであるか否かを判定する(ブロックB104)。つまり、検索決定部35は、検索キーが、手書きによる1以上のストロークに対応する1以上のストロークデータが、それら1以上のストロークが手書きされた順序(筆順)で並べられた時系列情報と、キーボード入力された文字列に対応する文字コードとのいずれであるかを判定する。
検索キーが手書き入力データである場合(すなわち、ストロークデータが並べられた時系列情報である場合)(ブロックB104のYES)、検索決定部35は、検索を要求したユーザ(すなわち、検索キーを手書き入力したユーザ)と、判定対象の手書き文書を作成したユーザとが同一であるか否かを判定する(ブロックB105)。検索を要求したユーザと判定対象の手書き文書を作成したユーザとが同一である場合(ブロックB105のYES)、特徴量算出部32は、検索キーである手書き入力データを解析することによって、検索キーの特徴量を算出する(ブロックB106)。また、筆跡検索部36は、特徴量データベース42から判定対象の手書き文書に対応する複数の特徴量を読み出し(ブロックB107)、判定対象の手書き文書に対応する複数の特徴量に、検索キーの特徴量に類似する特徴量が含まれているか否かを判定する(ブロックB108)。筆跡検索部36は、例えば、対象の手書き文書に対応する複数の特徴量の内の第1特徴量と、検索キーの特徴量との類似度がしきい値以上である場合に、判定対象の手書き文書に対応する複数の特徴量に、検索キーの特徴量に類似する特徴量が含まれていると判定する。
判定対象の手書き文書に対応する複数の特徴量に、検索キーの特徴量に類似する特徴量が含まれている場合(ブロックB108のYES)、判定対象の手書き文書を、検索キーを含む手書き文書の一覧である該当文書一覧に追加する(ブロックB109)。判定対象の手書き文書に対応する複数の特徴量に、検索キーの特徴量に類似する特徴量が含まれていない場合(ブロックB108のNO)、ブロックB110に進む。
また、検索キーが手書き入力データでない場合(すなわち、キーボードを用いて入力された文字列に対応する文字コードである場合)(ブロックB104のNO)、文字検索部37は、文字データベース43から判定対象の手書き文書に対応する文字コード列を読み出し(ブロックB113)、判定対象の手書き文書に対応する文字コード列に、検索キーの文字コード(文字コード列)が含まれるか否かを判定する(ブロックB114)。そして、判定対象の手書き文書に対応する文字コード列に、検索キーの文字コードが含まれる場合(ブロックB114のYES)、文字検索部37は、判定対象の手書き文書を該当文書一覧に追加する(ブロックB115)。判定対象の手書き文書に対応する文字コード列に、検索キーの文字コードが含まれていない場合(ブロックB114のNO)、ブロックB110に進む。
次いで、検索決定部35は、すべての検索対象の手書き文書が処理されたか否かを判定する(ブロックB110)。未処理の検索対象の手書き文書がある場合(ブロックB110のNO)、ブロックB103に戻ることによって新たな判定対象の手書き文書を設定し、その新たな判定対象の手書き文書に対して、上述のように、検索キーを含む該当文書であるかどうかを判定するための処理を実行する。すべての検索対象の手書き文書が処理されている場合(ブロックB110のYES)、送信部39は、該当文書一覧に含まれる手書き文書に対応する手書き文書データ41Aを、手書き文書の検索を要求したクライアント端末2B,2Cに送信する(ブロックB111)。
これにより、クライアント端末2B,2Cは、サーバ1から送信された手書き文書データ41Aを用いて、検索キーに該当する手書き文書データ41Aやその一覧を画面上に表示することができる。
以上説明したように、本実施形態によれば、手書き文書を精度よく検索することができる。本実施形態では、検索キーに基づく手書き文書検索が要求されたとき、検索キーが手書き入力データ(ストロークデータ)を含むか否かと、保存されている複数の手書き文書41Aの内の判定対象の手書き文書を作成した作成ユーザと手書き文書検索を要求した検索ユーザが同じであるか否かとに応じて、筆跡検索と文字検索のいずれか一方が実行される。検索キーが手書き入力データを含み、作成ユーザと検索ユーザとが同じである場合、手書き文書に含まれるストロークの特徴量と検索キーに含まれるストロークの特徴量とを用いて、検索キーを含む手書き文書データを取得する筆跡検索が実行される。検索キーが手書き入力データを含み、作成ユーザと検索ユーザとが異なる場合、手書き文書に含まれるストロークから文字認識された手書き文字に対応する文字コードと、検索キーに含まれるストロークから文字認識された手書き文字に対応する文字コードとを用いて、検索キーを含む手書き文書データを取得する文字検索が実行される。また、検索キーが文字コードを含む場合には、手書き文書に含まれるストロークから文字認識された手書き文字に対応する文字コードと、検索キーに含まれる文字コードとを用いて、検索キーを含む手書き文書データを取得する文字検索が実行される。このように、筆跡検索と文字検索とが使い分けられることによって、筆跡検索と文字検索のそれぞれの利点を生かして、精度よく手書き文書の検索を行うことができる。
本実施形態の手書き文書に対する各種処理はコンピュータプログラムによって実現することができるので、このコンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのコンピュータプログラムを通常のコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。