torazaemon2016’s blog

手書き文字認識メモ開発

WindowsタブレットPCをペン1本で操作する


Windowsタブレット型PCを「タブレット」として、ペン1本だけで使うことを目標に、設定やアプリを突き詰めていき、最終的には、究極のObsidianのためのタブレットPCになることを目指す。

 

軽いPC

Microsoft Surface Go3のように比常に軽い(544g)タブレットPCがあるにもかかわらず、タブレットとしてはいまいち使いにくいため、みんなキーボード(245g)を付けて、結局はノートPCとして使い、これなら富士通のノートPC(世界最軽量約599g)の方が軽い。

Windows UI 

WindowsのUIの出来、不出来が多く影響を与えている。
マウス前提のUIにして指で押すには小さいボタンやプルダウンメニューなど、
またペンで押すことと指の組み合わせをうまく便利になるように作られていないこと。
さらに、ショートカットキーで効率を上げる部分はキーボードなしのタブレットにしたとき、全滅する。
 
ここらへんはアプリの作り方やGUIのメニューの工夫などで対応していくしかないが、
さまざまな設定の工夫やアプリケーションの使い方の工夫をまとめていこうと思う。
 
- キーボード(タッチキーボード)
- タスクバー (設定)
- ペンの設定
- 仮想ディスプレイ(Windows Virtual Desktop Helper)
- スタートメニュー(Win11)
- クリップボード(Clibor、Win+V)
- Autohotkey (Ver.2)
- obsidian 
 

なぜ使いにくいのか

一番の問題は、日本語IMEである。
タブレットモードでのMicrosoftの日本語IMEでの手書きモードでの日本語文字認識がダメすぎて使いものにならない。
実際に手書きモードを使えばわかると思いますが、手書き文字入力での文字認識のスピードに間があり、遅すぎて「文を書くリズムではないので、文章が書けない」のである。また誤変換も多く、ひらがなをも変な文章に変換してしまう。
取り消し線を書くことで消去できたり(スリムペンがぶるぶるする)、かな漢字変換も含んでいたりと高性能で、「文字を書く」ことはできるのですが、「文章を書く」ツールとしては、満足できるものではないのである。
このため、手書きを使わず、キーボードで文章を入カする方がずっと楽なので、結局はキーボード付きのタブレットPCになってしまうのである。

Windowsの日本語IMEでの手書き

 

HWRinput 

WindowsタブレットPCを、使えるようにするためのキモとなるのが、開発した本アプリである。
リアルタイムに手書き文字を認識し入力できる
認識のスピードはリアルタイムである。
自分の書いた1筆1筆が、その瞬間毎に認識できる文字(漢字)として認識されていく。
自分の書いている1筆が、漢字になっていく様子は、感動するレベルです。
さらに、本ページ一番最初にある図のように、かなり「崩れた字」であっても正しく認識されていく。
そのスピードも、紙に書いているのと同じスピードで画面に書け、そしてそれは、ほぼキーボードで文章を入力するのと遜色なく書いて入力していけるものである。
 
ちなみに「そんしょく」はひらがなで書いてIMEで変換するいう方法で書いた。
通常は「漢字」で書いて、そのまま入力なので、IMEはoffにして動かすのだが、あえてONにして「ひらがな」を書いて「space」で送ると
Windowsかな漢字変換を利用でき、漢字がわからない時でも、使えるシステムなのである。
 

HWRinputとAutohotkeyの最強の組合せ

Autohotkeyと組み合わせて使うことでさらに便利になります。
Autohotkeyのインストールなど詳しい話はまたググってみて下さい 。
 
以下。使用例です。
HWRinputの描画画面にて
d// と入力してエディタ等に送ることで 2023-11-12 のように(今日の)日付を入力できます 。
t// と入力することで 18:15 と(現在の))時刻も入力可能になります。
autohotkeyでの記述は
::t//::
{
    now := FormatTime(, "HH:mm")
    Send(now)
    Send(A_Space)
    return
}

::d//::
{
    now := FormatTime(, "yyyy-MM-dd")
    Send(now)
    Send(A_Space)
    return
}
a// でファイルの先頭へ
z// でファイルの最後へ
のように編集コマンドのような操作もペン1本で可能になります。
::a//::
{
 Send("^{Home}") ; ファイルの最初の行へ
}
::z//::
{
 Send("^{End}") ; ファイルの最後の行へ
}

 

さらに
ぐぐる// とすることで
::ぐぐる//::
{
 browser := "C:\Program Files\Google\Chrome\Application\chrome.exe "
 Run(browser " `"https://www.google.co.jp/`"")
}

 

と、Chromeが起動してGoogleの検索画面を開くなど、
無限の可能性があります。
 
文字列と//の組み合わせですが、//は自分のやり方で決めた文字列です。
HWRinputにおいて日本語エンジンの時に書きやすくかつ認識しやすい文字で通常の文では出現しにくい文字列として//を使っています。
 
他にもAHKGUIメニューを作って呼び出して、Wordなどの起動や、ChromeのページのURLのキャプチャなど、さまざまなことをペン1本で自動化していくことが可能です。
HWRinput Ver.1.0で、F13ボタンを実装しました。
F13ボタンが押されたら、Autohotkeyでいろいろと飛ばすことができるかと思います。
F13::
{
 if WinActive("ahk_class Notepad++")
 {
   Send("{F1}") ;    ; (F1 押すと 「notepad++について」が表示)
   return
 }
 else if WinActive("ahk_class Vim")
 {
   Send("{ESC}")   ; VimならESCの代用として
   return
 }
 else
 {
   GUI_menu()   ; Autohotkeyで作ったGUIボタンのコマンド起動メニュー
 }
}

^の入カ 

HWRinputの現時点の問題としてキーボードの種類によって入力できない記号があることです。
多くの日本の環境においては106キーボード系の時、^が&になリます。
HVRinputの認識では正しく^になっているのですがエディタに送った際に&になってしまうのです。
とりあえずの対応 としては、^を入力したい時は、IMEの仮想キーボードを使って下さい。
HWRinput Ver.1.0において、Win+Vボタンを実装しました。
これを押せば、クリップボードや顔アイコンや、記号などが一覧から選んで選択することができるようになります。次の「クリップボードの設定」を読んでみてください。
 

クリップボードの設定

「設定」「システム」「クリップボード」「クリップボードの履歴」をONに。

これで、「Win+V」ボタンでクリップボードの履歴を呼び出すことや、各種記号が出せます。
各種記号のなかに「^」がありますので、一度見つけて出しておけば、時計マークの履歴の中に残って、次回以降楽になります。

また、HWRinputで「A^C」と書いて送った場合、「A&C」になってしまいましたが、クリップボードには「A^C」と入っています。

クリップボードからペーストすると、「A^C」と入ります。

また、HWRinput Ver.1.0 では、確定した文字列を、毎回クリップボードにコピーするようになりました。これを使えば、アクティブウィンドウがずれて送信失敗した場合でも、再度書かなくても済みます。

個人設定 タスクバーの設定

タッチ操作用をONにする設定は、逆に使いにくいです。
ペン操作の時は、ペンを手から離すことは考えないし、ペン先は細いのでアイコンは小さくてもokで、指で押すことは考えなくていいかと思います。

タスクバーの動作

複数の仮想ディスプレイを使用するとき に「すべてのタスクバー」にすると、タスクバーにあるアイコンをクリックすれば、すぐにそのアプリのある仮想ディスプレイへ遷移して、そのディスプレイ番号のところ移動できるので便利です。
このとき、以下のようなアプリを入れておくと、ディスプレイ番号の確認もできるので、便利です。

github.com

 

タイトルバーにアクセントカラーを付ける

現在のディスプレイで、相手(エディタ等)ウィンドウが、ちゃんとアクティブかどうかが目に見えると、大変便利です。
Windowsの「設定」で、「個人設定」「色」「アクセントカラー」で「タイトルバーにアクセントカラーを付ける」を『オン』にすると、大変わかりやすくなります。

アクセントカラーでアクティブウィンドウを明確に

ペンの設定 

Microsoftスリムペンを持っているなら、頭を1クリックすると「HWRinput」が起動する設定にすることで、すぐに手書き文字認識が使えるようにできます。
「アプリを開く」を選んで「HWRinput」を指定してください。
Ver1.1の常駐化により、一度起動するとタスクトレイに常駐しますので、ペンに登録する必要はなくなりました。
スリムペンの設定には、「手書き文字認識メも」など、他のよくつかうソフトを指定すると、便利です。(1クリック、2クリック、1クリック長押しの3つが使えるので、3種類の指定が可能です。私の方は、上記メモや画面キャプチャ(Win+Shift+s)の設定を入れています)

おわりに

Surface Pro 8でキーボードを外して実際にHWRinputでペンだけで書いてみると、
下書きとして、ほぼペン1本で書くことができました。
最初のURLのキャプチャもAHKでのプログラムでです。
 
文字間を空けてきれいに字を書けば、ほぼ100%正しく認識してくれるので、「自分の書きたいと考えたことをペンで書いている」という感覚を非常に強く持つことができます。
 
想定していたよりHWRinputの「Del」と「C+V」ボタンを多用することも、わかりました。
C+X や C+CはWindowsの右ボタン相当の働きでできるので、あまり使うことがなかったけれど、C+Vは画像も含めてよく使うことになりました。
 
HWRinput Ver.1.0で、C-X,C-C,C-Vを廃止して、代わりにWin+Vボタンを入れました。
クリップボードだけではなく、顔アイコンや画像のコピペも、ペン1本で可能になったので、大変便利になってきています。
 
今後、AHKの活用の話など、パソコンをキーボードなしでペンのみを使って利用するという新しい操作方法を深めていければと思います。