2022年 09月 02日

Stable Diffusion (AI画家) に描いてもらった絵の顔を修正する (半手動)

AI画家はもちろん顔を描くことはできるのだが、大きなシーンに含まれる顔を描くのは手を抜いた感じになってしまう。これは顔のピクセル数が少なすぎ、情報量が不足していることに起因していると思われる。人間が絵を見るときは特定領域に注視するが、AIは全体を構成する。

顔がそれっぽくなるまで生成しまくるという手や、そもそも後ろ姿にするという手もあるが、どうしても「この構図がいい」という場合に顔だけ修正することを試してみた。

やってることは

  1. 元画像をアップスケールする
  2. 顔の部分を周辺を多少含めて切り抜く
  3. 切り抜きを元に img2img で顔ガチャする
  4. 当たりが出たら Photoshop で合成する

いわゆる inpainting を手動でやるという方法になっている。inpainting がうまくできるものがあれば良さそうだけど、とりあえず見つけられなかった。(basujindal/stable-diffusionにinpainting機能が含まれているがあまり良い成果がでなかった)

元画像

こういう感じで顔がほぼ描画されいない。この画像では試していないが、こうなると steps 数を増やしても時間がかかるだけであまり改善しないことが多い。

アップスケール

約8倍にアップスケールし (NightmareAI/Real-ESRGANをつかっている)、顔部分を周囲を含めて切りにく。

img2img

切りぬいた画像を元に、prompt はあまり変えずに顔を描いてもらう。face close-up とかつけたほうがいいと思うけど、顔ならプロンプトそのままでも割と良さそう。

strength (元画像をどのぐらい残すか) は 0.75 でやった。

合成

アップスケールした画像に顔を乗せる。

Photoshop もこういった合成が進化しており手動でやっても早い。合成写真をすばやく自然に仕上げる方法 というチュートリアルもある。

うまく img2img ができていれば頑張って馴染ませなくても若干ぼかすだけでなじむ。

感想

  • 作風によっては難しいかもしれない
  • 顔だけ大量生成するので効率が良い
  • 顔だから上手くいくが、指の本数が多いとか足が多いとかは無理な気がする
2022年 08月 27日

家庭用ミシンにラッパ(三つ巻き)をつける

うちのミシンは2015年に買った トーヨー JY-1Rという家庭用の安いやつ。(ところでトーヨーはミシン事業を手放したようで、このミシンのサイトは消滅してしまった)

当然(?)、職業用ミシンや工業用ミシンにあるアタッチメント取り付けのねじ穴があいていない。なんとなくアタッチメントで遊んでみたいのでなんとかすることにした。(特に三つ巻きが大量に必要なことがあるわけではない)

針板にねじ穴をつける

養生テープとかで止めるのもよいみたいだけど、つけかえるのが面倒なので、適当にねじ穴をあけることにする。

本来のねじ穴は、針位置から、下に13mm、右に42mm, 56mm ぐらい。ねじは SM 9/64 (T40) だと思う。ねじ外形3.5mmぐらい。持ってないのでちゃんと調べたわけではない。図面も結構検索したが見つからなかったので、適当な写真から距離を測定した。

うちのミシンで該当箇所に穴をあけるのは難しそうだったので、少しずらしてあけることにした。簡単にはずせる針板に、下に13mm、右に35mmのところにφ2.5mmの穴をあけ、M3のタップでねじを切った。M4 だとアタッチメント側の穴がギリギリすぎるので、ミリねじならM3で空けるしかないと思う。

(SMねじというのはミシンねじとかいうインチ系だがUNFでもUNCでもないミシン専用ねじの規格。関わらないことに越したことはない)

取り付けねじ

ノブ付きのM3ねじならなんでもいい。ただ、いまいちいいのが売ってなかったので、オスメスの5mmスペーサーに3Dプリントしたノブをつけてつかっている。

試してみた

Lucky Link8 ミシン 三つ巻き ラッパ 押さえ A11 仕上がり幅 5サイズ セット 工業用 職業用 3mm 6mm 9.5mm 12.5mm 16mm - LuckyLink8

LuckyLink8

4.0 / 5.0

買ったのは2300円ぐらいで 3mm 6mm 9.5mm 12.5mm 16mm の5種類が入っている三つ巻きラッパ。商品ページではミリ表記だが商品本体はインチ表記だった。

3mm にはエッジガイド(?)がない、6mm以上にはある。これがクセモノで、標準の押えだと、3mm はそもそも干渉する部分がなく、9.5mm 以上はエッジガイドが干渉しないぐらい遠くなり、6mm だけどうしても干渉する。

ファスナー押さえなら干渉しないので、最初はこれで試していたが、ラッパ出口から押えまで遠く、全面を押えられないので、ぎりぎりを縫おうとすると、うまく押えられなかった。

結局 2mm 押えだと割と調子が良かった。標準押えが干渉しない他の幅でも、2mm を使ったほうがラッパの出口から押えまでの距離が短いので安定した。

本来は専用の押さえを使うんだと思う。家庭用にはないと思うので、なんらかの妥協がいる。

KAWAGUCHI(カワグチ) ミシンアタッチメント 2mm押え 家庭用(HA) 09-030 - カワグチ(Kawaguchi)

カワグチ(Kawaguchi)

5.0 / 5.0

コツ?

まだ使いこなしているとは言い難いけど、YouTube とかで軽く使いかたを見てもわからなかった点について書いおく

ラッパの入れかた

YouTube で動画検索して見るのが早い。最初は手で巻き、ラッパを外した状態で少し縫う。押さえを下げたまま、そこからラッパを回転させて入れると特に苦労せず勝手に入る。

ラッパの位置調整

これがわからなかったが、ラッパのエッジガイドを布の端にあわせるのが基準だと思う。つまり最初の最初は、針を落としたあと、ラッパを回転させてエッジガイドと布の端をあわせるように左右位置を調整して固定し、それから布を入れる。それから左右に微調整していく

つまり針を落とす位置は任意でいい。ぎりぎりを縫ってもいいし、少し内側を縫ってもいい。少し内側のほうが安定はする。

送りかた

右手でラッパに十分に布の端が供給されるように多少まるめた状態で一定の幅が入るようにする。案外難しい。

左手で送るときあまり左にひっぱるような形になるとラッパから抜けてしまうので、そうならないようにする。

ラッパから押さえまでが遠いほど、右手はしっかりひっぱって布を張っていないと押さえまでに巻きが解けてしまう。

結構練習してみたけどまっすぐにかつ綺麗に巻くのは難しい。

2022年 08月 26日

DreamStudio (Stable Diffusion) に洗濯機と女の子を描いてもらう

手元には入れず、DreamStudio 上で £10 (1700円弱ぐらい?) 払ってしばらく生成していた。ある程度制御できる綺麗な画像ガチャって感じなので中毒性がある。手元に入れたら無限にやりそうなので金払って遊ぶぐらいがちょうどいいかもしれない……

顔を正確に(あるいは正確じゃないがいい感じに)描くのはやはり難しい。クローズアップならそれほど破綻しないけど、雰囲気ある背景と主題みたいな構成で顔を綺麗にする方法は見つからなかった。これ系でうまくいってる感じがするのはだいたい人物が後ろ向き。

顔の要素だと眼が重要なので間接的に眼の色を指定するといい感じになりやすい気がした。

Steps は多くしたからといって良い画像が出てくるわけではなく、こういうイラストなら初回は20~30ぐらいで良さそう。ここから50ぐらいまで増やすと急激に構図が変わることもあって「そうじゃない」となりがち。Steps 増やすと破綻はしにくくなるが没個性がすすむ。特に顔が微妙になっていく……

洗濯機と女の子

誰も描いてなさそうな主題でいくととりあえず描いてもらいたいのがこれなのでいろいろ頑張ったが前述の通りなかなか難しい。人物の描写を細かくしようとすると相対的に弱い洗濯機が無視される。





美少女ガチャ

洗濯機抜きにして、最近流行ってる風の雰囲気の良い環境と女の子を描いてもらおうとしたがむずかしく、結局顔のクローズアップになってしまう。雰囲気はとてもいい

ガチャするときはコストも安くなるし20ぐらいでガンガンやった。好きそうな雰囲気が出たら50ぐらいまで増やし、ベクトルが変化しなければ150ぐらいまで上げてみる、みたいな場合と、50まで増やしてベクトルが変わったら22~30ぐらいを探る場合があった。

良さそうなの出るのは SR ぐらい。そこから Step 加減して良くなるのは SSR









2022年 08月 12日

サーマルカメラ UNI-T UTi260B

UNI-T UTi260B を買ってみた。Aliexpress で4万円ぐらい。スペック的には解像度は 256x192 となっている (IRサーマルカメラの値段は解像度でかなり変わる)。UNI-T はいろいろ測定器作ってるメーカーで、自分の手持ちだとクランプ式の電流計つきテスターもある。

保存される解像度は320x240。

  • -15℃~150℃ (HIGH GAIN) 150℃~550℃ (LOW GAIN)
  • ±2℃ or ±2%

スペック的には -15℃以上だが、冷凍庫の中を見ると -20℃と出てたので全く測れないわけではないっぽい。

フレームレートは25Hzと書いてあるが、そんなにあるように思えない。表示の遅延が500msぐらいあるのでそのせいか?

USB UVC

320x240 の UVC カメラとして PC に認識させることができる。デバイス画面に写っているのがそのままPCに転送される。

つまりOBSとかでリアルタイムに録画することができる。

画像保存

トリガーをひくとSDカードへの保存ができる。320x240 の画面のハードコピーのBMPと、光学カメラのJPGファイルが同時に保存される。

気になるところ

  • 起動が遅い。30秒ぐらい?
  • 表示の遅延がかなりある。
    • 特に光学カメラとIRカメラで遅延に差があるので、重ねて表示すると気になる
  • 画面に出ているOSDはあまり変更することができない。時間を消したりとかができない。
  • 光学カメラの画質はかなり悪い。が気にするポイントではないかも。

気をつけるポイント

IRカメラなので、ガラスや鏡や光沢のある金属表面は測れないので注意しないといけない。ガラス越しの温度は測れない。

UNI-T テスター クランプメーター 非接触型 ミニタイプ 2000 カウント 自動レンジ TRMS AC/DC 100A/600V V.F.C/ゼロ測定機能付き LCDバックライト データホールド 自動シャットダウン 過負荷保護 日本語説明書付き UT210E - UNI-T

UNI-T

5.0 / 5.0

2022年 04月 07日

管理しているドメインをすべて Cloudflare Registrar に移管した

Value Domain → Google Domains → Cloudflare Registrar とわたりあるいた。

nameserver 自体は結構前から Cloudflare に移行していたがレジストラ自体は連続して移管できなかったりしてなかなか統一できなかった。

2021年 12月 11日

ルービックキューブ 5x5x5

初回は解くのに失敗しつつ1時間ぐらいかかったが数日かけて10分→7分→5分台とちょっと縮んできた。3x3x3 が40秒程度なのでどうあがいてもそんなに早くならないが楽しい。

買ったのは Moyu AoChuang 5x5 WR M で、今回は特に急いてもいなかったので Aliexpress で買った。

なぜ5x5x5に

偶数キューブ(4x4x4とか)はOLL/PLLパリティがあってそれぞれ覚える必要があってめんどくさく、かつパリティを判断するために PLL 全手順が頭に入っていないと難しい。

一方で 5x5x5 にはエッジパリティというのがあって専用手順を覚える必要があるが基本的にはそれだけですむ。3x3x3 パートではパリティは出てこないので安心。PLL をすべて覚えていなくても解ける。

PLL全部覚えてないくせに5x5x5やるなという声が聞こえてきそうだがそんなことは知らない。

4x4x4 ができなければ 5x5x5 はできないと書いてあるところがあるけどそんなことはない。

揃えかたのメモ

センター

2x2 2x3 3x3 と拡大してく

最終的には Rw U2 Rw' でだいたい解決する。F面の右センターをU面に入れる操作。Rw U Rw' U / Rw U2 Rw' の手順も覚えればセンターは揃えられる。

最後の2面は Rw (U/U'/U2) Rw' でまずクロスを揃えるのを意識して、コーナーは Rw U Rw' U / Rw U2 Rw' で揃えていけば追加手順は覚えなくても揃う。

後工程でセンターをぶっこわしたときもだいたい Rw U2 Rw' でなんとかなる。

エッジセット

簡単なエッジフリップ (R U R' F / R' F' R) さえ覚えれば基本的に十分に感じる。

オオクサ式(フリースライス)で8エッジまではすんなり入る。エッジフリップと R U R' や R U' R' などの組合せ。D面からの出し入れに慣れていないので持ち替えが発生している。覚えたい。

残りも該当エッジの反転を利用して入れるのが早いっぽい。揃った U 面や D 面のエッジには一切触らず、セットアップ(R2 L2 Uw Uw2 Dw Dw2 の組合せ) → エッジフリップ → アンセットアップ

最後に残ったエッジがパリティ状態だとクソ面倒な手順をまわすハメになる (奇数キューブなので 3x3x3 ステージではパリティは発生しない)

スラッシュで持ち替え & U2 をどっちで回すか自分的にメモ書き
Rw U2 Rw / F2 Rw / F2 / Rt' F2 Rt U2 / Rw' U2 Rw U'2 Rw' U'2 Rw'

2021年 12月 08日

顕微鏡用のスケール


CS マウントな USB UVC カメラとそこそこの倍率のレンズを使って顕微鏡として遊んでいる。スケールがほしくなったので、500円ぐらいのものを買ってみた。直径19mm でスケールは10mm、分解能 0.1mm、ガラス製っぽい。数字の単位は 0.1mm で読みにくい

PET フィルムなスケールは持っていたが線が太くてイマイチだった。今回のはとても線が細い。おかげで肉眼ではほとんど見ることができない。

髪の毛 (約80μm)との比較。

h2o を systemd 管理下にした

徐々に daemontools 依存を外していってるが、とりあえず h2o を systemd に管理にすることにした。どうも daemontools だと annotate-backtrace-symbols のプロセスと親 h2o プロセスが消えずにずっと残って悪さをするので、これも解決できたらなあという気持ち。

以下のように h2o.service を作って配置

[Unit]
Description=H2O HTTP Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/srv/www
ExecStartPre=/usr/local/bin/h2o -c /srv/www/h2o.conf.yaml -t
ExecStart=/usr/local/bin/h2o -c  /srv/www/h2o.conf.yaml -m master
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]
WantedBy=multi-user.target  

ハマったところ

なぜか unix ドメインソケット経由でのバックエンドとの繋ぎこみがうまくいかなくなってしまったので、すべて http 経由に戻した。謎

2021年 11月 19日

電力計交換でBルートサービスが繋がらなくなった (解決済み)

結論

Bルートサービスの「パスワード変更」を申請したらなおった。

追記:最大一週間停止するがほうっておけば設定してくれるらしいので手続は不要なもよう

Bルートサービスを利用中にスマートメーターの取り替え工事があり利用できなくなったが、何か手続きする必要はありますか?(2019年1月18日更新)

基本的にお客さまに行っていただくことはございません。当社にて、取り替え後のスマートメーターに認証ID・パスワード等の再設定を行いますので、設定完了までの間、一時的(最大で1週間程度)にサービスを停止させていただきます。
ただし、通信環境などにより、お客さまにてHEMS機器への認証ID・PWの再設定を行っていただく場合がございます。

https://www.tepco.co.jp/pg/faq/faq.html

経緯

  1. 東京電力PGからの連絡で電力計交換に (定期メンテナンス的なやつだと思う)
  2. もともとスマートメータになっていてBルートサービスも使っていた

Bルートサービスの扱いについて特に何も言われなかったので、一抹の不安がよぎり、接続を確認したら案の定電力量が取得できなくなった。

  1. 2021-11-16 10:00 ごろ (電力計交換・インターフォンで終わりましたと言われる)
  2. 2021-11-16 10:00 ごろ Bルート経由で電力量が取得できず
  3. 2021-11-16 10:17 Bルートサービスの「パスワード変更」申請を出す
  4. 2021-11-18 12:00 ごろ。一時的に旧パスワードで取得可能になる
  5. 2021-11-18 13:16 ごろ。旧パスワードで取得不可になる
  6. 2021-11-19 13:37 ごろ。新パスワードがメールで通知されて取得可能になる

電力計交換のタイミングで機器側のBルート設定が無効になったと思われる。パスワード変更申請をうけて、リモートで機器設定が行われ、一時的に旧パスワードで接続可能になった。そこから1時間ほどでパスワード再設定が行われた。

放っておいて接続可能になった例もあるみたいなので、交換してから数日すると勝手に有効にしてくれる可能性がある。のでパスワード再設定はいらないのかも?

メーター交換はやはり鬼門っぽい。東電PG側でいい感じに連携してほしい。ついでにパスワード変更ではなくBルート有効化処理だけチェックしてくれるシステムにしてほしい。

2021年 11月 16日

WSL2 で USB (usbipd-win)

https://github.com/dorssel/usbipd-win

WSL2 内ではホストの USB デバイスを使うことができないという大きな欠点がある。WSL2 のベースとなる Hyper-V 基盤は USB の仮想化というのがないので、すぐにサポートされることはないだろうという見込み。

そこで USB IP という USB プロトコルを IP に乗せネットワーク経由にする技術がある。usbipd-win はこの USB IP のホストを Windows 上で実現するソフトウェアの1つでOSS。MS の公式 YouTube で紹介されていて知った。

USB IP 系のあれこれはドライバの関係で secure boot と相性がわるかったりするが…… これはどうだろう。現状よくわかってない (Secure Boot していないので)

インストール

winget install --exact dorssel.usbipd-win

この状態で Administrator 権限の PowerShell をひらき、usbipd.exe list が実行できることを確認する

$ sudo /usr/lib/linux-tools/5.4.0-77-generic/usbip list --remote=172.18.48.1
Exportable USB devices
======================
 - 172.18.48.1
        4-3: STMicroelectronics : ST-LINK/V2 (0483:3748)
           : USB\VID_0483&PID_3748\6&19CA3885&0&3
           : (Defined at Interface level) (00/00/00)
           :  0 - Vendor Specific Class / Vendor Specific Subclass / Vendor Specific Protocol (ff/ff/ff)
 lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0483:3748 STMicroelectronics ST-LINK/V2
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

一応 認識して使えてはいるっぽい。

 sudo openocd -f interface/stlink-v2.cfg -f target/stm32f0x.cfg
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
none separate
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : clock speed 950 kHz
Info : STLINK v2 JTAG v34 API v2 SWIM v7 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 3.262724
Warn : UNEXPECTED idcode: 0x2ba01477
Error: expected 1 of 1: 0x0bb11477
in procedure 'init'
in procedure 'ocd_bouncer'

チェックするポイント

  • usbipd attach するのはホスト側
  • Administrator 権限の PowerShell (またはコマンドプロンプト) で実行すること
  • Window Defender Firewall で詰まる。usbipd wsl attach または Ubuntu 側で usbip attach --remote=... したときに刺さる場合、Firewall にひっかかっている可能性がある。mmc.exe で usbipd.exe がブロックされていないか確認する

usbipd.exe のデバッグ方法

うまくいかないときにどうやってデバッグするか。原因をさぐるか。

Visual Studio Community でいいので VS で .sln を開けばビルドできる。既に usbipd をインストール済みの場合、windows のサービスで起動している usbipd は止めておく。

Administrator 権限の PowerShell でサーバ側 (サービスとして起動しているプロセスと同様)

usbipd.exe server

さらに別タブで

usbipd.exe list

とすればいい。

WSL2 内からは

sudo /usr/lib/linux-tools/5.4.0-77-generic/usbip list --remote=172.18.48.1

のようにホストの IP アドレスを指定して usbip コマンドを実行する。ホストの IP アドレスは /etc/resolv.conf の nameserver を見るのがてっとりばやい。

usbipd wsl ... コマンドは wsl 内でいい感じに usbip コマンドも実行してくれるというだけ

エラー (workaround が適用ずみ)

xCORE USB Audio 2.0 という audio device が

PS C:\Users\test> usbipd list
Unhandled exception. System.AggregateException: One or more errors occurred. (An item with the same key has already been added. Key: [1, UsbIpServer.UsbConfigurationDescriptors+UsbConfiguration])
 ---> System.ArgumentException: An item with the same key has already been added. Key: [1, UsbIpServer.UsbConfigurationDescriptors+UsbConfiguration]
   at System.Collections.Generic.TreeSet`1.AddIfNotPresent(T item)
   at System.Collections.Generic.SortedSet`1.Add(T item)
   at System.Collections.Generic.SortedDictionary`2.Add(TKey key, TValue value)
   at UsbIpServer.UsbConfigurationDescriptors.AddDescriptor(ReadOnlySpan`1 descriptor) in D:\a\usbipd-win\usbipd-win\UsbIpServer\UsbConfigurationDescriptors.cs:line 96
   at UsbIpServer.ExportedDevice.GetConfigurationDescriptor(DeviceFile hub, UInt16 connectionIndex, Byte numConfigurations)
   at UsbIpServer.ExportedDevice.GetDevice(SafeDeviceInfoSetHandle deviceInfoSet, SP_DEVINFO_DATA devInfoData, CancellationToken cancellationToken) in D:\a\usbipd-win\usbipd-win\UsbIpServer\ExportedDevice.cs:line 202
   at UsbIpServer.ExportedDevice.GetAll(CancellationToken cancellationToken) in D:\a\usbipd-win\usbipd-win\UsbIpServer\ExportedDevice.cs:line 239
   at UsbIpServer.Program.<>c.<<Main>b__19_9>d.MoveNext() in D:\a\usbipd-win\usbipd-win\UsbIpServer\Program.cs:line 234
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.<>c__DisplayClass79_0.<OnExecute>b__0()
   at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
   at UsbIpServer.Program.Main(String[] args) in D:\a\usbipd-win\usbipd-win\UsbIpServer\Program.cs:line 555

usbview.exe による

       ---===>Device Information<===---
English product name: "xCORE USB Audio 2.0"

ConnectionStatus:
Current Config Value:              0x01  -> Device Bus Speed: High (is not SuperSpeed or higher capable)
Device Address:                    0x0A
Open Pipes:                           2

          ===>Device Descriptor<===
bLength:                           0x12
bDescriptorType:                   0x01
bcdUSB:                          0x0200
bDeviceClass:                      0xEF  -> This is a Multi-interface Function Code Device
bDeviceSubClass:                   0x02  -> This is the Common Class Sub Class
bDeviceProtocol:                   0x01  -> This is the Interface Association Descriptor protocol
bMaxPacketSize0:                   0x40 = (64) Bytes
idVendor:                        0x20B1 = XMOS Ltd.
idProduct:                       0x000A
bcdDevice:                       0x06C5
iManufacturer:                     0x01
     English (United States)  "XMOS"
iProduct:                          0x03
     English (United States)  "xCORE USB Audio 2.0"
iSerialNumber:                     0x00
bNumConfigurations:                0x02
*!*CAUTION:    Most host controllers will only work with one configuration per speed

とでていてこれが問題らしい。#61 というパッチを送ってとりあえずなおしてもらった。