torazaemon2016’s blog

手書き文字認識メモ開発

Windows, iPhone, AndroidでのObsidianデータ同期(Syncthingを使って)

ObsidianのVaultを WindowsiPhoneAndroidで同期するには、いろいろと方法がWWWで出ていて、

などなど。 有料から無料のもの、設定が簡単なものから難しいもの、 複数の同期が時間が掛かるらしいものなど どれを使えばいいのかと。

お金があれば、公式のobsidian syncでやるのが一番かと思いますけど、少々高い。

クラウドは使いたくない (データは外に出したくない)

自分の(Windows + iPhone)で「クラウドは使いたくない (外部にコンテンツデータは出したくない)」という、かなりひねくれた環境では、 選択肢がなかなかない。

Remotely Save プラグイン

Windows + Docker Desktop + WebDAV (bytemark/webdav)なら、比較的簡単にWebDAVの構築でき、これを動かすことで、ノートPCにてローカル(Docker 上のLinux ファイルシステム上)にデータを持たせ、 それに obsidian のコミュニティプラグイン Remotely Save で同期するという方法で しばらく運用していた。

若干同期に時間が掛かる(最短で1分ぐらいのインターバル)問題があったけど、 Windows + iPhoneで remolety Saveプラグインで手軽に同期して使えていた。

問題点

WindowsでのObsidianのフォルダとDocker上のファイルシステムにデータ領域が2重になることで、ディスク領域が多く必要。

(DockerでWindows領域をmountする方法を取ることで、WevDAVでの保存場所を同じWindows領域にしようとしたら、そのファイルアクセスの致命的な遅さで実用的でなかった。500MBほどのobsidian Vault領域をDockerでmountしたら、WevDAVでの起動が10分以上掛った)

Dockerなので、メモリがたくさん消費される(通常ならDockerシステムだけで2GB)。 消費量を1GBに設定変更したりしても、Docker関係もろもろで2GB程度メインメモリが使われていた。

16GBメモリ+1TBのSSDのノートPCだったので、動かせていたけど、これが8GBの256GB程度だとちょっと厳しいかと思う。

そして、最近、iOSのほうで、WevDAVへのアクセスがhttpではだめで、httpsにしないとアクセスしないってなったぽい(アクセスしてくれなくなった)

Dockerで HTTPSを可能にとすればいいのだけど、 bytemark/webdavで簡単に構築できたのがウリだったのが、HTTPSで作り直すのが面倒だなぁというのと、Remotely Save同期の遅さがちょっと気になっていた (iPhoneのほうはとても速いのだけど、Windowsでのremotely saveが遅い(最近のRemotely SaveのVersion Upでかなり速くはなっていたのだけど))

Syncthing

そこで、Syncthingを使うことにした。

SyncTrayzor

Windowsでは、syncthingの本家からでもいいですし

今回は、GUIとして、上記のようなブラウザベースではなく、専用のものを使ってみました。

Synthingは50MBぐらい、SyncTrayzorが120MBぐらいのメモリ使用量なので、Dockerのころに比べてメモリ使用量は格段に減りました。

iPhoneではMöbius Sync

Windows版、Androidは無料で使えるけど、iPhoneのほうは「Möbius Sync」という700円のものが必要です。

(Möbius Syncと Möbius Sync Proの2つがありますが、無印のほうでアプリ内課金700円するのと、Proの最初っから700円では、同じものらしいです)

無料で使える「Mobius Sync」では、20MBまでだったり、iPhone内のアクセスできる領域がMobius Sync内フォルダのみ(サンドボックス内のみ)で、Obsidianで通常作られる Vaultの「このiPhone内」の「Obsidian」フォルダにはアクセスできない。

そこで無印で、お試しして、Windowsの適当なところと、iPhoneのMöbius Sync内のサンドボックスと同期するテストして、動作を確認できたので、 アプリ内課金700円で購入してみて、Obsidianでの設定を行ったところ、iPhone内のObsidianのフォルダへアクセスができた。 (Möbius Syncフォルダ以外へのアクセスは、実験で、保証が・・・とかと出ているけど、ちゃんと使えた)

700円のコストはかかるけど、公式のsyncの月額でかかるよりは、1回で済むので、コスト的には良いかと思う。

Windows,iPhoneとも設定を行って接続したところ、ObsidianのVault領域の同期ができました。(感動)

外部アクセスを切る

Firewallでログ見ると、いっぱい外へのアクセスが出ている。 P2Pでローカルで同期のはずなのに、どうして?と思うと、外部アクセスしないように設定する必要があるようなので、checkを外すなど、いろいろと設定する。

アドレスをIPで書いたりするため、IPアドレスを固定するのに 家のWiFi環境(Wifiルータ)でのDHCPiPhoneを静的に設定するとか、 これだけではだめで、最近のiPhoneは、MacAddressがランダム化するので、 DHCPのためにそれを止めてみるとか、いろいろと「はまるポイント」があったりしましたが、 Windows + iPhone + Android で同期できる環境 (2,3秒で同期)ができて、 Obsidianでますます個人記録(日記)を書いていける環境ができました。

おわりに

iPhoneで同期させるためには、毎回Mobius Syncを起動しないといけないけど、そこはiPhoneなので仕方がない。 Androidのほうも、バッテリの関係でバックグラウンドでいいか、iPhoneのように起動するかは、電池と更新頻度の兼ね合いですね。

日本語でのobsidian + syncthingで Windows + iPhoneの話があまりなさそうなので、書いてみました。

画面のキャプチャはないけど、需要があれば、更新できればですね。

Keyword:Windows, iPhone, Android, Obsidian, 同期, Sync

新学期に合わせてHWRmemo, HWRdiary を4/30まで無料に

WindowsPCにおいて、スタイラスペンでリアルタイムに手書きした文字を認識する「メモ」と「日記」アプリを更新し、 画像を扱いやすくし、またアプリのスピード感もアップすることができたので、 新学期に合わせて4/30まで無料で公開しています。

apps.microsoft.com

手書きメモをテキストデータにできる

5x5でメモを一覧

apps.microsoft.com

日記1か月分表示

他にも

apps.microsoft.com

apps.microsoft.com

apps.microsoft.com

などあります。

新学期に向けて Surface などペンが使えるパソコンとスタイラスペンは用意したのだけど、 どう使っていいのか?と悩んでいる方は、 このアプリを使ってみて、ペンで文字を入力できるパソコン環境というものを是非試してみてください。

HWRmemo (Hand Writing Recognition Memo) (旧「手書き文字認識メも」)

HWRmemo (Hand Writing Recognition Memo) を公開しました。

これは、「手書き文字認識メも」という名前で初めて作成したアプリで、2022/11/18からMicrosoft Storeにて公開してしたアプリを、 UIの更新、内部構造の改良などを行って、より使いやすくしたものです。 国際化対応に際して、名前を日本語の「手書き文字認識メも」から「HWRmemo」に変更しました。

apps.microsoft.com

手書きメモをテキストデータにできる

5x5で一度に25枚のメモを一覧

手書き文字はテキストデータ化してるので、メモの内容に対してテキスト検索が可能

C#でプログラミングを始めて1年と3カ月ほど経って、C#でのUWPプログラミングについても、だいぶ知識が増えました。 まだまだ不十分なところも多いですが、ぜひ使ってみて御意見をいただければ幸いです。

  1. (キーボードなしで)ペンだけでコンピュータを使いたい
  2. 自分の書いた文字がテキストデータになる (OCRではなくオンライン手書き文字認識でテキストになる)
  3. できるだけパキパキと素早く気持ちよく動いてほしい
  4. Markdown形式で保存することでObsidianに連携させる(大規模な検索や、複数PCでのファイル連携はObidianの機能に任せる)

などのコンセプトで作っています。

他にも

apps.microsoft.com

apps.microsoft.com

apps.microsoft.com

があります。

試用期間が設定された無料体験版が利用できるようになっていますので、まずは無料でインストールしてみて、ご体験いただければ幸いです。

語学学習している人へ「ペンで文字を書いてその場でリアルタイムに認識するWindowsアプリで文字学習」

ハングルやヒンディーの文字を書いて学習できるかも(2/14まで無料)

ペンで日本語の漢字を書いて文字データにするアプリで、 「韓国語(한글)」や「ヒンディー語( हिंदी )」など多言語の文字がリアルタイム手書き文字認識できます。

apps.microsoft.com

ヒンディー語で「 आ 」と手で書いていくときも、筆順やペン先の方向で違う字になったりするので、 手書き文字の学習に使えるのではないでしょうか?

ハングルの文字も書き順が違うと同じ形に見えても認識結果は違う

また、日本語のかな漢字変換もそうですが、その言語をPCのキーボードで入力できるようになるのは大変です。 文字で書くことで入力できるのであれば、その言語のテキストファイル作成もしやすくなるかと思います。

韓国語や中国語、ヒンディー語を学習している人に、使ってみてもらいたいです。

HWRシリーズの紹介 torazaemon2016.hatenablog.jp

torazaemon2016.hatenablog.jp

HWRpad (Hand Writing Recognition Pad)

HWRpad (Hand Writing Recognition Pad : 手書き文字認識エディタ)

(2/14日まで無料です)

ペンで手書きした文字がリアルタイムに認識され、テキストファイルになる実用的なエディタです。 キーボードで文章を作るのではなく、ペンによる手書きで文章を綴ることを楽しんでください。

apps.microsoft.com

リアルタイム文字認識

タブをサポート

  • 起動すると前回起動時のテキストデータが表示されますので、メモ帳としても活用できます。
  • Ver.2.0 よりタブが使えるようになり、最大10個までタブを持てますので、一時的なメモから、文章の書き溜めなど、思いついたことを「すぐに手書き」してテキストデータにしていくことができます。

  • 消しゴム機能もサポートしていますので、途中での修正も簡単です。

  • 「消した場所」で、ペンで追加して書くと、そこの文字が再認識されていきますので、修正が大変簡単になりました。
  • Surface の Slim Penならばペンを反対にして頭で消すことができたり、ボタンを押すことで消しゴムになるペンの場合は持ち変えることなく消せたりします。

  • 保存時には、テキストデータの最初の40文字をファイル名にします。タイトルのように最初の40文字を書いてください。(ファイル名として使えない文字は自動でファイル名から外して名前を付けます)

  • ファイルの読み書きとして、拡張子 .txt と .md のテキストファイルを扱うことが可能です。

  • 日付時刻ボタンもありますので、書いた日時の記録も簡単です。日時ボタンを活用して、テキストの最初に日付などを書いておくと、ファイル名に日付を付けるのも容易です。

  • 多言語をサポートしています。右上のプルダウンメニューに、そのPCにインストールされている手書きエンジンを選択できますので、その中から選んでください。

  • オフライン手書き文字認識であるOCRではなく、オンライン手書き文字認識として、Microsoftの手書き文字認識エンジンを用いていますので、非常に精度が高い認識です。

  • タッチパネルであれば、ペンがなくても指で描くことができます。指で書く場合は、アプリの「設定画面」で指の使用を許可にしてください。 本アプリとしては、ペンの利用を強くお勧めします。(100円のタッチペンでも、文字を書くときの印象がずいぶん変わります)

  • ダークモードもサポートしています。

注意点:

  • Microsoftが提供している手書きエンジンがインストールされている必要があります。Windowsの「設定」において、「時刻と言語」「言語と地域」の言語のオプション言語機能にある「手書き」がインストールされていることを確認してください。

履歴

  • 2024-02-09 Ver.2.0.2

    • タブをサポート。最大10個までタブを開くことができます。
  • 2024-01-18 Ver.1.2.0

    • タイトルバー表示や保存時のファイル名を修正しました。
    • 次回起動時も同じ言語エンジンが選択されているようにしました。
  • 2024-01-16 Ver.1.1.5 Store公開

プライバシーポリシー

torazaemon2016は、このアプリによって、お客様の個人情報ならびにプライバシーにかかわる情報を収集しません。

Application privacy policy

This application does not collect or publish any personal information.

サポート

一番下にあるコメント欄をご利用いただくか、

torazaemon16 at outlook.com (at を@に変えてください)までご連絡ください。

AutohotkeyでGUIメニューを表示し、ペン1本で PCを操作する

Autohotkeyを使ってGUIメニューを出すことでキーボードがなくてもPCを操作する環境を作る。

Autohotkeyなのに、キーボードなしって、ちょっと意味がわからない話になっていますが、 タブレットPCでキーボード付けない軽いPC環境をを目指しているのでキーボードはないです。

せっかく軽いSurface GOに 重いキーボードを付けることなしに 使えたらと思っています。

Autohotkeyがどういうものやらとか、インストール方法などは、インターネットを検索ください。

ここでは、Autohotkeyが導入済みのSurfaceProやGOなどでペンでPCをペンのみでPCを操作する野望を達成させることを目標にしています。

Autohotkey Ver.2 での文法変更

AHKがVer2になってからGUIの書き方も少し変わったのですが、インターネットでは Ver1でのサンプルのページばかりがヒットするため、なかなかうまく書けてなく Classを作ってうまく書けるより、まずは動作するものとして作ってています。

zenn.dev では、Ver.2でのclass とnewを使った例が紹介されています。

HWRinputとの連携

以下から実際の例です。

torazaemon2016.hatenablog.jp で紹介しているHWRinputのF13ボタンを、GUIメニューの起動ボタンにする。

F13::
{
    if WinActive("ahk_class Notepad++")
    {
        ;Send("{F1}")   ; ここでSend("F13")絶対ダメ。無限ループになる。
        GUI_menu()
    }
    else if WinActive("ahk_class Vim")
    {
        Send("{ESC}")
    }
    else
    {
        GUI_menu()
    }
    return
}

GUI_menu()

GUIでボタンで、やりたいことを登録しています。

Ver1に近い形の記載で、 やりたいことができることを確認する意味もあるので、 洗練されていませんので、どんどん拡張していただければと思います。

途中 func_ での関数は また別途定義されているものですが、また別途紹介できればと思います。

基本的にラウンチャーなので、起動時にGUIを消して、コマンドを実行している形ですが、 カーソルキーの動きの際には、一度隠して、コマンドを実行し、再度GUIを出す形です。

また、タイマーで5秒間メニューを出し、何もしなければ消える形にしています。 また、最初でGUIメニューの多重起動を避ける形にしています。

GUI_menu()
{
    If WinExist("AHK Menu")
    {
        WinActivate
        return
    }
    
    MyGui := Gui(,"AHK Menu")
 
    MyGui.BackColor := "00EE99"  ; RGB color
    MyGui.SetFont("s12")  ; フォントサイズ(ポイント)を設定

    MyGui.Add("Button", " default", "Obsidian").OnEvent("Click", Obsidian_click) ; 
    MyGui.Add("Button", " x+8", "Date").OnEvent("Click", Date_click) ; 
    MyGui.Add("Button", " x+8", "Time").OnEvent("Click", Time_click) ; 
    MyGui.Add("Button", " X+8 ", "-").OnEvent("Click", Add_item_click) ; 
    MyGui.Add("Button", " X+8 ", "- [ ] ").OnEvent("Click", Add_checkitem_click) ; 

    MyGui.Add("Button", " X16 y+20", "Edit Autohotkey ").OnEvent("Click", Edit_ahk_click) ; 
    MyGui.Add("Button", " x+8", "Edit ahk GUI").OnEvent("Click", Edit_ahk_gui_click) ; 
    MyGui.Add("Button", " x+8", "Reload AHK").OnEvent("Click", Reload_ahk_click) ; 

    MyGui.Add("Button", " x16 y+20", "Google").OnEvent("Click", Chrome_click) ; 
    MyGui.Add("Button", " x+20", "Chrome URL get").OnEvent("Click", Chrome_get_click) ; 
    MyGui.Add("Button", " x+20", "Win+Shift+s").OnEvent("Click", Capture_click) ; 

    MyGui.Add("Button", " x+60 cRed", "Shutdown").OnEvent("Click", Shutdown_click) ; 

    MyGui.Add("Button", " x16 y+20", "Gmail").OnEvent("Click", Gmail_click) ; 
    MyGui.Add("Button", " x+20", "Calendar").OnEvent("Click", Gcalendar_click) ; 

    MyGui.Add("Button", " X16 y+40", "←").OnEvent("Click", Arrow_Left) ; 
    MyGui.Add("Button", " X+8 ", "↓").OnEvent("Click", Arrow_Down) ; 
    MyGui.Add("Button", " X+8 ", "↑").OnEvent("Click", Arrow_Up) ; 
    MyGui.Add("Button", " X+8 ", "→").OnEvent("Click", Arrow_Right) ; 
    MyGui.Add("Button", " X+20 ", "^{Home}").OnEvent("Click", Goto_Head) ; 
    MyGui.Add("Button", " X+8 ", "^{End}").OnEvent("Click", Goto_Tail) ; 
    
    Aaa := WinActive("A")
    if(Aaa != 0){
        Title := WinGetTitle("A")   ;アクティブ タイトル名を取得し Title へ格納
    } else {
        Title := "no active"
    }
    MyGui.Add("Text", " x16 y+20", Title)

    MyGui.OnEvent("Escape", CloseWindow) ; [ESC] キーで閉じる
    MyGui.OnEvent("Close", CloseWindow) ; X で閉じる

    SetTimer(UpdateMenu, 5000)  ;5秒後にメニューを閉じる
    MyGui.Show("x1800 y100")

;--------------------
    UpdateMenu(*)
    {
        CloseWindow()
    }
;---MyGui を閉じる関数-----
    CloseWindow(*)
    {
        SetTimer(UpdateMenu, 0)
        Sleep(100)
        MyGui.Destroy()
    }
;--------------------
    Date_click(*)
    {
        MyGui.Destroy()
        ;IME_set(0)
        now := FormatTime(, "yyyy-MM-dd")
        Sleep(100)
        Send(now)
        Send(A_Space)
    }

    Time_click(*)
    {
        MyGui.Destroy()
        ;IME_set(0)
        now := FormatTime(, "HH:mm")
        Sleep(100)
        Send(now)
        Send(A_Space)
    }

    Edit_ahk_click(*)
    {
        MyGui.Destroy()
        Run("notepad++.exe `"" A_ScriptDir "\AutoHotkey_V2.ahk`"") ;このスクリプトを編集 
    }

    Edit_ahk_gui_click(*)
    {
        MyGui.Destroy()
        Run("notepad++.exe `"" A_ScriptDir "\GUI.ahk`"") ;このスクリプトを編集 
    }

    Reload_ahk_click(*)
    {
        msg := "`"Reload Autohotkey `"" 
        ToolTip(msg)
        Sleep(500)
        ToolTip()
        Reload()    ;このスクリプトをリロードして適用
        return
    }

    Shutdown_click(*)
    {
        MyGui.Destroy()
        func_shutdown()
    }
    
    Chrome_click(*)
    {
        MyGui.Destroy()
        func_chrome_open()
    }

    Chrome_get_click(*)
    {
        MyGui.Destroy()
        func_chrome_capture()
    }

    Capture_click(*)
    {
        MyGui.Destroy()
        Send "#+s"  ; Win+Shift+s
    }

    Gmail_click(*)
    {
        MyGui.Destroy()
        browser := "C:\Program Files\Google\Chrome\Application\chrome.exe --disk-cache-dir=R:\Temp"
        Run(browser " `"https://mail.google.com/mail/u/0/#inbox`"")
    }
    
    Gcalendar_click(*)
    {
        MyGui.Destroy()
        browser := "C:\Program Files\Google\Chrome\Application\chrome.exe --disk-cache-dir=R:\Temp"
        Run(browser " `"https://calendar.google.com/calendar/u/0/r?pli=1`"")
    }
    
    
    Obsidian_Click(*)
    {
        MyGui.Destroy()
        func_obsidian()
    }

    Add_item_click(*)
    {
        MyGui.Destroy()
        Sleep(50)
        Send "- "           
    }
    Add_checkitem_click(*)
    {
        MyGui.Destroy()
        Sleep(50)
        Send "- [ ] "       
    }

;---画面リストアする(またメニューを表示する)-----
    Arrow_Left(*)
    {
        MyGui.Hide()    ; メニュー消す (アクティブがエディタ画面に)
        Sleep(50)       ; ちょっと待つ(速すぎるとアクティブが切り替わらない)
        Send "{Left}"   ; ←移動
        Sleep(50)       ; ちょっと待つ
        Title := WinGetTitle("A")   ;アクティブ タイトル名を取得し Title へ格納
        MyGui.Restore() ; Guiメニューを表示する
        SetTimer(UpdateMenu, 5000)
    }
    Arrow_Right(*)
    {   
        MyGui.Hide()
        Sleep(50)
        Send "{Right}"          ; →移動
        Sleep(50)
        Title := WinGetTitle("A")   ;アクティブ タイトル名を取得し Title へ格納
        MyGui.Restore() ; Gui を表示する
        SetTimer(UpdateMenu, 5000)
    }
    Arrow_Down(*)
    {
        MyGui.Hide()
        Sleep(50)
        Send "{Down}"           ; ↓移動
        Sleep(50)
        Title := WinGetTitle("A")   ;アクティブ タイトル名を取得し Title へ格納
        MyGui.Restore() ; Gui を表示する
        SetTimer(UpdateMenu, 5000)
    }
    Arrow_Up(*)
    {
        MyGui.Hide()
        Sleep(50)
        Send "{Up}"         ; ↑移動
        Sleep(50)
        Title := WinGetTitle("A")   ;アクティブ タイトル名を取得し Title へ格納
        MyGui.Restore() ; Gui を表示する
        SetTimer(UpdateMenu, 5000)
    }
    Goto_Head(*)
    {
        MyGui.Hide()
        Sleep(50)
        Send "^{Home}"          ; 先頭へ移動
        Sleep(100)
        Title := WinGetTitle("A")   ;アクティブ タイトル名を取得し Title へ格納
        MyGui.show() ; Gui を表示する
        SetTimer(UpdateMenu, 5000)
    }
    Goto_Tail(*)
    {
        MyGui.Hide()
        Sleep(50)
        Send "^{End}"           ; 末尾へ移動
        Sleep(100)
        Title := WinGetTitle("A")   ;アクティブ タイトル名を取得し Title へ格納
        MyGui.show() ; Gui を表示する
        SetTimer(UpdateMenu, 5000)
    }

}

他にも、スタートメニューでは、起動しにくい、よく使うアプリを登録したり、 キー操作に該当するものを、ボタンで実行できるようにしたりなど、 利用方法は無限です。

ぜひ使いやすいように、カスタマイズして、 「キーボードのないPC」でPCを使いこなしてください。

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の活用の話など、パソコンをキーボードなしでペンのみを使って利用するという新しい操作方法を深めていければと思います。