blog

発表資料

論文とか学会発表などの資料の公開ページへのリンク. https://www.dropbox.com/s/wz0c13ksncvjh3k/link.txt?dl=0

textrar

textrarというRのパッケージを作った. textrar: https://cran.r-project.org/web/packages/textrar/ みんなの自動翻訳という翻訳サービスをRから利用するものだ. APIは整備されているのだが,使い方がちょっとややこしいので,簡単に使えるようにした.

screenshot

画像認識してクリックするパッケージとして,PythonではPyAutoGUIがある. 知っている範囲では,同じようなものがRではなかった. Rでは,マウス・キーボード操作の自動化パッケージとしてkeyboardsimulatorがあるが,画像認識の機能がなかった. そこで,その機能を補完するものとして,screenshotというパッケージをつくってCRANに登録した. なお,このパッケージには,Rからスクリーンショットをとる関数と,画像を元にスクリーン上での位置を特定する関数などがある. keyboardsimulatorと組み合わせると,便利なはずだ. ちなみに,これまでCRANに登録したパッケージには以下のものがある. moranajp: https://cran.r-project.org/web/packages/moranajp/ ecan: https://cran.r-project.org/web/packages/ecan/ clidatajp: https://cran.r-project.org/web/packages/clidatajp/ pivotea: https://cran.r-project.org/web/packages/pivotea/ screenshot: https://cran.r-project.org/web/packages/screenshot/

画像位置の特定

画像認識してボタンをクリックするのを自動化するために,Rでコードを書いていたら,やはり使いものにならないぐらい遅かった. そこで,Rcppを使ってC++で書き直した. 最低でも10倍,うまくいけば50倍ぐらいになると思っていたが,3倍ぐらいの速度にしかならない. しかも,場合によっては3倍ぐらい遅いこともある. たぶん,C++の書き方が良くないのだと思うが,別の方法で実装することにした. 同じような色だけの画像を認識するのは難しいが,通常 1 needle_imageとhaystack_imageの各ピクセルで共通する色を抽出 2 抽出した色のうちhaystack_imageで出現頻度の少ないものから1つ選んでneedle_imageでの位置を把握 3 needle_imageでの位置をもとに,haystack_imageの基準点(1,1)を抽出 4 出現頻度の少ないものから,順次2と3を繰り返し 5 haystack_imageの基準点が1つに絞れたら,それが探し出そうとしている画像の基準点と一致しているはず 全ピクセルの一致を目指しているのではないので,厳密な一致はしない可能性はあるが,画像があれば必ず一致するはずだ. 厳密な一致を求めるときは,最後にチェックを入れれば良い. ということで,コードを書いたら結構速い速度になって,満足. 単一色の画像の中からその一部を特定するのは無理だが(このコードに限らず,そもそも無意味),実用的な範囲では使えそうな感じだ.

コマンドラインでスクリーンショット

Windowsで画面のスクリーンショットをとるにはPrtScを押せば良いが,コマンドラインから取りたいときには不便. コマンドラインからできないか探したら,C# でつくったものがあった. .net frameworkは必要だが,“selfcompiled C# program"とのことなので,batを実行すれば勝手にexeが生成される. これはすごい. https://superuser.com/questions/75614/take-a-screen-shot-from-command-line-in-windows#answer-943947 https://github.com/npocmaka/batch.scripts/blob/master/hybrids/.net/c/screenCapture.bat また,下のところにあるコードはマルチディスプレイにも対応している. https://superuser.com/questions/75614/take-a-screen-shot-from-command-line-in-windows

Windowsのユーザ名のその後

少し前にWindows11のユーザ名変更について書いたが,別のPCでやったら色々と大変なことになった. その後なんとか修復したけど,普通にやりたい場合は,ネットで検索して出てくるものを参考にしたほうが良さそうだ.

干し草の中から針を探す

PythonのPyAutoGUIには,画像認識をしてボタンをクリックする機能があるのだが(正確にはpyscreezeの機能),RのKeyboardsimulatorには,それがない. PyAutoGUIからコードを辿って見ていくと,Confidenceの設定(Confidenceの設定はOpenCV使用)をしない場合は,単純に画像を端から一致するか判定しているみたいだ. これだったら,自分の力とRで実装できそう. 速度が遅ければ,検索部分のループだけ(ほぼCの)C++で書こう. ところで,画像認識のコードに,needleImage と haystackImage という変数がでてくる. 一瞬何のことか分からなかったが,「干し草の中から針を探す」だ. すごく良い変数名だ. 自分のコードにもこのネーミングを使う予定だ.

Windowsのユーザ名

Windows11のパソコンを複数台使っている. 初期設定のときに合わせればよかったのだが,ユーザ名(表示名も,実際のユーザー名)が異なっている. アプリケーションごとに保存されるデータが,C:\Users\USERNAME\AppData\Local\ (USERNAME:ユーザアカウント名)にあってここを指定するときに微妙にコードが異なってくるのがめんどくさい. %USERNAME%とかで処理していれば良いが,直接書いていることもあるためだ. 表示名(フルネーム)はわりと簡単に変更できるが,これを変更しても実際のユーザー名(ユーザーアカウント名)はそのまま残る. そのため,上記のユーザフォルダは変更されずにそのまま残っていた. ユーザフォルダの名前を変更しようとしても,できないようになっている(そりゃそうだ). レジストリの以下を変えると,フォルダ名を変更できるようになる. コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList ProfileImagePath https://pc-karuma.net/change-windows-11-user-folder-name/ ユーザやシステムの環境変数のPATHは,変更前のままなので変更する. よくわからないけど,PC上の設定も変更前のままだったら,以下を参考にしてユーザーネームを変更する. https://osechi-tech.net/windows11-username-change-method/ 多分だがこれぐらいやっておけば,だいたいできた感じだろう.

pivotea 1.0.1

Rでピボットテーブルのようなものをつくるためのパッケージpivoteaを更新した. ホグワーツのデータを追加し,ちょっとバグを修正. https://cran.r-project.org/web/packages/pivotea/ https://github.com/matutosi/pivotea/

R Package Scholar

R Package Scholarというのがあるらしく,pivoteaがこれに登録されたとの電子メールが届いた. “pivotea is quite a useful package so we created some page tools for it!“だとさ. たぶん,いろんなところに送っているのだろうけど,褒められるのは嬉しい. https://scholar.rpkg.net/authordetails.php?author=Toshikazu+Matsumura https://github.com/matutosi/pivotea/