#author("2022-09-23T16:41:03+09:00","","")
#author("2022-09-23T17:00:11+09:00","","")
[[22_Yanagi]]

*PythonとかProcessingとかを使ったいろいろ [#a363d2e1]
研究の内容とずれてる感じがしたのでこっちに移行させました&br;

-エージェント((仮))を作ってみた[+合成音声に挑戦してみたけど無理だった](2022春課題)&br;
〇立ち絵を作ってアニメーションを作る&br;
kritaでpsdを作成→Anime Effectで取り込んでコマ打ちして作成&br;
コマ打ちは全て手動で設定。自身なりに生きているような表現を頑張ってみた&br;
大まかな動きは移動・回転・拡縮で、髪や腕の細かい動きはボーンとメッシュを組み込んで表現&br;
Anime Effectはボーンの設定が大雑把すぎて細かい表現(手先とか関節とか)ができない&br;
#ref(春課題-作業風景1.png)&br;
L2Dのようなメッシュ自体を動かしてアニメーションを制作するか&br;
プログラム側で自動的に動かす方法を用いるほうがいいかも&br;
&br;
△プログラム上でアニメーションを再生してあるアクションを条件に切り替える&br;
アクションがない場合はneutralを、何らかのアクションが実行された場合はsmileを表示しようとした&br;
neutralを連番pngにして配列に放り込んで表示することはできたが&br;
アクションによる分岐をどのように組み込めばいいかわからなかったので後回し中…&br;
#ref(春課題-作業風景2.png)&br;
(matplotlibでこういったイラストgifを動かすのが間違っている気がしなくもない…)&br;
tkinterを用いてGUI内にmatplotlibのグラフを表示する手段はあるのでそれを応用できるかもしれない&br;
pythonの実行方法はメモの方にだらだら書いていたUbuntu(Linux)経由のやつ&br;
合成音声+言語処理を使わない限りpythonにこだわる必要もないのでprocessingで再挑戦する&br;
&br;



-可愛いモザイクを作ってみた(2022年 オンライン合宿)&br;
上述しているProcessingとの連携だったりL2Dの使い方がなんとなくわかった+いろいろ学べた&br;
成果物(作るにあたってのサンプル含め500MBほど):https://drive.google.com/file/d/1TEPptWf9HtZBL3g_0qKPeV5LcgAMhvV5/view?usp=sharing&br;
(コメントを残してるのでコード見てもらえればなんとなく仕組みはわかるはず?)&br;
#ref(合宿-作業風景.png)&br;
pythonの実行はAnacondaを使ってます(Ubuntuはカメラ関係が上手にできなかった…)&br;
Arduino刺していないとprocessing側のportでエラーが出て実行できないので、その際は当該箇所をコメントアウトしてください&br;

&br;
 ・視点の転換とか活用シーンの想定とか(適当に理屈づけしただけ)&br;
  モザイク=情報を遮断する壁→情報を取捨選択するフィルターに&br;
  匿名性を維持しながらもその人の感情や個性を表現する&br;
&br;
  →話しやすい環境を生み出すことで&br;
   コミュニケーションを円滑にし、その人の個性もより引き出せる(?)&br;
--モザイクを使う側の利点&br;
社交不安症(ex.対人恐怖症)や自分の顔にコンプレックスがある人&br;
エージェントやボードによって性格・個性を表現しながらもコンプレックスを隠すことができる&br;
エージェントがいることで上側に視点が誘導される→目を合わせることが苦手な人でも話しやすい&br;
&br;
--モザイクを使われる側の利点&br;
自閉症・HSP(感受性が極端に強い人)&br;
与える情報を制限(基本喜怒哀楽だけを表出)することで負荷が軽減される&br;
&br;
※keeponというエージェントを用いた実験においての仮説を参考にしてます&br;
 自閉症や知的障害のある子たちがコミュニケーションが上手にできないのは&br;
 健常児が持っているフィルターがないため(情報の取捨選択ができずパンクする)&br;
 keeponとのインタラクションでは与えられる情報量が限られているため&br;
 フィルターがなくても情報を咀嚼することができ、コミュニケーションができた&br;
&br;

 ・仕組み&br;
--python側の処理(私の領分ではなかったのでざっくりと)&br;
動画からの顔認識・感情推定&br;
使ったライブラリ:opencv-python,deepface&br;
参考:https://algorithm.joho.info/programming/python/opencv-sample-code-py/ &br;
 ↓&br;
動画からの手の移動量推定&br;
使ったライブラリ:mediapipe&br;
参考1:https://qiita.com/akira2768922/items/c660129cc45cce384e90 &br;
参考2:https://b3s.be-s.co.jp/nocategory/4527/ &br;
 ↓&br;
座標とか感情値とか手の移動量との送信&br;
使ったライブラリ:python-osc &br;
参考:https://www.eqseqs.work/post/python-osc/ &br;
送った値:[エージェントのx座標/y座標/感情ラベル/感情値/手の移動量x/y]&br;
&br;
--processing側の処理(私はアニメーションを担当しました)&br;
python側からの値の受信+Arduinoからの値取得&br;
使ったライブラリ:oscP5,Arduino(Firmata)&br;
oscP5の使い方は上のURL参照。Firmataの使い方はSAさんにお聞きして実装しました&br;
 ↓&br;
アニメーションの動作&br;
使ったライブラリ:gifAnimation(Githubから手動インストールする必要があります)&br;
URL:https://github.com/extrapixel/gif-animation/tree/3.0 (3.X用) &br;
作ったアニメーション3種(neutral.gif(loop) / surprised.gif / pleasure.gif)を &br;
与えられた値によって切り替える&br;
&br;
ニュートラルをループ再生しつつ、値が閾値を超えた場合のみアニメーションを変化 &br;
・手の移動量が閾値(200)を超える=動きが大きい=驚く&br;
・圧力センサが閾値を下回る(初期255,閾値200=頭をなでている=嬉しい&br;
(※草案時はセンサをぬいぐるみに付けて、実際に頭の上に乗せようという話でした)&br;
&br;
ユーザーとエージェント間をインタラクションで繋ぐことで親近感がうんぬんかんぬん…&br;
&br;
アニメーション自体の作成はペイントツール(krita,Clipstudio)+Live2D cubismで制作&br;
参考:https://docs.live2d.com/cubism-editor-tutorials/top/?locale=ja &br;
&br;

 ・草案(いろいろ仕様変更してます)&br;
#ref(合宿-草案1.png) 
#ref(合宿-草案2.png)&br;





*シロワニさんのつくよみちゃんトークソフトの入れ方 [#a363d2e1]
シロワニさんのつくよみちゃんトークソフト : https://github.com/shirowanisan/tsukuyomichan-talksoft &br;&br;
下記のWSLをしなくてもAnacondaの方で出来ました&br;
WSLの方はカメラ等USB機器周りの設定がややこしいですし、ディレクトリの制御も面倒なので、素直にConda使った方が楽です&br;
実装するにあたっては①conda上でC++を使えるようにすること ②pythonのverを3.7.5にすること の2点に気を付けていただければ&br;
後はgithubからzipをDLして展開し、そのディレクトリを開いてpip install -r requirements.txtで必要ライブラリのDLができると思います&br;
&br;
①はCmakeというのにパスを通せばできると思います&br;
参考(Visual StudioのCmakeを使います):https://teitoku-window.hatenablog.com/entry/2021/09/17/004040 &br; 
②は仮想環境作成時にver指定するのがいいと思います&br;






*WSL環境の構築 [#a363d2e1]
windows10でcondaを使って冬の課題とかテキストマイニング実習の課題をしようと思っていたのに、Mecab-ipadic-neologdが使えないしnumpy,scipyあたりでなんか競合エラー起きているし、偶然出会った「シロワニさんのつくよみちゃんトークソフト」がwindowsでは使えないと書かれていて(゚Д゚)ハァ?となったので、Mecab-ipadic-neologdのGithubに書かれているようなWSL環境を構築しようとしたら沼ったので備忘録的な感じで残しておきます。これが私の冬の課題…&br;
使い道はたぶんないです。普通にMacやLinuxのPC使うなりcondaのエラーを修正したほうが楽…

いろいろなサイトを見て数日かけてやっと形になったので初めての方はどうやったかあやふやです&br;
また、簡単な動作確認をしただけなのできちんと導入できているかはまだ未知数です

-WSLを有効にする&br;
WSLとWSL2があるらしいですが、WSL2のほうがよさそうなのでそっちで導入しました

--1.コントロールパネルからWSLを有効にする&br;
コントロールパネル>プログラムと機能>Windowsの機能の有効化または無効化を選択し&br;
『Linux用Windowsサブシステム』と『仮想マシン プラットフォーム』にチェック&br;
OKを押すと再起動を要求されるのでそれに従う&br;

--2.Powershellを管理者権限で開いてwsl2の起動?とかとか&br;
windowsマークを右クリック>windows PowerShell(管理者)を起動&br;
[wsl --install]を実行する(※[]は無視してください)&br;
ただこの更新にはカーネル更新プログラムパッケージが必要&br;
入ってないとこのURLからダウンロードしてって言われるのでそれに従う&br;
&br;
Microsoftのページにはディストリビューション(後述)も一緒にインストールされるって書いていますが手動でした気がします。&br;
wsl2への変更も手動でしましたし、なんか間違えてそうですね…どうやったか覚えてない…&br;

---2-1.Linuxを動かすやつ(ディストリビューション)をダウンロードして簡単な設定とか&br;
Ubuntuっていうのを使いました。Microsoft storeから検索して入手できます&br; 開くとインストール作業があった後Linuxで用いるユーザ名とパスワードの設定・再確認が求められるのでそれに従う。このユーザ名とパスワードは今後の作業で使います。&br;
なお、パスワードを打っても表示はされません。でもきちんと入力されてはいます

---2-2.ディストリビューションがきちんとwsl2で動作してるかPowershellから確認&br;
windows Powershellを開いて[wsl -l -v]を実行すると&br;
NAME STATE VERSION &br;
Ubuntu Stopped 2     …みたいなのが表示されるはずです&br;
VERSIONが2になっていたら大丈夫。もしVERSIONが1の場合は以下のコマンドを実行&br;
[wsl -set-version Ubuntu 2]

>参考:https://docs.microsoft.com/ja-jp/windows/wsl/install
>   https://www.pc-koubou.jp/magazine/40465

-Ubuntuでpython3を使えるようにする&br;
参考ページの仮想環境の有効化までを順にしていけば大丈夫です&br;
sudoでpython環境インストールをした後はテキストマイニング実習でやった方法と同じなので割愛します。以下では個人的に詰まった点をピックアップします

>参考:https://qiita.com/sireline/items/3c97a0c266431ac5b2ea

--ディレクトリにどうやってアクセスすればいいかわからない&br;
→CIFSを利用して共有フォルダを作ってwindow側のファイルをLinux側でも扱えるように

---1,windows側で共有フォルダを作る&br;
ただ作るだけだと共有相手がEveryoneになってるので&br;
プロパティ>詳細な共有から変更>このフォルダを共有するにチェック&br;
>アクセス許可>ユーザーを追加しフルコントロールにする

---2.Linux側でその共有フォルダをマウントする場所を作る&br;
mkdirで適当な場所にフォルダを作る&br;
treeでLinuxの構造を確認してから作った方がいいかもです(要インストール)&br;
例)mkdir winmount → /User/(user名)/winmount にフォルダができます
>(使い方:https://dekiruengineer.com/engineer/linux_tree_command/)

---3.CIFSをインストールしてフォルダ同士をつなげる&br;
[sudo apt install cifs-utils]を実行しCIFSをインストールして以下のコマンドを実行&br;
sudo mount -t cifs -o username=[winのユーザ名],password=[winのパスワード],uid=[linuxのユーザ名] //[コンピュータ名orIPアドレス]/[win側の共有ファイル] [Linux側の共有ファイル]&br;
例)sudo mount -t cifs -o username=winUser,password=PassWord,uid=linUser //192.160.1.5/mount ./winmount&br;
&br;
※上記は手動マウントの方法。起動時に毎回しないとダメ。自動的にしてほしい場合はfstebファイルを編集する&br;
 自動化させる場合はIPアドレスを固定しないとダメかも。WSLのIPアドレス使えばいけるのかな…?
>参考:https://codeaid.jp/blog/linux-windows-share/

--Matplotlibのshow()が使えない&br;
→LinuxのGUIにwindows側が対応していないのが原因&br;
 VcXsrvをインストールしUbuntuのDISPLAY設定を変えることで表示ができた&br;

---1.VcXsrvのインストールと設定&br;
公式ページからダウンロードしてインストールして実行。基本的に設定を変える必要はない&br;
ただExtra settingのAdditional parameters for VcXsrvに[-ac]って入れておくと良き&br;
※ネットワークを使う(?)のでファイアウォールでパブリックの通信を許可しておかないと動いてくれない

---2.UbuntuのDISPLAY設定を変更する&br;
Ubuntuを開いて [sudo vi .bashrc]を実行&br;
.bashrcの中身が表示されるので一番下の行に以下の分を挿入&br;
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0&br;
挿入したら保存してUbuntuを再起動して変更させる&br;
&br;
(sudo) vi [ディレクトリ名]&br;
…そのディレクトリを開いていろいろ書き込みができる。対応したディレクトリがない場合は新たに作る&br;
a(入力モードに切り替え)とEsc(コンソールモードに切り替え)と:w(保存)と:q(閉じる)だけ使えれば大丈夫&br;
>(使い方:https://qiita.com/pe-ta/items/0510bee10bcfd88afeee)
>参考:https://qiita.com/ryoi084/items/0dff11134592d0bb895c

--python3でMecab-ipadic-neologdが使えない&br;
→辞書のパスを修正することで対応

---1.mecab-ipadic-neologd辞書のインストール&br;
下記の参考URLに日本語で説明してくださっているのでそれに沿って進めれば大丈夫です&br;
ちなみに辞書はUbuntu環境では特に設定を変えない限り以下のパスにDLされると思います&br;
/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd

--- 2.mecab-python3のtagger記述を変える&br;
下記の参考URLのCommonIssueに書いてあることそのままです&br;
実習では tagger = Mecab.Tagger('-Ochasen -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/')としていましたが&br;
これを tagger = Mecab.Tagger('-Ochasen -r/dev/null -d/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/')にすれば正常に動作してくれました&br;
(Linuxにusr/local/...が無いのが原因。同名の空ファイルを作っても対処可能らしいです。試してないけど…)
>参考:https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
>   https://github.com/SamuraiT/mecab-python3

現状これらをすることでwin側で.py作成→Linux上で実行→win側で実行結果を確認できています&br;
どうせ今後エラーとか出てくると思うのでそのたびに加筆するかもです

-余談&br;
ディレクトリ自体は仮想的に作ったLinuxのハードディスクイメージに入ってるんですかね?&br;
具体的な場所としては以下のパスです&br;
\Users\(User名)\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx&br;
ただ、この.vhdxが開けない…OSが違うので開けないのは当たり前と言えばそうなんですが…&br;
一応以下のサイトのようにマウントする手段はあるようなのですが上手にできませんでした&br;
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-mount-disk → Windows insider Programに参加してないとダメ?&br;
あとChrome Remote Desktopを入れているとセキュリティ関連が固くなってどうのこうの…みたいな記事も見つけました&br;
よくわからんです

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS