ガレージ暮らしのトライタム

プログラムやツールの解説や技術を公開する場所

サリエンシーマップを使って絵の分析をしてみる

これは何?

画像解析の一つに「サリエンシーマップ」というのがあり、画像内の顕著性を可視化することができます。
その解析を実際にイラストに適用し、絵の修正に活かせるか?という検証記事です。

サリエンシーとは?

すごいざっくりだと「パッと見目立つ場所」という感じだと思います(正直あんまりわかってない)
日本語では顕著性、と呼ぶらしいです。

実践

環境

mac book pro 2019
python 3.11.7

準備(pythonでコード記述)

以下サイト様で記述されているコードを参考に、terminalからコマンドを打つことで解析画像を出力できるようにします。
data-analysis-stats.jp



OpenCV + pythonでサリエンシーマップ出力

使い方

pyファイルと画像ファイルを同じ階層に置いたのち、terminalでコマンド記述して出力します

# python3コマンドではないのは、aliasを独自に設定しているため
# 必要あれば先頭のコマンドはpython3で代用お願いします
$ python output-saliency.py IMG_9256.PNG FG
# コマンドが正しく通れば同じ階層に「th_output_only_saliency_IMG_9256_FG.PNG」という名前の解析画像が出力される
$

実際に解析してみる

今回はFine Grainedのみ試してみます。
こちらは人の視覚で知覚されやすい状態をアルゴリズム的に再現されているようです。(先述の参考URL流し読み)

実験は「ラフ、線画清書」の2枚を使います。

ラフ

清書(ベタ塗り)

以下出力結果です
Fine Grained解析(ラフ)

Fine Grained解析(清書)

結果を見て考えてみる
  • ラフ・清書問わず目周り・着物周りに強い顕著性が出ているのがわかる(強い明度差)
  • ラフのほうが顔を囲むように顕著性が出ている。元絵でも清書よりラフのほうが顔の印象が強いように見える
  • ラフの顕著性がラフっぽいバラけ方をしていたので、清書してみた。清書で細かいラフ特有の顕著性は少なくなったが、顕著性がまとまった結果で絵が良くなったとは言えない
  • 顕著性のコントロールが絵の良さにつながるかは正直分からない。が、コントロールで良くなる可能性もあるので色々試して解析かけても面白そう

終わりに

絵では視線誘導とか注目する箇所とかで説明・表現されていますが、画像解析ではサリエンシーマップという形で解析できるようになっています。
「サリエンシーマップ的な評価が高い」が「絵として見栄えが良い」となる訳ではありませんが、絵を内省するための一つの考え方としては面白いのではないかと思います。

「見せたい箇所にサリエンシーが強く出ているか?」や「賑やかな印象にするため、各所にサリエンシーができているか?」みたいな軸で解析をするのが考えられます。

「作って学ぶゲームプログラミング Unity まるっと入門 Unity6完全対応」を執筆しました

これはなに?

僭越ながら、機会に恵まれUnity入門書を執筆しました。

www.socym.co.jp

この記事を読めばオススメできる読者層、本書の概要を知ることができます。

想定する読者

本書は以下の読者想定で執筆を行っています。

  • C#の知識があるがUnityには初めて取り組む方
  • これから実際に業務でUnityに取り組む方
  • ゲーム業界を志望している方

コードの記述はC#を利用していますが、Unityの説明が主です。
C#言語仕様などC#自体への説明はやや少なめなので、C#も経験が浅い、という方は入門書向けの書籍が別途あるとよい内容になっています。

それでも全くの初心者でもダウンロードしたデータを使って学べるようになっているのでお気軽にお手に取ってみてください。

本書目次

本書はUnityの説明・インストールからはじまり、4本ほどゲームを作る構成になっています。
ExtraではUnityの学習とは関係が薄いものの、ゲーム開発をする上で特に抑えておきたいトピックを置いています。


本の特徴

本書では単に「Unityの使い方を学ぶ」というより「Unityを通してゲーム開発を学ぶ」ような内容になっているのが特徴です。

Unity6.3対応

執筆に伴って新しい方が良いのでUnity6.3に対応しています。
ちょっと古い書籍の内容次第では新しいUnityではエラーが起きる変更が入っていますが、それを加味して新しいUnityでもエラーが起きずに進められるようになっています。

ゲーム開発を追体験するようなステップになっている

本書では「一回設定したけど、微調整してパラメータを変える」というような一見二度手間に思えるようなステップが随所に存在しています。
これは「ゲーム開発の進行を模倣」して進めているためです。

ゲーム開発は面白さの追求のために試行錯誤する時間がどうしても必要であり、その部分もUnityを学びながら追体験できるような進行が散りばめられています。

実際にUnityでゲーム開発を仕事にしている人間が執筆している

筆者は執筆現在でUnityを利用してゲーム開発をしています。
その開発経験からパフォーマンスの話、開発を進めやすくするためのTips、ゲームを作るためのプログラミング「以外」の話など「ゲームを作るうえで欠かせない諸要素」が含まれています。

一番特徴的なのはExtraに含まれている「セーフエリアへの対応」「Unityユーザーの生成AI活用術」ではないでしょうか?
Unityを学ぶ本筋とは離れますが、昨今のゲーム開発を進めていく中で重要だと感じるトピックを取り上げています。

さいごに

これは「Unity2021 3D/2Dゲーム開発実践入門(株式会社ソシム, 2021)」の内容をベースに執筆されています。
www.socym.co.jp

辛抱強く監修に付き合ってくださった吉谷さん、締切ギリギリまでお待たせして申し訳ないと思いつつギリギリまで待って下さり編集進行をスムーズに行って頂いた平松さん。
書籍に向けてデザイン作成、挿絵作成、アセット作成、校正・印刷をしてくださった方々。
さまざまな方の助けを借りて本書は作成されました。

この場を借りて感謝申し上げたいと思います。
本当にありがとうございました。

アスコンPC(at-08)のwindows update中にwindowsが起動しなくなったときの対応備忘録

これは何?

at-08をwindows updateしたとき、上手くアップデートされず再起動のタイミングから、電源投入時にBuild-in EFI Shellが表示されるようになってしまった。
原因を特定し、電源投入から1回でWindowsを起動できるようにトラブルシューティングして、解決するまでの記事。

概要

原因

BIOS > Boot > Boot Option Prioritiesから、
Windowsを起動するための「Windows Boot Manager」が消えて選択できなくなっていた。
windows updateの最中にNVRAMが変に書き換わった?

対策

windowsコマンドプロンプトはアクセスできたので、そこからBoot周りの設定を手動で調整した

1. オプションの選択 > トラブルシューティング > 詳細オプション > コマンドプロンプト

1-1. 今回は「BIOS > Save & Exit > Boot Override > Windows - Push Button Reset」から回復モードへアクセス

2. bcdeditコマンドを使ってファームウェアのブートマネージャーのdisplayorderを一度removeして、addfirstした

# コマンド
# 状況の確認
# ファームウェアのブートマネージャー、Windowsのブートマネージャー、ファームウェア アプリケーション(UEFI: Built-in EFI Shell)1つが居た
> bcdedit /enum firmware

# 一度bootmgr削除する
> bcdedit /set {fwbootmgr} displayorder {bootmgr} /remove

# ブートマネージャーから{bootmgr}が消えているのを確認
> bcdedit /enum firmware

# ブートマネージャーの一番目に{bootmgr}を設定
> bcdedit /set {fwbootmgr} displayorder {bootmgr} /addfirst

# ブートマネージャーの1番目に{bootmgr}が設定されているか確認
> bcdedit /enum firmware

3. bootrecコマンドを使ってBCDファイルを再生成した

# コマンド
# 「Windows のインストールとして認識された合計数: 0」と言われるのを確認
> bootrec /RebuildBcd
Windows のインストールとして認識された合計数: 0

# diskpart の起動
> diskpart

# ボリューム一覧の確認
DISKPART> list volume

# FAT32 フォーマット形式のvolumeを選択(今回はVolume2だった)
DISKPART> select volume 2

# 選択中のボリュームにドライブレターを割り当て
# なんでもよいらしいので、参考文献に倣ってVにアサイ
DISKPART> assign letter V
DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。

# diskpart終了
DISKPART> exit

# BCDファイルあるboot\に移動
> cd /d V:\EFI\Micrsoft\boot

# BCD ファイルをバックアップ向けにリネーム
> ren BCD BCD.bak

# BCD ファイルを再作成
> bootrec /RebuildBcd
Windows のインストールとして認識された合計数: 1
[1] F:\Windows
インストールをブート一覧に追加しますか? Yes(Y)/No(N)/All(A):Yes

# eixtを叩いてコマンドプロンプトを終了して「オプションの選択」画面に戻る
> exit

4. 「オプションの選択」画面に戻ったら「PCの電源を切る」を押して一度電源落とす。

電源ボタンを押して電源投入。Escを連打しBIOSモードに移動。
Boot > Boot Option Priorities > Boot Option#1に[Windows Boot Manager (ストレージ先)]が設定されていれば作業完了。

問題無ければ適当にBIOS画面から抜けたり、 Save & Exit > Boot Overrideから[Windows Boot Manager]を選択してWindows起動すれば良い。

終わりに

最低限のコマンドしか書いていないので、コマンドの説明やBuild-in EFI Shellの詳細について知りたい場合は参考文献に飛んでください。
特にコマンドに関しては参考文献の方がスクショがあって把握がしやすいです。

同人即売会でデジタルサイネージを行うまで

これは何?

同人即売会で売り子アプリや動く展示物が欲しいとき、いろいろなハードルがあり、
そのハードルを実践を通して見つけて、解消していく備忘録的な記事です。

ここでは主に「ポータブル電源を通したハードウェア構成・搬入について」記述していきます。

概要

何作ったの?

  • Live2Dでタップ反応する売り子アプリ
    • webカメラで顔認証されたら挨拶する機能
      • マスク・立ち位置の関係でほとんど有効ではなかった印象

動作環境

  • (PC)Nuxbox G5
    • OS: Win11Pro
    • CPU: N97
    • RAM: 12GB
    • SSD: 512GB
  • (モニター)エプソン LT22W81L
    • 21.5inch

開発環境

  • Unity6000.0.12b
    • Cubism 5 SDK for Unity R2
    • OpenCV for Unity 2.5.9
  • Live2D Cubism5.0.04
  • ClipStudio

準備

準備/購入

  • ミニPC何買った?
    • Nuxbox G5(N97, 12GB)
      • 楽天でクーポン+ポイント使って2万で買った
  • モニターはどう運ぶ?
  • モニター周りの周辺機器で何か追加で買った?
  • ポータブル電源何買った?
  • どう運ぶようにした?
    • 手搬入。キャリーカートを使った
  • キャリーカート何買った?
  • 総計いくらくらいかかった?
    • 機材約15万、頒布物約5万
      • ポータブル電源高かった

当日

開催前

  • 手搬入だと荷物が増える
    • 電車内だと結構荷物が多いので迷惑しやすい
    • 車輪径が大きいキャリーカートだと電車とホームの隙間を無視できる
      • 場所によりけり前提。今回は大丈夫だった

  • キャリーカートのタイヤ径が大きいと荷物重くても楽
    • このメリットを享受したくてタイヤ径大きいのを選んだ
  • キャリーカートのタイヤ径が大きいと小回りが効かない
    • よく見るサイズのキャリーカートに比べると細かい操作が難しいので、電車内で他人にぶつかりやすい
    • 引いて運ぶより、自販機の飲み物運ぶみたいに手前で押して進める方が細かい操作できた気がする
  • 当日机下に置く荷物が増える
    • 電源の空箱、モニター運ぶためのバッグ、キャリーカートetc...
    • コミケは横90cmのサークルスペースだけど、場合によっては入らないかも
  • ソロ活動だったので、設営に1時間かかった
    • レイアウトをその場で決めたので、その試行錯誤のぶんタイムロスが少しある
    • 当日の挙動が微妙でトラブルシューティングして結局1時間半、会場直前まで何かしてた

開催中

  • 目を引くのには十分良いかも
    • 話題作りには良い印象
    • 反面長く持たせる面白さは無い(即売会に長く居座る必要もないのでデメリットにはならないかも)
  • 写真撮ったり、褒めてくれる方はチラホラいた

開催後

  • 最終的に15%電源消費して終了した
    • 設営 ~ 終了 ~ 撤収...5~6時間くらい?

  • 片付けに45分くらいかかった
    • 当日帰りは豪雨で、荷物を保護するためのビニール包みとかで+15分

課題

  • 搬入には車が欲しい
    • 次点で前日郵送。が開催中の空き箱とかの置き場所に困る可能性
  • 引きこもりだったので翌日筋肉痛になった
  • 売り子アプリ実践のために新刊のページ数が少なくなった
    • 時間と労力を売り子アプリの方に寄せたので当然
  • 設営・撤収時間が各々1時間以内なら、手伝いしてくれるメンバーが欲しい

まとめ

  • こういう「即売会でモニター使って展示(アピール)」という想定出来そうなアイデアを実践して、課題の発見と解消を行った
    • 品質はさておき、実践できてよかった
  • 重い・かさばる荷物は車が欲しくなる
    • 遠方での手搬入はできるイメージが湧かない(元気が無い...)

リファレンス(実測)

ここは「N97(TB制御) + モニター」という結論に至るまでの情報収集に関する項目です。
実践するときに一番ここが重要かもしれないので、一緒に記載しておきます。

(サイネージの実践で「消費電力にまつわる情報収集」が一番時間かかったかもしれない)

計測方法

計測結果

モニター

エプソン LT22W81L

16W前後で遷移
単体33hour耐えれる

PC

windowsPC(mouse F4-I5U01CG-A?/記憶が曖昧)

インチ: 15.6(14?)
cpu: i5-1240p(TDP20~28W, max64W)
https://www.intel.co.jp/content/www/jp/ja/products/sku/132221/intel-core-i51240p-processor-12m-cache-up-to-4-40-ghz/specifications.html
メモリ: 32GB

30~35Wあたりで遷移(常にACに繋がっていて満充電状態)
単体18~20hour耐えれる

Mac book pro(late 2019)

インチ: 13.3
cpu: core-i5
(多分 8257u/TDP15W)
https://www.intel.co.jp/content/www/jp/ja/products/sku/191067/intel-core-i58257u-processor-6m-cache-up-to-3-90-ghz/specifications.html
メモリ: 16GB

充電開始(0%~)...50~55wで遷移。10hour耐えれる
充電+開く(0%~)...60~65wで遷移。8hour耐えれる

充電100%...電源落とし中0W
充電+開く(100%)...30W~65Wで遷移。23~11hour耐えれる

やはり充電が必要だと、その分電源からの供給量が多い
満充電でも開くとかなり電力持っていかれるので、サイネージには不向きだと分かる

リファレンス(web上)

Unityで制作したアプリを動作させるという意味ではそこそこクロックが必要かも。
が、Nシリーズでも3.5Ghz前後なので十分かもしれない
ネットでの調査ではN95, 100は20~30Wが上限っぽい。
30W消費すると500Wポータブル電源ではおよそ20時間弱持つ計算
60W消費だと8時間程度しか持たないので、上限は「総計50W(約10時間)」がいいのかな?(サイネージの展開時間次第か)

(Pコア入ってるCPUだと60W行きそうなので、消去法的にNシリーズが選定対象になりそう)


TDPは定格クロック計算が大体なので「USB PD対応」と書かれていてもCPU次第ではTBかかって死ぬ可能性が高い
- 参考文献:USB PD給電で動かせる、Core i7-12650H搭載の超小型PC「Minisforum UN1265」を試す

サイネージ向けCPU検証

Pコア?Eコア?

intel第12世代(Alder-Lake)から採用されているマルチコアアーキテクチャ

N100とかN95TDP表示が低いはEコアしか乗って無いからかもしれない。
TDPはベースクロックで計算されるので、ゴリゴリTBするようなケースならどんどん消費電力は上がる CPU仕様表の「TDP」はいったい何を意味しているの?

OSではP/Eコアの区別を性能・消費電力の観点から振り分けているっぽい

上の例では、perf_capは CPU#4 > CPU#0 > CPU#8 となっており、ee_capは CPU#8 > CPU#0 >= CPU#4 となっている。
これらの値を見ると、CPU#4が最も性能が高いが、消費電力が高いことがわかる。
一方、CPU#8は性能は低いが、消費電力が低いことがわかる。
この場合、性能を優先したい場合はCPU#4を、電力効率を優先したい場合はCPU#8を選ぶのが効率的である。

なお、HFIテーブルでは、P-coreとE-coreを区別せずに、同じテーブルで表現している。
このため、OSはP-coreとE-coreを区別することなく、HFIテーブルの情報でプロセススケジューリングを効率化できる。

OSはどうやってP-coreとE-coreを使い分けているのか

i3-1215Uとi3-305Nの違いは?世代が違う?

同世代。ファミリーが異なる(Alder-Lake, Alder-Lake-N)
Nと付いているものは「Eコアオンリー」。そうでない(今まであったU/Fとか)は「Pコア・Eコア」混在のCPU
https://ja.wikipedia.org/wiki/Alder_Lake%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5

Unity2021での.meta (visible meta files)項目箇所

概要

Unity2019などでは「Assets > Project Settings > Editor」にVersionControl > Modeという項目がありました。
ここで(主にgit管理のための)metaファイルの設定が行えていましたが、今は設定が別の箇所に引越しました。

変更先は
Assets > Project Settings > Version Control > Mode
になっています。

検証環境

Trelloでチーム作成後、パーソナルボードに新規ボード追加できない問題と対応方法

これは何?

Trelloでチームを作成した後、パーソナルボードに新規ボードを作成しようとしてもチームでしか追加できなくなった問題の解説と、問題の回避方法について述べています

[2020年12月6日追記]
Androidアプリの2020.15でできないことを確認しました。

どうやらパーソナルボードが廃止されるゆえの挙動のようです。
これからは個人チームを作成してボードを作成する方が良さそうです。
www.ricksoft.jp
[追記ここまで]

続きを読む

Mobile Notificationsのアイコン設定でSpecified texture can't be used because: Read/Write is not enabled in the texture importer.が出てくる

これはなに?

Unity製のローカル通知機能でアイコンを設定するときに出たエラーとその対策です
エラーは以下です
Specified texture can't be used because: Read/Write is not enabled in the texture importer

続きを読む