About Katz Sasaki

Profile

Katz Sasaki (Sasaki Katsumasa) / @nai-kon

  • Live in Tokyo, Japan. Born in Sapporo, Hokkaido
  • ML engineer / Software developer
  • Works at Tax-Accounting system vendor in Japan
  • Interested in digitalizing historical player piano rolls

Private Works

PlaySK Piano Roll Reader / ピアノロールのエミュレーションソフト

「Enchanted Nymph」、レヴィツキ演奏、1928年のAmpico Bピアノロールより

約100年前の自動演奏ピアノのピアノロール画像を読み取り、音やペダル、強弱をリアルタイムにエミュレーションしてMIDIを出力する世界的に珍しいソフトです。

MIDIを音源ソフトや現代の自動演奏ピアノに出力する事で100年前の演奏を蘇らせることが出来ます。

2014年の初版以降改良を重ね、現在ではアメリカやオーストラリア、ニュージーランド、ドイツ、イタリア、南アフリカなど世界各国の自動演奏楽器の愛好家が使っており、ユーザーの要望に応じた機能追加を随時行っています。

  • 言語/FW/Lib:Python, wxPython, OpenCV, NumPy, Cython, Mido
  • クラウド:Cloudflare Workers, Cloudflare D1 (アップデート通知、アクセス解析用)
  • 開発:VSCode, GitHub, Poetry
  • CI/CD:GitHub Actions(テスト、ビルド、コード署名、リリース)

特徴

  • ピアノロールやパイプオルガンのロール画像からパンチ穴をリアルタイムに読み取り演奏をエミュレート
  • エミュレートした強弱(空気圧)をグラフでリアルタイムに表示
  • 自動演奏ピアノの3大ブランドAmpico, Duo-Art, Welteなどの多様なフォーマットに対応
  • キーボード操作による手動での強弱表現に対応
  • 入力画像は標準的な.jpgや.png等に加え、ピアノロール画像専用の.CISに対応
  • Windows / MacOSに対応

ユーザーの声

  • This is absolutely wonderful! (アメリカ アトランタ州)
  • Your software is so useful and enjoyable. (ニュージーランド)
  • Your 3.0 emulator is perfect, all the changes in the dynamics are appropriate and as to the truth. (イタリア)
  • The emulated Disklavier performance here sounds essentially identical to the pneumatic performance on a well-restored Ampico, to my ear. (アメリカ ユタ州)
  • It has been a dream to finally be able to hear what Recordo and ArtEcho rolls sound like and you made my dream a reality. (アメリカ カリフォルニア州)
  • I am enjoying experimenting with your software. It's great to be able to see the roll! (イギリス)
  • Piano Roll PlaySK -- an excellent program! (アメリカ ウィスコンシン州)
  • Your software has bought my piano back to life! Many thanks for keeping these things alive! (アメリカ)

掲載

演奏動画

「Did you mean it?」、Victor Lane演奏、1937年のDuo-Artピアノロールより
ショパン「タランテラ」、Tina Lerner演奏、1930年のAmpico Bピアノロールより
チャイコフスキー「花のワルツ」、Aeolian Duo-Artパイプオルガンロールより

手書き数字認識デモアプリ

昔、機械学習の勉強で作成したシンプルな手書き数字認識のWebアプリです。

MNISTの手書き画像をシンプルな2層CNN+全結合層からなるネットワークで学習しています。

入門用にAIの入出力を分かりやすく表示しており、GitHubで最もスターが多いです。

以前は自宅SVにホストしていましたが、現在はGoogle App Engineにホストしています。

  • 言語/FW/Lib:Python, PyTorch, Flask, Pillow, HTML5, JavaScript, TailwindCSS
  • インフラ:Google App Engine
  • 開発:VSCode, GitHub

ChatGPT風のWebアプリ

OpenAI社のGPT-4oのAPIを呼ぶChatGPT風のWebアプリです。これまで月額3000円でChatGPT Plusを契約していましたがAPIを呼んだ方が安上がりのため自作しました。

チャットの作成・削除、自動スクロール、シンタックスハイライト、モデル切替等の基本機能に加え、API利用料の表示や個別会話の削除機能が特徴です。個別会話の削除機能は会話の流れがおかしくなった時に途中からやり直せるため小説執筆に便利です。

ローカルサーバー上で動作し、チャット履歴はブラウザのローカルストレージに保存するシンプルな仕様です。

  • 言語/FW/Lib:React, TypeScript, Vite, TailwindCSS, OpenAI API
  • 開発:VSCode, GitHub

Twitterの画像をAIで選別して表示するWebアプリ

Twitterの画像をマルチモーダルAIで分類して表示するWebアプリです。

Seleniumでブラウザから画像をスクレイピングし、BLIP-2を用いて画像を一問一答でVQAして分類を行い一覧表示します。

ImageNetで学習済みのResNetでの画像分類も検討しましたが、必要な分類が無かったりVQAでは物体の状態(例:"座る犬" or "走る犬")まで解ることからBLIP-2を採用しました。

AIはローカルPCのRTX3060 12GB上で動作しており、画像のスクレイピングとAIの分類を並列処理することでGPUの使用効率を高めています。

  • 言語/FW/Lib:Python, Transformers, Selenium, Flask, Pillow, HTML5, JavaScript, CSS, LightBox2
  • 開発:VSCode, GitHub, Poetry
GitHub (Private Repo)

ピアノロールのスキャン装置

ピアノロールを自動でスキャンする装置です。

通常のピアノロールのスキャナーは一次元のラインスキャンセンサーでロールを巻き取りながら連続的に撮影しており、専用のハードウェアが必要です。

この装置は市販カメラを用いてピアノロールの撮影と紙送りを自動で行い、撮影した数百枚の画像をソフトウェアで自動的に繋ぎ合わせます。

紙送りはebayで落札した実物の自動演奏ピアノの巻き取り装置をArduinoで制御したステッピングモーターで駆動し、撮影はソニーの一眼カメラを付属ソフト(Imaging Edge)をRPAで操作しています。

位置合わせでは画像同士のオーバーラップ部分で画素の差分が最小となる座標を算出して繋ぎ合わせています。

  • 言語/FW/Lib:Arduino, Python, OpenCV, Pywinauto
  • 開発:VSCode, GitHub, Poetry
GitHub (Private Repo)

・繋ぎ合わせ結果 (Duo-Art 5540 El Choclo)

・PlaySK Piano Roll Readerでの演奏例 (Duo-Art 5877 Chopin Piano Sonata No.3 4th mvt)

スマホ写真の同期ソフト

デジカメやスマートフォンなどのMTP/MSCデバイスのファイルをPCに同期するソフトです。

機器を接続して転送開始を押すとファイルを差分でコピーして、コピー先をエクスプローラを立ち上げます。

通常の転送ではファイル更新日時が書き変わりますが、元の更新日時を維持してコピーする様にしています。

  • 言語/FW/Lib:C#
  • 開発:Visual Studio 2017

FireFoxのアドオン

Twitterの画像を原寸大で指定フォルダに保存したり、収集用の外部ページに飛ばすFireFoxのアドオンです。

ブラウザのセキュリティ上、Downloadsフォルダ以外には保存できないため別途用意した常駐スクリプトを組み合わせて指定フォルダに保存しています。

  • 言語/FW/Lib:JavaScript, PowerShell
  • 開発:VSCode, GitHub
GitHub (Private Repo)