はやし雑記

はやしです

顔検出をenvoyのproxy-wasmで動かした

前回、前々回の続きです。

blog.hayashikun.com

blog.hayashikun.com

これがやりたくてやってました。

画像をPOSTすると、その画像に含まれる顔が検出されて、ログに出力されます。 重要なのは、顔検出を行なっているのがWebアプリケーションではなく、envoy proxyのwasmのfilterだということです。

リポジトリは前回と同じで、諸々はproxy-wasmのディレクトリに入っています。

github.com

appはpythonのwebサーバーで、データのサイズを返すだけです。

docker-compose up をすれば、appとenvoyが立ち上がります。

続きを読む

顔検出 (CenterFace) をブラウザのWASMで動かした

前回の続きです。

blog.hayashikun.com

この記事では、前回の記事で実装したCenterFaceをwasmで動くようにして、それをブラウザで動かしたことについて書きます。

以下のように、Webカメラの映像から顔を検出して、顔の上に緑の四角を描画するというのをやりました。

https://github.com/hayashikun/wasabi/blob/master/web-wasm.gif?raw=true

今回実装したものは、こちらにデプロイしているので、PCやスマホから試すことができます。

wasbi

試してみるとわかると思いますが、結構軽快に動作しています。

リポジトリは前回と同じです。

wasmとして動かしているのが web-wasm です。前回同様にRustで書いています。 github.com

web のフロントエンドが web です。Typescriptで書いていて、webpackでバンドルしました。 github.com

続きを読む

RustでCenterFaceのONNXを動かした

RustでCenterFaceのONNXモデルを動かして、それをWebAssemblyで動くようにして、最終的にproxy-wasmで動くようにする、というのをGWにやったので書いておきます。

全部で3記事の予定で、この記事ではCenterFaceのONNXモデルをRustで動かしたことについて書きます。

第2次岸田内閣 閣僚等名簿 | 首相官邸ホームページ

リポジトリはこちらになります。

github.com

リポジトリの src/center_face.rs がCenterFaceを動かすコアの部分で、 src/detect.rs が顔検出のONNXモデルで顔を検出して、ボックスとランドマークを追加した画像を吐くプログラムです。

ONNXはtractで動かしました。

GitHub - sonos/tract: Tiny, no-nonsense, self-contained, Tensorflow and ONNX inference

このプログラムをcargoで動かすときは、以下のようにします。 引数として、対象の画像ファイルのファイルパスを指定します。 オプション引数として、検出の際に画像を縮小する度合いを指定します。指定しなければ縮小されません。

image.jpg を渡すと、image_processed.jpg が出力されます。画像サイズは入力と同じです。

cargo run --package wasabi --bin detect image.jpg 2
続きを読む

体育よりも音楽の授業のほうがよっぽど非人道的(?)だろ

先日この話をしていた。

自分は運動が苦手だったから体育の授業が苦痛で、運動が嫌いになった、 みたいな話はTwitterとかでよく見かける。

僕もそこまで運動が得意というわけではないので、気持ちはわからなくもない。

でも正直なところ、体育の授業よりも音楽の授業のほうが何倍も嫌いだったし、 どう考えても音楽の授業のほうが非人道的だったと思う。

それなのに何故か音楽の授業が苦痛だった話はあまり聞かない。

なんで?

続きを読む

人生は冒険なので、Keychron K2を購入した

Keychron K2を購入した。

f:id:hayashikunsan:20220209010824p:plain

ここ最近はずっと去年の4月頃に購入したHHKB Professional HYBRID Type-Sを使っていた。 HHKB Professionalは最高のキーボードで、正直なところHHKB Professionalがキーボードの正解だと思う。

私は家でも学校でもパソコンをするので、この一年弱ほど、ずっとHHKBを家と学校で持ち運んでいた。 ただ、持ち運ぶのが面倒だなぁと最近思い始めたので、思い切って家用にもう一枚キーボードを買うことにした。

続きを読む

お酒が飲めない私はやっぱりお酒が飲めなかった(暫定)

私はいわゆる下戸というやつで、酒がめちゃめちゃ弱くて飲めない。

3年くらい前に、アルコール感受性の遺伝子検査をして、 アセトアルデヒドを酢酸にするための酵素が 僕の場合ポンコツで働いてくれていないことがわかった。

blog.hayashikun.com

アセトアルデヒドを酢酸に変換する何かを外から摂取すれば飲めるんじゃないか? みたいなことをずっと考えていて、先日こんなものをみつけた。

f:id:hayashikunsan:20211218212850p:plain

キューピーが出している製品で、2粒×5包入ってAmazonで770円だった。

www.kewpie.com

酢酸菌酵素とかいうのがエタノールから酢酸に酸化してくれるらしい。

もうすぐドクターオブサイエンスが取れそうな感じではあるけど、 専門は物理化学なので本当かどうかは全くわからない。

先日、これを1包2粒飲んで、ビールを3年か4年ぶりくらいに飲んでみたが、 ビール300 ccくらいで無理になってしまった。 無理になったというのは、本能的に「これ以上飲んではいけない」と感じたということ。

最後に飲んだのがかなり前だからかもしれないけど、 エタノールを摂取した後の気持ち悪さみたいなのは少しマシだったかもしれない。

前回は2粒しか飲まなかったが、もっと飲めばもう少しいけたのかもしれない。 機会があればチェレンジしてみたい。

キュキュットの詰め替えのバカでかいやつをそのまま使うとすぐ無くなる

2017年の春に上京してから台所用洗剤はキュキュットを使っている。

最初は、普通のサイズのやつを買った。

1年半ちょっと使って、それが無くなったので、 2018年の12月頃に2倍ボトルの詰め替え用を買った。

詰め替え用のボトルの先に、あの蓋が付くことに気づいたので、 こんな感じで使っていた。

f:id:hayashikunsan:20211218210336p:plain

キュキュットは緑ボトルのマスカットの香りと、オレンジボトルのオレンジの香りがある。 ピンクボトルのピンクグレープフルーツの香りというのもあるらしいが、近くのドラッグストアでは見かけたことがない。

そこから約2年、2021年の1月頃にはこうなった。

f:id:hayashikunsan:20211218211032p:plain

家でほとんど自炊はしないし、そこまで洗い物をすることもないので、 通常サイズの4倍ボトルであれば3年くらいはもつかと思ったが、 1年くらいでなくなってしまった。

ボトルが大きいと一気に大量に洗剤が出てしまうのではないかと思う。 今回は2倍ボトルのやつを買った。 最近はプッシュ式のやつもあるらしい。

LaTeXをwordに変換する(多分これが一番きれいに変換できる)

アドベントカレンダーの時期だけど、特に所属している団体とか何も無いので普通の記事です。

LaTeXをwordに変換する方法を色々と模索して、多分一番良さそうな方法を見つけたので書いておく。 もっといい方法があれば教えてください。

多分、LaTeXをwordにするのに一番一般的な方法は PDFで吐き出したやつをwordで読み込むやつだと思うが、 この方法だと数式が崩れたり、なんか色々崩れたりであれなので、 pandocを使って変換した。

ただ、pandocでの変換も完全ではないので、panflute を使って無理やりなんとかした。

panflute はpythonでpandocのフィルターが書けるやつです。 github.com

今回作ったやつのリポジトリはこれです。

https://github.com/hayashikun/latex2docxgithub.com

使い方は、cloneして、pandocの-dオプションで config.yml を指定する。 自分はoverleafで書いたlatexをgithubに同期していて、そのgitリポジトリにlatex2docxをsubmoduleとして追加している。

$ git submodule add git@github.com:hayashikun/latex2docx.git latex2docx
$ ls
figures  latex2docx  main.tex  references.bib
$ pandoc -d latex2docx/config.yml
document.docx  figures  latex2docx  main.tex  references.bib

-d オプションはそれなりに新しいpandocじゃないと動かないので、必要であれば新しいのをインストールする必要がある。 pandoc-crossref も使っています。

pandoc-crossrefciteproc のフィルターを通す前に pre_filter を、後に post_filter を通した。

https://github.com/hayashikun/latex2docx/blob/master/pre_filter.py

pre_filter では、以下のfilterを通した。

  • replace: \Im\mathrm{Im} の変換など (physics packageを使っているが、反映されないので)
  • aligned_block: で align を良い感じになるように
  • extract_eq_label: で数式番号が正しく出るように

https://github.com/hayashikun/latex2docx/blob/master/post_filter.py

post_filter では、以下のfilterを通した。

  • make_index: で数式のインデックスを作る
  • update_eq_label: で数式インデックスに合わせて番号を振る

かなりadhocな対応で、自分のlatexファイルが正しく変換されるようにということだけを考えてfilterを書いた。

panflute はbreakpointなどを張りながらデバッグしたりする方法がわからず、結構面倒だった。 print などで標準出力に吐くとそれがfilterの出力になって後ろのfilterとかでエラーになってしまうので、 エラー出力に吐いてデバッグした。

Appendix

Haskell & Pandocをインストールする

Macだとbrewで最新版がインストールできるが、WSL Ubuntuとかだと自分で入れないと最新のものが入らない。 apt install だとインストールできるPandocのバージョンは2.5だが、2.8より上じゃないと -d オプションは使えないので、自分でインストールする必要がある。

今回改めてWSL Ubuntu上でこれをやるために、Haskellを入れてPandocを入れた。

# Install ghcup & Haskell
$ curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh

# Install pandoc
$ cabal new-update
$ cabal new-install pandoc pandoc-crossref

www.haskell.org

もし、 /usr/bin/ld.gold: error: cannot find -lgmp というエラーが出たら、

$ sudo apt install libgmp-dev

とする。

TypescriptでChrome拡張機能を作った

MixchTools

最近ミクチャにはまっていて、PCからウェブ版ミクチャを快適に使うためのChrome拡張機能を作った。

Chrome拡張機能を作るのは初めてだったので、備忘録として残しておく。

github.com

ざっくりとした技術仕様は以下のような感じ。

  • Typescriptで書く
  • scssを使う
  • webpackでpackする

今回作った拡張機能には以下の2つの機能を実装した。 - コメントがあったらPush通知を出す - レイアウトを良い感じに変えられる

続きを読む