SatooRu's Profile

全ての記事梶研の進捗日常の記録制作物一覧

梶研の進捗

梶研 [伊達巻成功 & GCN, ST-GCN完全に理解した]

梶研 [伊達巻成功 & GCN, ST-GCN完全に理解した]

3年セミナー:??% []mocopiとお料理センシング [x]シーンとランドマークを決める(~2月上旬) [x]SVMで動作判別する []機械学習を深める [x]機械学習の手法を知る [x]使う手法を決める [x]データセットを探す [x]LSTMしてみる [x]主成分分析してみる [x]クラスタリング []自己相関 []お料理センシング [x]お料理でどんな動作があるかを知る [x]レシピを決める []センシングする []? []論文書く []発表 []BLEビーコンのuuidを書き換えたい [x]通信内容を読み解く []shellコマンドで通信してみる []実装してみる []BookWorm [x]Pasoriとデスクトップアプリを接続する(技術検証) [x]nfc読み込み機能&画面を作る []APIと連携させる [x]管理者画面を作る ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい 料理中の動作をmocopiを使ってセンシングする。 このデータから最終的に位置推定を行う。 一定の区間でどの動作をしているかを当てる(クラス分類) 料理の手順を元にシーン検知を補正する 例)焼く動作→卵割る動作はおかしい 位置とシーンを相補的に補正する 例)冷蔵庫の前で焼く動作はおかしい 完璧でした 生産者の顔 フライパン買ってください 横幅がもう少し広いフライパンが欲しい 動画からではないサンプルコードが欲しい https//colab.research.google.com/github/machineperceptionroboticsgroup/MPRGDeepLearningLectureNotebook/blob/master/15_gcn/03_action_recognition_ST_GCN.ipynb よく分からないけど学習が進んだ ... とても時間がかかったので10回目で止めた グラフを表示してくれた 斜め(縦と横の軸が同じところ)が濃いほど正確ぽい 追ってみたけど全く分かりませんでした. 仮でランダムに生成する py X=np.random.randn(num_node,in_channels)+1 TODO動作認識ではこの入力値がどう変わるのか py E=[[0,1],[0,2],[0,4],[1,2],[2,3]] reversed_E=[[j,i]for[i,j]inE] new_E=E+reversed_E A=edge2mat(new_E,num_node) $$ [1,1,1,0,1] left[ begin{array}{c} v_1 v_2 v_3 v_4 v_5 end{array} right] =v_1+v_2+v_3+v_5 $$ 隣接している部分だけ取り出すみたいな その結果が右側 (左のXはランダムのため変化しています) ノードによる偏りがある TODOなぜ偏りが良くないのか 平均を使うと多少解消される $$ tilde{mathbf{D}}^{1}tilde{mathbf{A}}mathbf{X} $$ 実際は正規化するべき $$ tilde{mathbf{D}}^{frac{1}{2}}tilde{mathbf{A}}tilde{mathbf{D}}^{frac{1}{2}}mathbf{X} $$ 畳み込みは特定のノードに隣接するノード間でいい感じに計算するぽい だから隣接行列を作って掛け算していた 動作認識において隣接行列は関節間の接続を入れればいいぽい 入力は... 加速度,角速度をうまい感じに入れる? 角速度から骨格の形(関節の角度)を生成して使う? https//disassemblechannel.com/deeplearninggcn/ ↓をみた感じ、人を正面から見た時の各関節の座標を持っているぽい py fig,ax=plt.subplots(2,3,figsize=(16.0,6.0)) foriinrange(6) r=i//3 c=i%3 foreinE ax[r,c].plot([X[i,e[0],0],X[i,e[1],0]],[X[i,e[0],1],X[i,e[1],1]],"c") ax[r,c].scatter(X[i,,0],X[i,,1],s=7) ax[r,c].set_xlim([0,width]) ax[r,c].set_ylim([0,height]) ax[r,c].set_aspect('equal','box') ax[r,c].set_xticks([]) ax[r,c].set_yticks([]) ax[r,c].invert_yaxis() https//zenn.dev/hash_yuki/articles/3b0f782ccffa54 入力値は、腰(ROOT)を原点とした各関節の座標とする? 伊達巻センシングする BVHの1フレームのデータを入力値として、各関節の座標を出力する関数をいい感じに実装する 体の向きをグラフで出せるようにする 体の向きから各関節の座標を修正するようにする 前に作成したBVHをPythonで扱うmcp_persorは大量のデータに対応できない問題に対処する 必要なフレームだけ読み込むみたいな? 下校中 渋谷 下北沢コメダ 弊社オフィス ボザロの聖地 セカオワの聖地 帰宅 いちねんせいたくさん

2024年4月16日

梶研 [伊達巻センシング&モーションデータから骨格比較序章]

梶研 [伊達巻センシング&モーションデータから骨格比較序章]

3年セミナー:??% []mocopiとお料理センシング [x]シーンとランドマークを決める(~2月上旬) [x]SVMで動作判別する []機械学習を深める [x]機械学習の手法を知る [x]使う手法を決める [x]データセットを探す [x]LSTMしてみる [x]主成分分析してみる [x]クラスタリング []自己相関 []お料理センシング [x]お料理でどんな動作があるかを知る [x]レシピを決める []センシングする []? []論文書く []発表 []BLEビーコンのuuidを書き換えたい [x]通信内容を読み解く []shellコマンドで通信してみる []実装してみる []BookWorm [x]Pasoriとデスクトップアプリを接続する(技術検証) [x]nfc読み込み機能&画面を作る []APIと連携させる [x]管理者画面を作る ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい 料理中の動作をmocopiを使ってセンシングする。 このデータから最終的に位置推定を行う。 一定の区間でどの動作をしているかを当てる(クラス分類) 料理の手順を元にシーン検知を補正する 例)焼く動作→卵割る動作はおかしい 位置とシーンを相補的に補正する 例)冷蔵庫の前で焼く動作はおかしい 卵は4個のところ2個使ってた フードプロセッサーの前に越してた 濾す時にスプーンを使って最後までとる 材料入れてない 全ての定義 時間測ってない アルミの蓋をあらかじめ作っておく ひっくり返すタイミングが早かった 強さ1,時間不明 調味料が少なかった ちゃんと測る 濾しきれなかった もっとフードプロセッサーする 調味料が混ざりきってない 火力が強かった もっと強く巻く 2枚目が巻ききれなかった 調味料を入れ忘れて一回フードプロセッサー後に混ぜた 半分ずつフードプロセッサしていたのに調味料を1回目で全て入れてしまった 反転が少し早くてぐちゃっとしてしまった たくさんセンシングするのに時間掛かるので、BVH形式(mocopiの形式)のデータが欲しい 配布されたデータを使う HIMEHINAめっちゃ配布していてよさそう BVHそのままはあまりない→BlenderでFBXからBVHに変換する FBX形式をそのままimport 骨格がおかしい AutomaticBoneOr...にチェックを入れる export HIERARCHY ROOT__0 { OFFSET0.00.00.0 CHANNELS0 JOINTLeftUpLeg { OFFSET6.0160715.9917870.570599 CHANNELS6XpositionYpositionZpositionXrotationYrotationZrotation JOINTLeftLeg { OFFSET1.47388322.94072725.570656 CHANNELS6XpositionYpositionZpositionXrotationYrotationZrotation JOINTLeftFoot { OFFSET10.05401036.7214628.523235 CHANNELS6XpositionYpositionZpositionXrotationYrotationZrotation JOINTLeftToeBase { OFFSET0.1992652.57799510.048431 CHANNELS6XpositionYpositionZpositionXrotationYrotationZrotation JOINTLeftToeBase_end { OFFSET1.8527844.9288988.940361 CHANNELS6XpositionYpositionZpositionXrotationYrotationZrotation EndSite { OFFSET1.9587405.3570218.667324 } ... } } MOTION Frames13390 FrameTime0.016667 6.0160715.9917860.57060055.94017529.54657510.5906211.47399822.93941525.57191720.6263675.6406134.76024910.05401336.7214558.5232342.1040192.3274664.3353040.1992582.57799810.0484315.1017421.4452680.2021351.8527854.9288918.9403720.0000020.0000010.0000006.0160645.9920600.57069748.5661453.27276310.9616845.76404925.21038822.6609828.6801251.4209350.8433676.93587436.77893811.0177431.5684470.0937721.3300930.3595202.8231039.9778550.0000020.0000010.0000021.7858174.2531829.2939960.0000010.0000000.0000000.0000048.7828910.0000130.4478030.9595840.0128550.0100808.4120710.8293234.2250401.1604452.8751672.01508112.0334263.4282211.0828802.2662849.06121423.72878613.8387027.68719511.92530118.8445611.93148581.7149153.37948089.0224739.67470117.3027292.64857534.0897858.36957752.4217337.1739271.4590490.3282621.4931152.8231607.7222601.4095870.6592190.3830501.1285352.0330401.0736370.8960301.6505510.85089810.73428322.10645450.3984390.0000010.0000020.0000006.7005811.8758330.9513796.60998315.35038624.8071171.5436551.6057130.2516679.92283436.02599794.4190532.17916324.81125155.3091131.7909550.9732560.0679240.0000010.0000020.0000035.2457742.7199823.2283955.99284626.73719063.0289729.63210421.21568635.6732930.9135340.5940590.6730756.59763410.17717618.5275471.1272160.1944160.5762180.0000020.0000000.0000015.8692752.3861932.1591647.50856423.51063546.3988925.93086838.99395678.3182681.7197850.4427000.7391334.02884325.38394245.5744340.0000050.0000010.0000012.8680270.7913581.72917212.7005579.2529879.0389871.6299501.0277840.3830728.61949111.6540117.3312441.3003571.3005870.52916312.81800119.24816310.8221530.9860771.2358011.0783530.0000020.0000000.0000031.16801516.6626452.40667036.54062422.39334414.4791131.3050444.7909441.76290424.03813019.77641322.4443603.73496611.6453033.3246005.3394316.0792423.16716432.08850934.08749018.49830710.03807118.8332716.7556367.7928689.5734100.67957210.83291821.99897959.6927666.7766482.3483771.5048330.1064830.4644880.83370715.3562293.14500821.3172399.7536492.48661013.1542960.0000020.0000030.0000046.1193292.0854462.7434071.1373181.8428834.6773431.7726530.8007981.1140757.3134032.01388413.4060144.5660461.4743128.4446490.0000000.0000020.0000014.3318141.6298754.8906690.5410425.0965906.6884355.0234841.73543615.7423023.2518210.97201810.1057440.0000010.0000010.0000025.1009711.8923523.8992391.4803381.9927335.2282945.4198810.78086614.5109233.4318790.6715489.2422940.0000020.0000020.0000042.8130581.8453720.7319353.3763915.9804321.1801831.8225480.6912530.2455972.6343728.4719111.7156951.5694250.7133980.8309865.51721016.5839954.7286811.6005570.5860660.8702270.0000010.0000010.000004 6.0160705.9917860.57059960.07973013.18533921.4929951.47404922.93947025.57180019.9763096.8538826.87516910.05400936.7214438.5232302.1041062.2478314.3543280.1992602.57798710.0484255.0623901.4340550.2010711.8527844.9288858.9403700.0000040.0000010.0000006.0160635.9920610.57069848.5350993.24888010.9585475.76625325.22876422.6400438.5314401.3955420.8307446.93587836.77893111.0177491.5953500.0859341.3258480.3595252.8231289.9778681.8813790.4470620.1508341.7858164.2531709.2940090.0000040.0000000.0000000.0000048.7828920.0000130.4013570.9470660.0114340.0100808.4120720.8293234.2491751.1486912.8830572.01508012.0334253.4282211.0891132.2378409.06271223.77722413.9588957.65660511.92530318.8445661.93148781.5312713.43160489.0272269.67469817.3027322.64857534.2688908.30535952.4829997.1739241.4590530.3282641.4949872.8286137.7461071.4095850.6592110.3830523.27617741.24402690.5835060.8960321.6505500.85089712.01986123.09341949.3424410.0000000.0000000.0000026.7005821.8758340.9513796.57854215.28287324.7616301.5436611.6057070.2516739.92308336.02609994.4196742.17910224.81138455.3094411.7909630.9732530.0679270.0000000.0000020.0000035.2457732.7199873.2283945.90758026.72794663.1791829.61382621.06611235.4443280.9135330.5940590.6730786.55808210.08858618.3830171.1272160.1944170.5762210.0000000.0000010.0000035.8692742.3861982.1591637.46469123.45042046.4017995.91851338.98514278.2880111.7197840.4427000.7391354.02211625.43676245.5277150.0000020.0000000.0000012.8680220.7913621.72917312.7275459.2988109.0682341.6299531.0277840.3830728.57586811.5877157.2954551.3003531.3005840.52916612.74152419.11334210.7615680.9860731.2358041.0783500.0000030.0000030.0000021.16801316.6626072.40667436.62405822.43942514.4232471.3050444.7909371.76290024.10995519.81651022.4707213.73496611.6453043.3246005.2977466.0836473.13525032.07215434.06740918.44783210.03807218.8332716.7556367.8599369.5254780.75715510.84849122.05354459.7423056.7766462.3483751.5048350.5495340.1903291.18168114.7866003.13384220.5375549.3908512.43633912.6703820.0000030.0000000.0000006.1193262.0854462.7434041.5963251.6763675.1520061.7726560.8007941.1140807.1349831.98616513.0850484.4545651.4470078.2415320.0000030.0000030.0000004.3318121.6298744.8906650.5274345.0929256.7044455.0297371.73861215.7628903.2559490.97366510.1189230.0000010.0000050.0000045.1009731.8923493.8992371.6567351.8106895.2627545.1466160.77466613.7872143.2586670.6512748.7810450.0000030.0000010.0000012.8130601.8453700.7319353.3227975.6560941.2265711.8225480.6912450.2455962.6304648.4587821.7133281.5694230.7133990.8309885.49272716.5075634.7102591.6005580.5860650.8702250.0000040.0000010.000003 ... 軽く調べても動画や画像から骨格推定しているものばかりだった →論文漁ってみる https//waseda.repo.nii.ac.jp/record/76928/files/Rikoshuron_202209_t5120fg36.pdf STGCNとかいう機械学習の手法を使えばいいらしい グラフ畳み込みネットワーク 1.隣接行列を用いてノード特徴を集約 隣接行列グラフ上のとあるノード同士が接続しているかを表す行列.習った気がする ノード特徴分からない.サンプルコードでは仮で乱数を使っていた こんな感じで集約する$$ begin{bmatrix} 1,1,1,0,1 end{bmatrix} {times} begin{bmatrix} v_1 v_2 v_3 v_4 v_5 end{bmatrix} = v_1{times}v_2{times}v_3{times}v_5 $$ 平均を使うと偏りが少なくなる 実際は正規化を行うことが多いらしい 2.畳み込み演算 隣接ノード数では固定の重みを使えない エッジの重みを学習することで代用できる 数式はよく分からん とにかく重要度の低いノードの重みは小さく,重要度の高いノードの重みは大きくなる GCN(GraphConvolionalNetwork)にST(SpatialTemporal,時空間)方向で拡張したもの(?) 多分2次元平面+時間軸でやっている →いずれ3次元空間+時間軸でやる方法も必要? TODO理解する 参考https//zenn.dev/hash_yuki/articles/3b0f782ccffa54 1.軽くGCNする 1.STGCNで行動認識する 1.3次元空間+時間軸で行動認識する? ソロ花見をした ⚠️以下ライブのネタバレを含みます⚠️ センシング失敗した 保存できていなかった 欲しかったデータのイメージ(↓は8月のフェスの加速度)

2024年4月9日

梶研 [お料理センシング]

梶研 [お料理センシング]

3年セミナー:??% []mocopiとお料理センシング [x]シーンとランドマークを決める(~2月上旬) [x]SVMで動作判別する []機械学習を深める [x]機械学習の手法を知る [x]使う手法を決める [x]データセットを探す [x]LSTMしてみる [x]主成分分析してみる [x]クラスタリング []自己相関 []お料理センシング [x]お料理でどんな動作があるかを知る [x]レシピを決める []センシングする []? []論文書く []発表 []BLEビーコンのuuidを書き換えたい [x]通信内容を読み解く []shellコマンドで通信してみる []実装してみる []BookWorm [x]Pasoriとデスクトップアプリを接続する(技術検証) [x]nfc読み込み機能&画面を作る []APIと連携させる [x]管理者画面を作る ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい 料理中の動作をmocopiを使ってセンシングする。 このデータから最終的に位置推定を行う。 一定の区間でどの動作をしているかを当てる(クラス分類) 料理の手順を元にシーン検知を補正する 例)焼く動作→卵割る動作はおかしい 位置とシーンを相補的に補正する 例)冷蔵庫の前で焼く動作はおかしい GitHubが大好きなのでセンシングデータ(BVHファイル)もGitHubで管理したい 1ファイル100MBを超えてしまうとGitHubでは管理できない →ファイルを分割/復元するスクリプトを書く shell yarnsplit shell yarnrestore はんぺんと卵をペースト状にするために"フードプロセッサ"などが必要 梶先生<"すりこぎ"もいいかも →ダイソーを巡ったがいずれも見つからず諦めてamazonした 瀬戸のダイソーにあった 名電の情報システム部に混ざって参加した ものづくりの効率化の話と実践をしてきた(Sonyすごい) >ものづくりのWSでプログラミングではないけれど、いかに効率的に製品を制作するかのワークショップです。発想力と理系の力が必要です。特に資料はありませんが、量産ものづくりの世界を体験できるもので、簡単な箱の大量生産ですが奥が深いです。システムを開発する人は、こういった現場のことを知っておくことも私は大切なことだと思ってます。ちなみに主催はSONY創業者の血縁(孫)盛田さんです。関連会社の社長などをされているSONYのかなり凄い方です。そんな方とお会いして、いろいろお話しする機会は貴重ですので優秀な皆さんでぜひ。 NoPicture goodfirstissueがたくさんあるということでやってみた まじ簡単だけどとても親切でやりやすかったので是非

2024年4月2日

梶研 [お料理センシング(機械学習を深めた)]

梶研 [お料理センシング(機械学習を深めた)]

3年セミナー:??% []mocopiとお料理センシング [x]シーンとランドマークを決める(~2月上旬) [x]SVMで動作判別する []機械学習を深める [x]機械学習の手法を知る [x]使う手法を決める [x]データセットを探す []LSTM [x]機械学習(LSTM)する []精度を上げる []? []主成分分析 [x]主成分分析する []精度を上げる []クラスタリング [x]kmeans法 []自己相関 [] []? []お料理センシング [x]お料理でどんな動作があるかを知る [x]レシピを決める []データをとる? []? []論文書く []発表 []BLEビーコンのuuidを書き換えたい [x]通信内容を読み解く []shellコマンドで通信してみる []実装してみる []BookWorm [x]Pasoriとデスクトップアプリを接続する(技術検証) [x]nfc読み込み機能&画面を作る []APIと連携させる [x]管理者画面を作る ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい ペンギンのデータで主成分分析をした https//github.com/mwaskom/seaborndata/blob/master/penguins.csv 変数名詳細 islandペンギンが生息する島の名前('Torgersen','Biscoe','Dream') bill_length_mmペンギンのくちばしの長さ(mm) bill_depth_mmペンギンのくちばしの奥行き(mm) flipper_length_mmペンギンのヒレの長さ(mm) body_mass_gペンギンの体重(g) sexペンギンの性別('Male','Female') speciesペンギンの種類('Adelie','Chinstrap','Gentoo') yearデータが収集された年 かわいい 非階層的クラスタリング kmeans法 混合正規分布 階層的クラスタリング ウォード法 重心法 最短(最長)距離法 群平均法 クラスタリングデータ間の類似度に基づいてデータをグループ分けしていく手法 教師なし機械学習の一種 できた.第一主成分と第二主成分を使用した 星がクラスの重心 とあるデータたちを主成分分析してクラスタリングすることはできた とあるひとつのデータを入力として種類を出力する方法を知る必要がありそう ペンギンの場合はkmeans法で十分だったが、 お料理センシングとなるとやってみなければ分からない 似た形の波がどこにあるかを探し、それくらい一致しているか(相関係数)を出す 相関係数を表したグラフをコレログラムと言うらしい プロのレシピが良い kikkomanの方が親切 ハッカソンをゆるーくしたイベント 後輩もうひとり釣りました 写真撮ってなかったので引用 思いの外愛工大案内する蔵(仮)の反応が良くて嬉しかった Chatworkの新規事業でBPaaS云々を聞いた.社名を変えるほどの転換で案外面白そうだと思った

2024年3月26日

梶研 [お料理センシング & 主成分分析 & BookWorm]

梶研 [お料理センシング & 主成分分析 & BookWorm]

3年セミナー:??% []mocopiとお料理センシング [x]シーンとランドマークを決める(~2月上旬) [x]SVMで動作判別する []機械学習を深める [x]機械学習の手法を知る [x]使う手法を決める [x]データセットを探す []LSTM [x]機械学習(LSTM)する []精度を上げる []? []主成分分析 [x]主成分分析する []精度を上げる []? []? []お料理センシング [x]お料理でどんな動作があるかを知る []データをとる? []? []論文書く []発表 []BLEビーコンのuuidを書き換えたい [x]通信内容を読み解く []shellコマンドで通信してみる []実装してみる []BookWorm [x]Pasoriとデスクトップアプリを接続する(技術検証) [x]nfc読み込み機能&画面を作る []APIと連携させる []管理者画面を作る ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい fumaさんと軽く話した そんなに難しくないもの 初心者です 工程が多いもの 位置推定をするため移動がたくさんほしい 飽きないもの これから何度もやるため 材料費が高すぎないもの 材料費は研究費に含まれないとか →太巻き いろんな材料が必要 簡単な工程がいっぱい 第一主成分と第二主成分 第二主成分と第三主成分 第一主成分と第三主成分 あんまり別れきってない 一連の動作ではなく1フレームずつの加速度でやっているため、 0,0あたりに集まるのは当然 →ウィンドウに分けて標準偏差などの特徴量でやる 一旦ペンギンのデータでやってみる https//archive.ics.uci.edu/dataset/690/palmer+penguins3 ライブラリに任せっきりのため、何しているか理解する必要がある pca=PCA() pca.fit(dfs) feature=pca.transform(dfs) pd.DataFrame( feature,columns=["PC{}".format(x+1)forxinrange(len(dfs.columns))] ).head() 第何主成分まででどのくらいの情報を説明できるかという指標 ↓第二主成分までで十分そう センシングを始めようかと思ってます 必要な時にまとめて取るのは大変なので週1程度でやりたい 機械学習を深める LSTM 主成分分析 管理者画面を作った APIはまだなので仮 バイトで学んだことを活かして綺麗に書けた ts import{atom}from'jotai'; exportinterfaceItem{ idnumber; titlestring; idmstring; typestring; } constfetchItem=async(idItem['id'])Promise{ //仮 awaitnewPromise((resolve)=>setTimeout(resolve,1000)); return{ id, idmidm${id}, typetype${id}, titletitle${id}, }; }; constitemAtom=atom(undefined); exportconstselectItemAtom=atom( (get)=>get(itemAtom), async(_get,set,idItem['id'])=>{ set(itemAtom,undefined); constitem=awaitfetchItem(id); set(itemAtom,item); } ); ts import{itemAtomLoadable}from'@/store/items'; import{useAtomValue}from'jotai'; constuseItems=()=>{ returnuseAtomValue(itemAtomLoadable); }; exportdefaultuseItems; ts constAdminBody=()=>{ constitems=useItems(); return( {items.state==='hasData'&&} {items.state==='loading'&&} ); }; BookWormラズパイをセットアップした パスワードの設定 VNCの設定 ~~Nodeのインストール~~ 直接nodeがあったりnvmでバージョン管理してたり nvmがうまく動かなかったり Rustのインストール ラズパイのセットアップ 初期化しようかと思ってます(要相談) APIとの連携 就活たのしそうだったので逆求人登録してみた 何を聞けるのか、面談してみようと思います 企業の選択肢を広げれたら嬉しい 今の所mixiが気になってる なんか徹夜カラオケした https//ipsjone.org/#suda 学生課の依頼で作った愛工大案内するやつ 完成したのにchromeだけ位置情報がずれてしまった →GPSに加えてWiFi(SSID)も使って補正をしていた(WiFi位置推定)

2024年3月19日

梶研 [お料理やってない, BLE微妙..., NFC最高!]

梶研 [お料理やってない, BLE微妙..., NFC最高!]

3年セミナー:??% []mocopiとお料理センシング [x]シーンとランドマークを決める(~2月上旬) [x]SVMで動作判別する []機械学習を深める [x]機械学習の手法を知る [x]使う手法を決める [x]データセットを探す [x]機械学習(LSTM)する []精度を上げる []? []お料理センシング []お料理でどんな動作があるかを知る []? []論文書く []発表 []BLEビーコンのuuidを書き換えたい [x]通信内容を読み解く []shellコマンドで通信してみる []実装してみる []BookWorm [x]Pasoriとデスクトップアプリを接続する(技術検証) [x]nfc読み込み機能&画面を作る []APIと連携させる []管理者画面を作る ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい 前回)精度は置いといて、機械学習は一旦できたぽい お料理についてどんな動作があるかfumaさんと話す →気づいたら金曜日にだったので今週やる コンロや冷蔵庫,電子レンジ,まな板前など動き回る料理がいい 卵焼き→コンロ程度? 料理力が壊滅的 初心者でも(慣れれば)出来るような物がいい 現状 卵焼き🙆 目玉焼き🙅‍♀️ 今後たくさん作る必要がある 好きな食べ物がいい オムライスとか? どうやらPythonでGATT通信できるものがあるらしい https//pypi.org/project/BLEGATT/ https//micropythondocsja.readthedocs.io/ja/latest/library/bluetooth.html HTTPではなく、より低レイヤーのTCPを扱うイメージ なんやかんや調べた結果、一旦ペアリングする必要があるとか? Android端末とビーコンはそんなことしていないので違うはず? よく分からないので一旦手を動かしてみる BLEデバイスをスキャンする >$sudohcitoollescan 選択 >$gatttoolIb[address] 接続 >[address][LE]>connect エラーAttemptingtoconnect 使用法: ガットツール[オプション?] ヘルプオプション h,helpヘルプオプションを表示します helpallすべてのヘルプオプションを表示します helpgattすべてのGATTコマンドを表示します helpparamsすべてのプライマリサービス/特性引数を表示します helpcharreadwriteすべての特性を表示値/記述子読み取り/書き込み引数 GATTコマンド primaryプライマリサービスの検出 characteristics特性の発見 charread特性値/記述子の読み取り charwrite特性値応答なしの書き込み(書き込みコマンド) charwritereq特性値書き込み(書き込み要求) chardesc特性記述子の検出 listen通知と指示をリッスンします 主なサービス/特性の引数 s,start=0x0001開始ハンドル(オプション) e,end=0xffff終了ハンドル(オプション) u、uuid=0x1801UUID16またはUUID128(オプション) 特性値/記述子読み取り/書き込み引数 a,handle=0x0001ハンドルによる読み取り/書き込み特性(必須) n,value=0x0001書き込み特性値(書き込み操作に必要) アプリケーションオプション i,adapter=hciXローカルアダプターインターフェースを指定します b,device=MACリモートBluetoothアドレスを指定します t、addrtype=[パブリック[ランダム]LEアドレスの種類を設定します。デフォルトパブリック m,mtu=MTUMTUサイズを指定します p,psm=PSMBR/EDR上のGATT/ATTのPSMを指定します l,seclevel=[低中高]セキュリティレベルを設定します。デフォルト低 I,interactive対話モードを使用する bluetoothctlというコマンドもあるらしい. デバイス一覧を出す >$bluetoothctl >[bluetooth] でてこない. スキャンしたものの中から接続可能なものが出てくるらしい >[bluetooth] デバイス一覧が取れた gattというコマンドもあるのでそれを使えばできる? >[bluetooth] ねむい.つかれた.また今度やる 疲れたので楽なBookWromをやった Pasoriを使う方法として Tauriのバックエンド(Rust)で読み取る 一番美しい※個人の思想 本来あるべき姿 Rustという面で引き継ぎづらい? パッケージがあれば書く量は少なく引き継ぎやすい? Tauriのバックエンドからshellなどから他の言語(Pythonなど)で読み取る 現在の方法 美しくない 環境依存になる 正攻法ではない Pythonなどを使えるという面では引き継ぎやすい? Tauriのフロントエンド(ブラウザ/JavaScript)で読み取る 美しいとは言えない 正攻法ではある PasoriやMFCタグの低レイヤーを知る必要がある 参考https//sakurasystem.com/?p=3120 JavaScriptという面では引き継ぎやすい? 低レイヤーを知る必要があるため引き継ぎづらい RustでPasoriを扱う →良いパッケージがなかった nfc 古い https//github.com/dsgriffin/nfc libnfcを使って自分で実装 実装辛い 環境依存 https//github.com/segfo/smartcard 重いのでRustは諦める. WebUSBを使ってJavaScriptからPasoriを扱う 参考元 ライセンス ライセンスに則った上で改変しまくりました https//github.com/saturday06/webusbfelica/blob/ghpages/demo.html Pasori仕様書 https//kikakurui.com/x6/X63194201601.html USBデバイス全てに対応するAPIなのでとても低レイヤーを触っています コード一部抜粋 ts awaitsend(device,[0x00,0x00,0xff,0x00,0xff,0x00]); awaitsend(device,[0x00,0x00,0xff,0xff,0xff,0x03,0x00,0xfd,0xd6,0x2a,0x01,0xff,0x00]); awaitreceive(device,6); awaitreceive(device,13); awaitsend(device,[0x00,0x00,0xff,0xff,0xff,0x03,0x00,0xfd,0xd6,0x06,0x00,0x24,0x00]); awaitreceive(device,6); awaitreceive(device,13); awaitsend(device,[0x00,0x00,0xff,0xff,0xff,0x03,0x00,0xfd,0xd6,0x06,0x00,0x24,0x00]); awaitreceive(device,6); awaitreceive(device,13); カスタムイベントというやつを使ってみた イベントウェブページ上で発生するあらゆるアクションの総称 idmを読み取ったら発火するイベントを作成した ts //イベントを定義 constreadIdmEvent=newCustomEvent('readIdm',{detail{idm}}); //イベントを発火 window.dispatchEvent(readIdmEvent); //イベントリスナーを登録(idmが呼ばれる度にonReadIdmが実行される) window.addEventListener('readIdm',onReadIdm); カスタムフックにして扱いやすくなった ts constLendingPage=(propsLendingPageProps)ReactElement=>{ constsubscribeIdm=useCallback(handleReadIdm,[]);//カスタムフック const{start,stop}=usePasoriEvent(subscribeIdm); functionhandleReadIdm(idmstring){ console.log({idm}); handleNext(); } ... } mizutani先輩とのReactドキュメント輪読会が役に立ちました イベントリスナーを削除するには同じ関数を与える必要がある →useCallbackでいい感じに もう少しいい感じにしたい(strictモードではwebUSBの動作が不安定) せっかくJSだけで出来たので仮デプロイしました https//bookwormnfc.satooru.dev/ ほとんど完成してしまったのでAPIができ次第、続きをやります windowsのVScodeがあまりにも触りづらかったのでvimに慣れようと思います. ぼくのかんがえたさいきょうのIDEを構築しています 八草駅から5分程度の位置にある城 雨上がりで危なそうだったので攻城は諦めた 帰り道に竹島に寄るのが恒例と聞いたので寄った 楽しくなって浜名湖にも寄った 吉田城に行った 続日本百名城の一つで気になってた のんほいパークに行った DC0D300DFFCC https//www.mikantech.net/entry/blegattstudy https//www.mikantech.net/entry/raspisensortaggatttool https//jitaku.work/it/category/bluetooth/gatttool/

2024年3月12日

梶研 [LSTMで行動認識をする]

梶研 [LSTMで行動認識をする]

3年セミナー:??% []mocopiとお料理センシング [x]シーンとランドマークを決める(~2月上旬) [x]SVMで動作判別する []機械学習を深める [x]機械学習の手法を知る [x]使う手法を決める [x]データセットを探す [x]機械学習(LSTM)する []精度を上げる []? []お料理センシング []お料理でどんな動作があるかを知る []? []論文書く []発表 []BLEビーコンのuuidを書き換えたい [x]通信内容を読み解く []実装してみる ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい http//ec25225205214.uswest2.compute.amazonaws.com/files/activity_net.v13.min.json bookmark_vol36no2/ >Moreaux,M.,Ortiz,M.G.,Ferran´e,I.andLerasle,F.Benchmarkforkitchen20,adailylifedatasetforaudiobasedhumanactionrecognition,Int.Conf.ContentBasedMultimediaIndexing(CBMI),IEEE,pp.1–6(2019). > >https//ieeexplore.ieee.org/document/8877429 とても良さそうだったが論文が見れなかった... →モデル作成に用いるkitchen20データセット[11]の各音源の長さは5秒である音声だったかも 探すの飽きたので一旦適当なデータセットで試す ~~好きな物を題材にするのはやる気が出て良いと思います~~ 時系列データではないためLSTMでは使えなかった https//allisonhorst.github.io/palmerpenguins/ 行動認識してる研究があった >加速度データからの機械学習による行動認識 >福井大学大学院工学研究科研究報告第68巻2020年3月 https//www.eng.ufukui.ac.jp/wpcontent/uploads/vol68_5966.pdf >4.1用いるデータセット この節では、使用するデータセットの説明をする。 データセットは、スマートフォンによって収集された3軸加速度センサを用いたデータであるHASCコーパスを用る。このデータセットの対象としている行動は、停止(stay)、歩行(walk)、ジョギング(jog)、スキップ(skip)、階段を上がる(stUp)、階段を下る(stDown)の6種類であり、それぞれの3軸加速度信号データ(csv)、メタデータ(meta)、ラベルデータ(label)の3種類のデータ形式が記録されている。また、データセットは、大きく分けてセグメントデータとシーケンスデータに分けることができる。 梶先生らのを使っていた 簡単なLSTMをしている記事があった https//qiita.com/slothhobby/items/93982c79a70b452b2e0a 1.(三角関数のパラメーラを設定) 2.データセットを生成 値とラベル(と時間) 3.データセットを学習用とテスト用に分ける sklearn.model_selection.train_test_splitを使っている 4.値とラベルをシャッフルする sklearn.utils.shuffle 5.Tensor型にする torch.Tensor 6.損失を計算する? 7.損失に関する各パラメータの勾配を計算する? 8.予測する https//hilinker.hatenablog.com/entry/2018/06/23/204910 三角関数の連続する3点から続きの1点を出す→manytoone 分類問題はmanytoone 参考https//qiita.com/m__k/items/841950a57a0d7ff05506 BasicActivity/{index}_{label}/{PersonID}/HASCacc.csvtimexyz 複数のファイルに分かれているためひとつのファイルにまとめる BasicActivity/{PersonID}/{PersonID}acc.csvtimexyzlabel ~~面倒だったので~~加速度だけでやる py def__init__(self,person_idstr,pathstr)>None labels=['stay','walk','jog','skip','stUp','stDown'] files=[ { "label"l, "acc"str(list( pathlib .Path(f"{path}/{i+1}_{l}/{person_id}") .glob("acc.csv") )[0]), "gyro"str(list( pathlib .Path(f"{path}/{i+1}_{l}/{person_id}") .glob("gyro.csv") )[0]), "pressure"str(list( pathlib .Path(f"{path}/{i+1}_{l}/{person_id}") .glob("pressure.csv") )[0]), } fori,linenumerate(labels) ] df_acc=pd.concat([ pd.read_csv(f["acc"],header=None,names=["time","x","y","z"]) .assign(label=f["label"]) forfinfiles ]) df_gyro=pd.concat([ pd.read_csv(f["gyro"],header=None,names=["time","pressure"]) .assign(label=f["label"]) forfinfiles ]) df_pressure=pd.concat([ pd.read_csv(f["pressure"],header=None,names=["time","x","y","z"]) .assign(label=f["label"]) forfinfiles ]) self.df_acc=df_acc self.df_gyro=df_gyro self.df_pressure=df_pressure defmake_dataset(self,sequence_lengthint) dataset_inputs=[] dataset_labels=[] dataset_times=[] fori,rowinenumerate(self.df_acc.itertuples()) ifi+sequence_length>len(self.df_acc) break ifi>0andself.df_acc.iloc[i1].label!=row.label continue dataset_inputs.append(rforrinself.df_acc[ii+sequence_length]) dataset_labels.append(row.label) dataset_times.append(row.time) returndataset_inputs,dataset_labels,dataset_times py inputs,labels,_=train.make_dataset(sequence_length) train_inputs,test_inputs,train_labels,test_labels=train_test_split(inputs,labels,test_size=test_size,shuffle=False) 評価関数とは >評価関数とは学習させたモデルの良さを測る指標を指します。 py criterion=nn.CrossEntropyLoss() 二乗平均誤差(RMSE)みたいな役割ぽい 参考https//qiita.com/monda00/items/a2ee8e0da51953c24da8 最適化関数とは >損失関数を用いて正解値と予測値の差を微分することで、勾配を求めることができます。 この勾配を利用してどのくらいの強度でパラメータを更新するかを決めているのが最適化関数です。 とにかくパラメータの方向性をいい感じにしてくれるらしい 参考https//qiita.com/Lapinna/items/d5c331b74c99767ca04a ephoc数訓練データを何回繰り返して学習させるかの回数 batch数データセットを分割する.1度に処理を行う数 pyイメージ forephochinephoc数 forbatchinbatch数 学習の処理 py deftrain( self, train_inputslist, train_labelslist, test_inputslist, test_labelslist, epoch_numint, batch_sizeint, sequence_lengthint, ) train_batch_num=len(train_inputs)//batch_size test_batch_num=len(test_inputs)//batch_size forepochinrange(epoch_num) print(""20) print(f"Epoch{epoch+1}/{epoch_num}") train_loss=0.0 test_loss=0.0 shuffled_train_inputs,shuffled_train_labels=shuffle( train_inputs,train_labels ) np.savetxt( "shuffled_train_inputs.csv", np.array(shuffled_train_inputs).reshape( 1,np.array(shuffled_train_inputs).shape[1] ), delimiter=",", ) forbatchinrange(train_batch_num) start=batchbatch_size end=start+batch_size np_train_inputs=np.array(shuffled_train_inputs[startend]).astype( np.float64 ) np_train_labels=np.array(shuffled_train_labels[startend]).astype( np.int64 ) loss,_=self.train_step(np_train_inputs,np_train_labels) train_loss+=loss.item() forbatchinrange(test_batch_num) start=batchbatch_size end=start+batch_size loss,_=self.train_step( np.array(test_inputs[startend]).astype(np.float64), np.array(test_labels[startend]).astype(np.int64), ) test_loss+=loss.item() print(f"loss{train_loss/train_batch_num}") print(f'test_loss{test_loss/test_batch_num}') deftrain_step(self,inputs,labels) inputs_tensor=torch.tensor(inputs,dtype=torch.float32).to(self.device) labels_tensor=torch.tensor(labels).to(self.device) self.model.eval() preds=self.model(inputs_tensor) loss=self.criterion(preds,labels_tensor) returnloss,preds device:cpu Epoch1/100 loss1.80343093945269 test_loss1.7852103145498979 Epoch2/100 loss1.8034178761013768 test_loss1.7852103145498979 Epoch3/100 loss1.8034281317602123 test_loss1.7852103145498979 Epoch4/100 loss1.8034172628009528 test_loss1.7852103145498979 Epoch5/100 loss1.8034309844175975 test_loss1.7852103145498979 Epoch6/100 loss1.8034331908351497 test_loss1.7852103145498979 ... loss1.803422716103102 test_loss1.7852103145498979 Epoch12/100 lossが減らない. ChatGPTに聞いてみた >訓練がうまくいかない理由の一つは、学習率(lr)の値が適切でない可能性があります。学習率はモデルの訓練中に重要な役割を果たし、適切な値を見つけることが重要です。学習率が高すぎると、訓練が収束せずに振動する可能性があります。逆に、学習率が低すぎると、訓練が収束するまでに非常に長い時間がかかる可能性があります。 なるほど 0.0001から1にしてみた device:cpu Epoch1/100 loss1.7967431503429747 test_loss1.7872365692205596 Epoch2/100 loss1.796769555723458 test_loss1.7872365692205596 Epoch3/100 loss1.796803759901147 test_loss1.7872365692205596 Epoch4/100 loss1.7967799776478817 test_loss1.7872365692205596 Epoch5/100 loss1.7967207206968676 test_loss1.7872365692205596 Epoch6/100 loss1.79678154043984 test_loss1.7872365692205596 ... Epoch100/100 loss1.7967986835722338 test_loss1.7872365692205596 変わらない.0.01100なども試したが大差なかった 原因候補 最適化関数が良くない? sin波の予測と分類ではやり方が違うのかもしれない 適当にlabel渡したのが良くない optim.Adamからoptim.SGDにした 参考 py device:cpu Epoch1/100 loss1.809930482977315 test_loss1.721430358133818 Epoch2/100 loss1.8099145392576854 test_loss1.721430358133818 Epoch3/100 loss1.8099606868467832 test_loss1.721430358133818 Epoch4/100 loss1.8100076438042156 test_loss1.721430358133818 Epoch5/100 loss1.8099237277842404 test_loss1.721430358133818 Epoch6/100 loss1.8099288961343598 test_loss1.721430358133818 ... Epoch100/100 loss1.8099035244239003 test_loss1.721430358133818 変わらなかった.そもそも最適化関数が使えてる? →optimizer.step()を入れてなかった device:cpu Epoch1/100 loss1.4727532474095362 test_loss2.458821142043775 Epoch2/100 loss3.9363968978848374 test_loss47.90312148220191 Epoch3/100 loss22.853781702225668 test_loss350.9249111309386 Epoch4/100 loss43.75640468430101 test_loss69.1852414315207 Epoch5/100 loss172.5352889696757 test_loss838.7717777720669 Epoch6/100 loss140.68897648024978 test_loss245.76162933885004 ... loss222.82399281284265 test_loss668.8828098230194 Epoch10/100 変化したが爆上がりした 0.0001にしてみた 1回目 device:cpu Epoch1/1000 loss1.7136963245115782 test_loss2.322023772356803 Epoch2/1000 loss1.564926897224627 test_loss2.430806122328106 Epoch3/1000 loss1.6254029938003474 test_loss1.955993468301338 ... loss0.7991769483737778 test_loss3.40365913876316 Epoch104/1000 2回目 device:cpu Epoch1/1000 loss1.630137525629579 test_loss2.442890736094692 Epoch2/1000 loss1.7019225055711311 test_loss1.8877409361956412 Epoch3/1000 loss1.540266997458642 test_loss1.795748932319775 ... loss0.31551139612208334 test_loss0.7359745272092129 Epoch101/1000 ... loss1.1991943183698153 test_loss1.0757994573612355 Epoch167/1000 良い感じになってきた. Epoch数を上げすぎると過学習になった パラメータを変えて精度を上げる必要がありそう (主成分分析は) これをどう使えばいいかは分からない ある程度分かってくると機械学習も面白い 私のブックマーク「センサを用いた行動認識」 https//www.aigakkai.or.jp/resource/mybookmark/mybookmark_vol36no2/ なし 道中の犬山城 道中の大垣城 関ヶ原 道中の墨俣一夜城

2024年2月27日

梶研 [機械学習と動作判別の論文を探す]

梶研 [機械学習と動作判別の論文を探す]

3年セミナー:??% []mocopiとお料理センシング [x]シーンとランドマークを決める(~2月上旬) [x]SVMで動作判別する []機械学習を深める [x]機械学習の手法を知る []使う手法を決める []データセットを探す []機械学習する []? []お料理センシング []お料理でどんな動作があるかを知る []? []論文書く []発表 []BLEビーコンのuuidを書き換えたい [x]通信内容を読み解く []実装してみる ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい 今まで機械学習を嫌厭をしていたため、なにがあるか分からない →似たような論文を見てみる 何使えばよいか分かりません... →機械学習>分類>[主成分分析ナイーブベイズ] https//www.jstage.jst.go.jp/article/jsmemecj/2018/0/2018_S2310103/_pdf 検証方法なので違った(プロ演でやったようなやつ) >データから直接学習するディープラーニングのためのネットワークアーキテクチャ https//www.sbbit.jp/article/cont1/60675?previewpass=vhoehltpr3vm > https//ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=232719&item_no=1&page_id=13&block_id=8 一人の動きというよりかは、人々全体の動きなのでちょっと違う? https//ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=232693&item_no=1&page_id=13&block_id=8 今回使えるようなものではない? k個にグループ分けする 論文難しい 教師あり学習 回帰 木 ニューラルネットワーク(NN) ベイズ 時系列 クラスタリング アンサンブル学習 教師なし学習 クラスタリング ニューラルネットワーク(NN) その他 強化学習 深層強化学習 将来予測が可能 時系列解析ぽく見えたが、多分違う >回帰の主な目的は、連続値などの値の予測です 過去のデータを入力として、この先の動向を予測する 違いそう 入力したデータがどのクラスに属するかを分類する プロ演のirisのような これかも? >確率論の定理であるベイズの定理を基にしています。 すごい数式 >全ての推定の確率を計算し、最も確率の高いものを推定結果として出力 すごそうだが、全身の関節の動きは独立にはならなそう >たくさんの量的な説明変数を、より少ない指標や合成変数(複数の変数が合体したもの)に要約する手法 使えそう? >パターン認識でよく使われ、特徴空間における最も近い訓練例に基づいた分類の手法 >クラスタリングという、データを性質の近い分類同士でグループ分けする手法 機械学習どれ使えばいいか 一旦使えそうな手法をいろいろ試しても良いかも データセットはどのサービス(?)から拾えばいいか どんな英単語で調べれば良いか分からない なし ファンが暴走していないのはとても幸せです 手元が寒くなりました

2024年2月26日

梶研 [mocopiとaction slam(SVM)]

梶研 [mocopiとaction slam(SVM)]

3年セミナー:??% []mocopiとactionslam2 [x]シーンとランドマークを決める(~2月上旬) [x]SVMで動作判別する []? []論文書く []発表 ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい 梶研でいろんな動作をする中で冷蔵庫を開け閉めする動作をランドマークとする(仮) HASC2010corpusを用いた被験者数と人間行動認識率の相関. https//nagoya.repo.nii.ac.jp/record/13543/files/dt_hiro.pdf >認識の際には,平均,エネルギー,エントロピー,相関が特徴量として使用されている >>[2.関連研究の紹介(p.2)] >>Bao,L.andIntille,S.S.ActivityRecognitionfromUserAnnotatedAccelerationData.ProcofPERVASIVE2004,pp.117,2004. >認識の際には,特徴量として,窓幅5.12秒毎の平均,標準偏差,エネルギー,相関が用いられており >>[2.関連研究の紹介(p.3)] >>Ravi,N.,Dandekar,N.,Mysore,P.andLittman,L.M.ActivityRecognitionFromAccelerometerData.ProcofIAAI,pp.15411546,2005. >ノルムを計算し,得られた波形の平均と分散を特徴量として抽出 >加速度のノルムに対して,平均,分散,周波数帯域毎のエネルギー,零点交差率の7つの特徴量を用いた行動認識に関する評価実験も行った >加速度の積分値を8つ目の特徴量とした場合の評価実験を行った >>[4.2特徴量] 行動認識の特徴量 平均 分散 相関 エネルギー ? エントロピー 情報源がどれだけ情報を出しているか https//www.mnc.tohou.ac.jp/vlab/yobology/entropy/entropy.htm 零点交差率 一定区間内で0を横切る頻度 加速度の積分値 窓幅は3秒とする py bvhp=BVHparser('./logs/refrigerator.bvh') df=bvhp.get_motion_df() defcalculate_features(window) features=[] median_time=window['time'].mean() forjointincolumns X_rotate=window[joint+'_Xrotation'].values Y_rotate=window[joint+'_Yrotation'].values Z_rotate=window[joint+'_Zrotation'].values mean_value=np.mean([X_rotate,Y_rotate,Z_rotate]) variance_value=np.var([X_rotate,Y_rotate,Z_rotate]) correlation_value=np.corrcoef([X_rotate,Y_rotate,Z_rotate])[0,1] zero_crossings=np.sum(np.diff(np.signbit([X_rotate,Y_rotate,Z_rotate]))!=0) energy_value=np.sum(np.square([X_rotate,Y_rotate,Z_rotate])) features.extend([mean_value,variance_value,correlation_value,zero_crossings,energy_value]) return[median_time]+features window_size=3 window_stride=1 columns=[jforjinbvhp.get_joints()ifnotj.startswith('_')] windows=[df.iloc[ii+window_size]foriinrange(0,len(df),window_stride)ifi+window_size<=len(df)] result_columns=['time']+[f'{joint}_{metric}'forjointincolumnsformetricin['mean','var','corr','zero_cross','energy']] result_data=[calculate_features(window)forwindowinwindows] result_df=pd.DataFrame(result_data,columns=result_columns) labels=[ {'title''冷蔵庫を開ける','num'1,'times'[[10,12],[33,35],[39,41],[55,57],[77.5,79.5],[104,106],[133,135]]}, {'title''冷蔵庫を閉める','num'2,'times'[[14,16],[36,38],[42,45],[58,60],[82,84],[106.5,108.5],[135,137]]}, ] result_df['state']=0 forlabelinlabels fortime_rangeinlabel['times'] start_time,end_time=time_range result_df.loc[(result_df['time']>=start_time)&(result_df['time']<=end_time),'state']=label['num'] result_df.to_csv('./logs/refrigerator_with_state.csv',index=False) py df=pd.read_csv('./logs/refrigerator_with_state.csv') data=df.drop(['state','time'],axis=1).fillna(0) target=df['state'] clf=svm.SVC(gamma="scale") clf.fit(data,target) py test_data=df.drop(['time','state'],axis=1).fillna(0) ans=clf.predict(test_data) print(sum(ans==df['state'])/len(df['state'])) >正答率0.9063168562098862(約90.6%) ラベル付けが雑かった? 大まかな1s単位で付けた >背景は手動でラベル付けした結果 > 青冷蔵庫を開ける > 黄冷蔵庫を閉める > >0その他 >1冷蔵庫を開ける >2冷蔵庫を閉める >正答率0.8908906654656007(約89.1%) 下がった 1.動作を始める瞬間から終える瞬間までなるべく広めに取ったのが悪い? 確実に動作している 2.ウィンドウサイズが大きい? 1回の開ける・閉めるは1~2sに対してウィンドウは3s 3.特徴量はこれだけでいいのか? 4.データが少ない? >正答率0.9225312464812521(約92.3%) 正答率が上がったのはそもそも正解部分が少ないからだと思われる 開け閉め中もその他に含まれたり、含まれなかったりするため良くない window_size=1 window_size=2 window_size=3 window_size=4 window_size=5 window_size=10 変わらない →60fpsだから大差ない window_size=30(0.5s) 細切れの部分が減った データを沢山取ってやってみる 技術力の問題でNext.jsでブログを作れなかったためHUGOで別サイトにしていた(半年前) プロフィールとブログを統合した! カスタマイズ性が上がり、esaから記事を追加できるようになった 画像を全てwebp&幅820pxに変換し、パフォーマンスが向上した

2024年1月30日

梶研 [mocopi と action slam2]

梶研 [mocopi と action slam2]

3年セミナー:??% []mocopiとactionslam2 []シーンとランドマークを決める(~2月上旬) []? []論文書く []発表 ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい 一旦ラベリングを楽にする関数を作った py defplot_joint(bvhp,joint,xlim=(0,0),ylim=(0,0),figsize=(12,3),labels=None,is_position=False) df=bvhp.get_joint_motion_df(joint,mode='relative') fig=plt.figure(figsize=figsize) gs=GridSpec(1,2,width_ratios=[11,1],wspace=0.5) ax1=fig.add_subplot(gs[0]) ax2=fig.add_subplot(gs[1]) joint_name=to_joint_name(joint) ax1.set_title(f'{joint_name}の位置'ifis_positionelsef'{joint_name}の回転') ax1.set_xlabel('time[s]') ax1.set_ylabel('rotation[deg]'ifis_positionelse'position[mm]') ax1.grid(color='k',linestyle='dotted',linewidth=1,alpha=0.5) ifxlim[0]<xlim[1] ax1.set_xlim(xlim[0],xlim[1]) ifylim[0]<ylim[1] ax1.set_ylim(ylim[0],ylim[1]) r_heads=['Xrotation','Yrotation','Zrotation'] p_heads=['Xposition','Yposition','Zposition'] heads=p_headsifis_positionelser_heads forheadinheads ax1.plot(df['time'],df[head],label=head) colors=['mediumblue','orange','green','red','purple','gray','olive','cyan'] iflabels fori,linenumerate(labels) color=colors[i%len(colors)] ax2.scatter([],[],color=color,label=l) fors,einlabels[l] ax1.axvspan(s,e,color=color,alpha=0.2) ax1.legend() legend=ax2.legend() ax2.axis('off') forhandleinlegend.legend_handles handle.set_alpha(0.5) plt.show() py幸せ.py bvhp=BVHparser('./logs/1.bvh') labels1={ '本を取る'[ [20,25], [35,40], ], '本を置く'[ [29,32], ], ... } forjinbvhp.get_joints() ifj[0]=='_' continue plot_joint(bvhp,j,(0,150),(0,0),labels=labels1) 項目が多く、ランドマークの探し方がわからない 全ての項目を使うのは不可能? 主に使ったライブラリ(フレームワーク) フロント Next.js LeafLet バック Hono CloudflareD1 スクレイピング BeautifulSoup TypstTexよりも書きやすく軽く環境構築しやすい組版処理システム マークダウンxCSSみたいな感覚でかけて幸せ

2024年1月23日

梶研 [Unity で複数人の動作を可視化(完) & mocopi と action ]

梶研 [Unity で複数人の動作を可視化(完) & mocopi と action ]

3年セミナー:??% [x]mocopiでセンシング(~12月) [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 [x]bvhをパースするパッケージを作る [x]csvに書き出せるアプリを作る [x]複数人の絡みを取ってみる [x]ブラウザで動作を確認できるようにする(gLTF形式の理解) [x]Unityで複数人の動作を可視化する [x]一連のやり方をesaにまとめる []mocopiとactionslam2 []シーンとランドマークを決める(~2月上旬) []? []論文書く []発表 ~?月シーン検知?をする ~?月論文を書く ~?月論文発表したい 手順をesa&Qiitaにまとめました。 タイトルを決めたい。 actionslam2で合っているか分からない mocopiの長時間使用時の位置情報の誤差をなくす 一連の動作(シーン)から特定の動作(ランドマーク)を抽出し、シーン内の位置情報を推定する 第一段階(今年)ランドマーク抽出 第二段階ランドマークから位置推定 動きがあること 全身の動作である ランドマークと同様の動作がない お料理 具材がたくさんある料理をつくる 学会発表の費用を出せるかもしれない 切る,フランパン振るなどは腕の動きだけで十分そう?(mocopiである必要性) 料理ができない お買い物 棚から商品を取る 同様の動作を繰り返していそう 買い物何回も行きたくない 城,水族館 同じところ何度も通らないから良くないかもしれない? 大学 梶研 本を取る お湯を注ぐ 図書館 棚から本をとる 同様の動作を繰り返していそう 本の貸し借り スポーツする 卓球 動く範囲が狭い サッカー,野球 やりたくない テニス 動作の位置の関係性が薄そう サーブ,レシーブの位置の制限が広い 水泳 水没する さくら+moomooドメインは色々と管理が面倒だったのでcloudflareを始めた 今まで webサイト→さくらサーバー api→Renderor梶研/シス研サーバー DB→迷子(お金こわい) 全てcloudflareでできる! を置き換えた を取得した を持て余している webプロの課題も兼ねてcloudflareD1で大量に読み取りするwebアプリを制作してます

2024年1月16日

梶研 [Unity で複数人の動作を可視化]

梶研 [Unity で複数人の動作を可視化]

3年セミナー:??% []mocopiでセンシング(~12月) [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 [x]bvhをパースするパッケージを作る [x]csvに書き出せるアプリを作る [x]複数人の絡みを取ってみる [x]ブラウザで動作を確認できるようにする(gLTF形式の理解) [x]Unityで複数人の動作を可視化する []一連のやり方をesaにまとめる []mocopiとactionslam2 ? 1月研究の方針を決める&進め方を決める 前回Unityちゃんでやってみたら、ピンク(テクスチャが無し)になってしまった 対応トゥーンシェーダーデータをインストールする 再生した時、Unity上の世界座標が原点なのか、モデルの初期位置が原点なのか モデルの初期位置が原点となることがわかった →モデルの位置を調整することで位置関係を再現できる bvhの最初のデータが(0,腰の位置,0)、 数フレーム後から正しい位置になっている →モデルの初期位置とデータの正しい位置は異なり、テレポートするため調整が面倒 最初の一瞬で近づいている このテレポートを考慮して初期位置を調整している bvhからUnityで再生できるfbx形式に変換する時に処理を行う 1.開始時の(x,z)=(0,0)となっているデータを削除 1.0フレーム目の位置が(x,z)=(0,0)となるように調整 1.bvhからfbxに変換する python frommcp_persorimportBVHparser importsys importargparse parser=argparse.ArgumentParser() parser.add_argument('file',type=str,help='inputmocopirecordfile.bvh') args=parser.parse_args(sys.argv[sys.argv.index('')+1]) bvhp=BVHparser(args.file) motion_df=bvhp.get_motion_df() motion_df=motion_df[ (motion_df['root_Xposition']!=0)(motion_df['root_Zposition']!=0) ] reset_channels=['root_Xposition','root_Zposition','root_Yrotation'] forcinreset_channels motion_df[c]=motion_df[c]motion_df.iloc[0][c] bvhp.set_motion_df(motion_df) new_file=f"{args.file[4]}reset.{args.file[3]}" bvhp.to_bvh(new_file) print(new_file) 一連のやり方をesaにまとめようとプロジェクトを作るところからやったところ、 再現ができなくなってしまいました... スケールが100倍になる 動作が反映されない 研究を始めたい >「mocopiは長時間動くと狂う」 >他のセンサと組み合わせて途中でキャリブレーションできないか > >例) >歩いているとき、足が一定間隔で伸びると仮定すると >歩いているのに膝が最小でも30度曲がっている→ー30度して調整(適当) 進め方が分からない 論文の流れを考えた方が良い? とりあえずどの場面にするか決める? 高校生のやる気が引き出せた なにも出来なかった 興国城の写真しか無かった 始発 終電の西九州新幹線 お土産屋で2万円溶けました...

2024年1月9日

梶研 [action slam2の論文読みました]

梶研 [action slam2の論文読みました]

3年セミナー:??% []mocopiでセンシング(~12月) [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 [x]bvhをパースするパッケージを作る [x]csvに書き出せるアプリを作る [x]複数人の絡みを取ってみる [x]ブラウザで動作を確認できるようにする(gLTF形式の理解) []Unityで複数人の動作を可視化する []mocopiとactionslam2 ? 1月研究の方針を決める mocmopiを長時間使用していると誤差が積み重なり、 関節の角度などがおかしくなってしまう ↓ 特定の動作から補正をしたい 例 冷蔵庫を開ける時は肘を一定角度曲げる 膝と足先にウェアラブルセンサを付けて、 その値からトラッキング(動線と動作?)を行う研究 ウェアラブルセンサによって認識されたユーザアクションをランドマークとしてローカライゼーションとマッピングを同時に行う ウェアラブルセンサとは身につけて歩くことができるセンサのこと。今研究では膝とつま先につけたIMUを使用している 今研究でいうローカライゼーションはどこにいるかを特定すること? ~~マッピングはセンサの情報と特定の位置を紐づけること?~~ マッピングはセンサの情報から周辺のマップを生成すること?(参考 "headingdriftcompensation"と"stancedetectionadaptation"と"ellipselandmarks"で対処する 日本語は、方位ドリフト補正,スタンス検出適応,楕円ランドマーク? 座っているような長時間の静止状態で発生した角速度センサのドリフトに対応する 地磁場を利用して補正する 鉄骨の建物内理想的な磁場ではないが、一般に磁場の向きは時間経過で変化しないため今研究では使用できる つまり、静止しているのに回転していたら磁場をもとに修正する? スライディングや早歩きの状況で欠落する スタンス検出ができないタイミングができ、誤差が大きくなるという問題がある 歩行中の一歩毎の静止状態を検出しているが滑ると一歩だとわからなくなる? 閾値を段階的に増加させて基準を緩めることで対処する 何の閾値かわからない 閾値変えるだけではないはず... 何をしているか全くわからない 翻訳私たちは、人間の行動の場所依存性をよりよく反映する楕円形のランドマークを導入する 関連研究としてWifiSLAMとともに挙げられている 足の動作から位置推定すること? 関連のありそうな研究 ZeroVelocityUpdate(ZUPT)とは、歩行者の歩行中に静止状態を検出することである。(byCopilot) ZUPT処理を使ったPDR ZUPT処理はセンサで感知される値は、ランダムドリフトによるものであると装置に認識させ補正する方法 (参考 カルマンフィルタについて調べた時と同じ匂いがする おせちを食べる (冷めた)チキンを食べる おしるこを食べる お雑煮を食べる 除夜の鐘を聞く(Youtube) ケーキを食べる 書き初めする クリスマス飾りと正月飾りの共存 クリスマスケーキとお雑煮(奥) おせち 書き初め

2023年12月26日

梶研 [mocopi センシング の環境を整える (Unity完全に理解した)]

梶研 [mocopi センシング の環境を整える (Unity完全に理解した)]

3年セミナー:??% []mocopiでセンシング(~12月) [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 [x]bvhをパースするパッケージを作る [x]csvに書き出せるアプリを作る [x]複数人の絡みを取ってみる [x]ブラウザで動作を確認できるようにする(gLTF形式の理解) []Unityで複数人の動作を可視化する ブルーシートばたばたの使い道を考える ライブセンシングの使い道を考える PDRやりたい ~~できませんでした...~~ ↓ ~~既存のパッケージの組み合わせで出来そう~~ ↓ 出来ない ↓ スクリプトを自作できそう(一旦置いとく) ↓ ~~既存のパッケージに合うBVHファイルを生成するスクリプトを書く~~ ↓ 分からない(パッケージが壊れてる?) ↓ fbxに変換してからUnityに取り込めば再生できた 参考https//github.com/vrmc/UniVRM/releases UniVRMというパッケージを使用してVRMをHumanoidにする Assetsに取り込んで、MigrateToVrm1を押すだけでできる それっぽい攻撃をしてポーズをとってくれるカッコいい系のanimationファイル というのを拾ってきてvrmに適用に適用 プレビュー画面 実際にモデルに反映させたいがわからない... ↓ animationcontrollerを使う Animatorタブでコントローラーを指定したら動いた BVHをanimatoinclipにしてくれるUniVRMを使う ↓ モーションが消えてしまっている 原因互換性のないBVHだった( 実線丸が必須のボーン mocopiでのボーン名UniVRM(Humanoid)のボーン名(は任意) rootHips torso_1Spine torso_4Chest torso_7UpperChest neck_1Neck headHead l_shoulderLeftShoulder l_up_armLeftUpperArm l_low_armLeftLowerArm l_handLeftHand r_shoulderRightShoulder r_up_armRightUpperArm r_low_armRightLowerArm r_handRightHand l_up_legLeftUpperLeg l_low_legLeftLowerLeg l_footLeftFoot l_toesLeftToes r_up_legRightUpperLeg r_low_legRightLowerLeg r_footRightFoot r_toesRightToes 手動で置き換えてみたが動かなかった。 テストで使われているBVHを使ってみたがダメだった。 MusclePowerが全て0(デフォルト)の状態 Blenderを経由する必要があるのは面倒だけど物は試しとしてやってみる( ダメだった 原因RigのAnimationTypeをHumanoidに変更していなかった 動いた 初期位置を変更することもできた bvhからfbxへの変換が面倒だったので、Automatorで自動化した 体全体の位置が動いていない ぺこらモデルはツイスターゲームを再生するには問題があったので、 Unityちゃんで再生した(テクスチャがバグっている) ちゃんと屈んだり移動したりできていることは確認できた。 ブラウザで動かした時のように、BVHをパースしてモデルを動かすことができそう 腕を動かしてみた 「mocopiは長時間動くと狂う」 他のセンサと組み合わせて途中でキャリブレーションできないか 例) 歩いているとき、足が一定間隔で伸びると仮定すると 歩いているのに膝が最小でも30度曲がっている→ー30度して調整(適当) mocopiアプリとVRChat等の中間で処理を挟んで補正できたら嬉しいかも なし 先週、ぺこライブに行ったとき有明アリーナに落としてきた 特徴的な文字を書いておくと伝えやすくておすすめです

2023年12月19日

梶研 [mocopi センシング の環境を整える]

梶研 [mocopi センシング の環境を整える]

3年セミナー:??% []mocopiでセンシング(~12月) [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 [x]bvhをパースするパッケージを作る [x]csvに書き出せるアプリを作る [x]複数人の絡みを取ってみる [x]ブラウザで動作を確認できるようにする(gLTF形式の理解) []Unityで複数人の動作を可視化できるパッケージを作る PDRやりたい(1月~) ブルーシートばたばたの使い道を考える ライブセンシングの使い道を考える mocopiで研究するときの環境を整えたい. [x]BVHをPythonで扱いやすいように [x]ブラウザで動作を確認できるようにする(gLTF形式の理解) []Unityで動作を確認できるようにする 初期位置・向きが指定できない Unityで再生するとき、Blenderでfbxに変換する必要がある 複数人のBVHを扱えない BVHは度数法,gLTFは弧度法を使っている X軸回転とZ軸回転は反対方向になる 体全体(ROOT)のX回転は+180度する 複数再生はできるが、場合によっては時間がずれる カメラ移動が扱いずらい ブラウザで動かすことが目標ではなく、 BVHからgLTF形式のモデルを動かすことはできたため、Unityでの可視化を進める ※温かかったです OP らららラビット 最強女神ウーサペコラ サインはB トーク(Twitterの話題まで) ED アンコール いいわけバニー 君の知らない物語 お手紙 兎座ストーリー

2023年12月12日

梶研 [mocopi センシング の環境を整える]

梶研 [mocopi センシング の環境を整える]

3年セミナー:??% []mocopiでセンシング [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 [x]bvhをパースするパッケージを作る [x]csvに書き出せるアプリを作る [x]複数人の絡みを取ってみる []複数人の動作を可視化できるアプリを作る []Unityで複数人の動作を可視化できるパッケージを作る []研究をしたい []テーマを考える []研究する []論文を書く []発表する 1月~研究 12月WiNF2024 mocopiとgLTFの関節と回転の対応が分からない →一部分だけ動かす 1.右足を前にあげる 1.右足を左にあげる 1.右膝を曲げて上にあげる 1.足をつけたまま回転する タイムスタンプ取れば良かった r_up_leg足の付け根の回転 r_low_leg膝の回転 真上から見て 前へXrotation(負) 右へZrotation(負) 右回転Yrotation(負) r_foot足の付け根の回転 不明 r_toes足の付け根の回転 不明 いい写真は撮れませんでした. 楽しめなかったので、良いセンシングできませんでした. (ずっと手叩いてただけ) 明日もライブに行くので、今度こそセンシングしたい. 梶研でライブを見るために、DVDプレイヤーを買った.

2023年12月5日

梶研 [mocopi センシング の環境を整える]

梶研 [mocopi センシング の環境を整える]

3年セミナー:??% []mocopiでセンシング [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 [x]bvhをパースするパッケージを作る [x]csvに書き出せるアプリを作る [x]複数人の絡みを取ってみる []複数人の動作を可視化できるアプリを作る []研究をしたい []テーマを考える []研究する []論文を書く []発表する 1月~研究 12月WiNF2024 Unity bvhを再生するにはblenderでfbx形式に処理する必要がある UDPでデータを送信すれば再生できる BVHsender(SONY公式) BVHを再生できる 複数同時に再生することができない そもそも再生目的でない BVHファイルから直接アニメーションを再生できるようにする ただし複数ファイルを同時に再生できるようにすること 体全体と上半身(体,頭,手など)の動きは再現できた。 下半身の動きがそのままでは荒ぶってしまう →bvhとvrm(モデル)のボーンの違い? 回転量の単位が違う bvh形式度数法(deg) gLTF形式弧度法(rad) 回転量が一部異なる ex)root(腰)のy軸の回転量はbvh+180度  上腕のz軸の回転量はbvh 下半身の動作も再現できるようにする 複数ファイルあるときの進行時間を揃える bvhのフレーム数が異なる場合、2週目からずれてしまう 初期位置・回転量を変更できるようにする 他のやり方も探す UnrealEngineではbvh形式を再生できるかも? なし mocopiを持って行ったが、さすがに付けれる環境ではなかった。 スマホでセンシングしたが、保存に失敗した。 研究のテーマ決めの参考にしたかった... 今週もライブに行くので再戦する

2023年11月27日

梶研 [mocopi センシング]

梶研 [mocopi センシング]

3年セミナー:??% []mocopiでセンシング [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 [x]bvhをパースするパッケージを作る [x]csvに書き出せるアプリを作る [x]複数人の絡みを取ってみる []動作判別 []研究をしたい []テーマを考える []研究する []論文を書く []発表する 1月~研究 12月WiNF2024 なれた! 第一回戦 第二回戦 お互いスタート地点に立って開始した 後半に揺れが大きくなっているのがわかる それぞれのターンで姿勢が変わっているのがわかる どれだけ動いているかとれそう グラフからは状況がわからない 二人の絡みなど (編集で横並びにしています) 簡単に動作を確認したい 複数人を同時に表示したい リアルタイムで表示と保存をしたい 今後のために動作を確認できるものを制作する 目標がないため、mocopiで目指すところを考えたい なし 「スマホアプリも触れる」から「web一筋」に路線変更 デザインは旧バージョンと同じ pandacss(CSSinJS)を触れた Next14(AppRouter)とStaticExport(静的レンダリング)を使った コンポーネントの分け方を意識した 汎用性が高くなるようにした テストが書きやすい構造にした AppRouterに合わせたアーキテクチャにした ESLintとPrettierで統一的な書き方になるようにした issuesを活用してブランチを使い分けるようにした etc. さまざまなcssライブラリを使う アーキテクチャを知る 良いコンポーネントの書き方を学ぶ 良いcssの書き方を学ぶ テストコードを書く バックエンドをもっと勉強する クラウド(AWS・GCP)に慣れる これを踏まえた上で、何か大きめのプロダクトを制作し継続的な開発をしたい

2023年11月21日

梶研 [mocopi センシング]

梶研 [mocopi センシング]

[x]"地図は意外とウソつき"を読む []情報処理学会ジュニア会員になる []mocopiでセンシング [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 [x]bvhをパースするパッケージを作る []動作判別 [x]csvに書き出せるアプリを作る []複数人の絡みを取ってみる []研究をしたい []テーマを考える []研究する []論文を書く []発表する 1月~研究 12月WiNF2024 ~~Twitter~~Xで気になっていたものが梶研にあったから読んだ。 前に情報処理学会で"学生会員"で申し込んで、放置してたら金曜日に請求がきた。 ジュニア会員に変更したいが分からない これから簡単にmocopiの動作をとれるようにする 骨格情報をbvhファイルから取得するように変更した 骨格情報を変更できるようにした bvhファイルをパースしてDataframeとして扱えるようにした 初期位置/回転量を変更できるようにした モーションデータを変更できるようにした csvに書き出せるようにした Dataframeからbvhファイルに書き出せるようにした shell $pipinstallmcp_persor shell frommcp_persorimportBVHparser python bvhp=BVHparser('bvh/mocopimove.bvh') motion_df=bvhp.get_motion_df() 関節名やファイル構造を知っている前提で、パースしていたが、 全ての情報をBVHファイルから取得するようにした python offset=bvhp.get_joint_offset('r_hand') offset[0]+=10 bvhp.set_joint_offset('r_hand',offset) 人の体に合わせて変更でき、より正確な動作になる python relative_motion_df=bvhp.get_joint_motion_df(joint_name,mode='relative') python relative_motion_df=bvhp.get_joint_motion_df(joint_name,mode='absolute') python init_pos=bvhp.get_initial_position() init_rot=bvhp.get_initial_rotation() bvhp.set_initial_position([0,0,0]) bvhp.set_initial_rotation([0,0,0]) 動いてからデータの取得を開始しても補正できる。 複数人での絡みをとった場合に補正できる。 python relative_motion_df=bvhp.get_joint_motion_df(joint_name,mode='relative') relative_motion_df['Xposition']+=10 bvhp.set_joint_motion_df(joint_name,relative_motion_df,mode='relative') python bvhp.to_csv('mocopimove.csv') dataframeを扱っているから要らないけど、csvに書き出せるようにした python bvhp.to_bvh('mocopimove.bvh') 調整等をしたあとに、bvhで書き出して確認をしたりできる キーバインドが気に入ってVScodeのキーバインドをEmacs風にした 最終的に更にVScodeに依存することになった 思ったより面白くなかった ! ハッカソンに出る友達にAPIの作り方を教えてたら作りたくなった。 コントリビューションが前日以上であれば進化し、前日未満であれば退化する 供養のつもりでポストしたら、思いの外好評だった。 ~~ハッカソンのネタ潰してごめんなさい~~

2023年11月14日

梶研 [mocopi センシング]

梶研 [mocopi センシング]

[]mocopiでセンシング [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 []bvhをパースするパッケージを作る []動作判別 []csvに書き出せるアプリを作る []研究をしたい []テーマを考える []研究する []論文を書く []発表する 1月~研究 12月WiNF2024 4号館別館の3階から2階へ下りて、上る 階段を上ったのに気圧にあまり変化がない →ポケットに入れていたから? 撮り直す 3回+1回+1回 rootの位置(y)は、地面を基準としている 階段を上り下りすると、基準が変わり補正が掛かる 手足がついた瞬間に基準が変わり、補正されるため、 ジャンプ中や、一歩を踏み出している時は基準が変わらない 平面空間であれば取れるが、上下する階段やエレベーター等の判別は難しそう 何やればいいか迷走してます 現状、bvhをパースするパッケージはないため、自作する 各関節は相対的な位置・角度で表されているため扱いづらい →簡単に絶対的な位置・角度を取得できるようにする 2行で取得できるようになった python bvhp=BVHparser('sample/jump.bvh') absolute_motion_df=bvhp.getAbsoluteMotionDataframe('r_toes') 関節の位置関係をベタ書きではなく、ファイルから取得できるようにする モーションのチャンネルをファイルから取得できるようにする 初期の位置を変更できるようにする 初期の骨格同士のオフセットをファイルから取得できるようにする 初期の骨格のオフセットを変更できるようにする 太もも用拡張バンドが無償提供されるらしい https//www.sony.jp/mocopi/info/20231106.html 夢が詰まってる togawaさんから滞在ウォッチについて聞いた。 やりたいところがほぼ終わってた 物理ビーコンのセキュリティ(uuidが変わらない)というところは面白そう これは3年生の研究? 使い道が思いつかない ドラゴンナイト中の動き 撮影禁止の代わりにその時の自分の様子を残す mocopiで全身をとる 詳細に残せる 手軽さがない スマホで何種類か推定 大まかにしか推定できない 手軽 その場の盛り上がりをみんなで共有 その場のひとたちで何か マップ上でぴょんぴょんしてる様子をみる 主催者が盛り上がりを見る? ペンライトを制御する感じで何か esaをCMSとして投稿・編集できるようにした パフォーマンスを100にしたい パソコンが最近うめきをあげるようになって、軽めのエディターに乗り換えたい 起動がはやい 多分Rust(Tauri)製のエディター デフォルトではvimバインド 拡張機能は無い 起動がとてもはやい 完全にRust製のエディター デフォルトではvimバインド 拡張機能がある(Rust製)

2023年11月6日

梶研 [mocopi センシング]

梶研 [mocopi センシング]

[]端末姿勢推定 [x]データを収集 [x]グラフを作成 [x]静止状態の判別 [x]端末の姿勢を推定 [x]加速度を世界座標に変換 [x]Unityで可視化 []mocopiでセンシング [x]mocopixUnity [x]色んな動作をとる [x]誤差を計測(簡易) [x]動作をグラフ化 []動作判別 []csvに書き出せるアプリを作る []Androidアプリ開発 1月~研究 12月WiNF2024 端末の姿勢を可視化 各軸の回転とy軸を変動させた csvに書き出せるアプリを作っていたが、時間がかかりそうなので、 bvhで保存したファイルからの動作推定を先にした モードをモーションの保存に切り替えて、bvhファイルとして保存する. >mocopiアプリで記録したモーションデータ(BVH形式)を、ローカルネットワーク上にUDP送信することができるアプリケーションです。 WireSharkで見てみると、UDPで送信されていることがわかる あまり使い道はなさそう HIERARCHYは、モデルの構造を定義している MOTIONは、実際の動作が書かれている bvh HIERARCHY ROOTroot { OFFSET093.29290 CHANNELS6XpositionYpositionZpositionZrotationXrotationYrotation JOINTtorso_1 { OFFSET05.078671.15138 CHANNELS6XpositionYpositionZpositionZrotationXrotationYrotation JOINTtorso_2 { OFFSET05.616611.07143 CHANNELS6XpositionYpositionZpositionZrotationXrotationYrotation JOINTtorso_3 { ... } } MOTION Frames3062 FrameTime0.016667 093.2929000005.078671.1513800005.616611.071430001.02604e175.989780.115010001.10457e176.505830.4435230001.97295e177.605481.505930002.53307e179.497370.9144920002.90401e1710.55131.576910001.29193e174.786440.7153390001.8116e174.821090.4217910002.00958e174.830410.7650620001.232997.607317.5337400012.95473.24953.2687200029.20810.05980810.13703900024.2340.04962190.1137010001.232997.607297.5336500012.95473.24953.2687200029.20810.05980810.13703900024.2340.04962180.1137020009.236734.205562.03270000.85235338.77210.6551870002.3262240.40176.048750000.7790969.884412.49590009.236734.205562.03270000.85235338.77210.6551870002.3262240.40176.048750000.7790969.884412.4959000 44.719293.5259214.1910.1243291.31566169.8405.078671.151380.1588492.68890.51708505.616611.071430.34230.928090.3943351.02604e175.989780.115010.4075631.162440.2684271.10457e176.505830.4435230.4795234.328260.253581.97295e177.605481.505930.4758585.673730.3563512.53307e179.497370.9144920.4575176.574550.4872122.90401e1710.55131.576910.01675790.08547280.004180961.29193e174.786440.7153390.4917593.818840.7332531.8116e174.821090.4217910.2109342.3270.4819412.00958e174.830410.7650620.5719760.1459130.01297281.232997.607317.533741.418720.9764430.14433512.95473.24953.2687260.276441.946519.474129.20810.05980810.13703911.859613.968100.00524.2340.04962190.1137015.6247955.68758.463861.232997.607297.533652.742672.255951.0646112.95473.24953.2687270.656817.73277.3217529.20810.05980810.13703911.394415.7467108.97924.2340.04962180.1137022.2410527.17455.174829.236734.205562.03271.2541.5443218.59890.85235338.77210.6551870.2649130.9890120.01497662.3262240.40176.048750.6631330.25618415.34920.7790969.884412.49592.87313e168.0567e162.29556e179.236734.205562.03272.611285.9666924.08230.85235338.77210.6551871.12374.196040.03210322.3262240.40176.048752.694460.018351815.61090.7790969.884412.49596.56914e165.57189e161.27433e14 44.68393.5057214.2210.1284641.26792169.84805.078671.151380.168032.954830.51287805.616611.071430.3521751.10310.3875461.02604e175.989780.115010.4160091.132460.2613181.10457e176.505830.4435230.4856224.522490.2451641.97295e177.605481.505930.4836516.009810.3508092.53307e179.497370.9144920.4681496.980040.4886322.90401e1710.55131.576910.01715450.07891890.004283911.29193e174.786440.7153390.4911694.333620.6899981.8116e174.821090.4217910.2452642.34070.4649872.00958e174.830410.7650620.6129970.008983310.0532461.232997.607317.533741.587251.305280.32329612.95473.24953.2687260.044941.803120.082829.20810.05980810.13703911.852314.0092100.20924.2340.04962190.1137015.4146755.82288.198811.232997.607297.533652.938652.57930.89450512.95473.24953.2687270.624117.69227.8201229.20810.05980810.13703911.379515.7888109.19724.2340.04962180.1137022.1411427.09354.988649.236734.205562.03271.235761.5014918.67310.85235338.77210.6551870.2650780.989630.01498462.3262240.40176.048750.5987860.32772415.34520.7790969.884412.49591.08639e177.97031e161.43165e179.236734.205562.03272.615095.9372924.08240.85235338.77210.6551871.130514.221420.03204672.3262240.40176.048752.658520.037434715.6050.7790969.884412.49595.96354e165.59082e161.27471e14 ... 各部位はROOT(root)を基準に、JOINTで定義されている MOTIONは、1行に1フレームのデータが書かれている >rootの位置(x,y,z)rootの回転(x,y,z)torso_1の位置(x,y,z)torso_1の回転(x,y,z)torso_2の位置(x,y,z)... ROOT(HIPS)の位置と回転 ほぼ一次関数になっていて明らかにおかしい y軸の目盛り間隔が指定通りにならない y軸の範囲が指定通りにならない csvに書き出してスプレッドシートでグラフ化 データは問題なさそう 型変換が正しくなく、数字ではなくオブジェクトになっていた root(腰)の位置と回転 r_up_leg(右足付け根)の位置と回転 l_shoulder(左肩)の位置と回転 ふらついているのが気になるが、あらかた正しそう →二乗平均誤差(RMSE)を出したい 半年ぶりに外山さんと林先輩とシス研の先輩で寿司大食い対決をした 23皿+デザート食べた。 外山さんに1皿負けた 4人で10,995円 焼きパインがめちゃくちゃ美味しかった 食べすぎて引かれた

2023年10月31日

梶研 [mocopi センシング]

梶研 [mocopi センシング]

3年セミナー:??% []mocopiでセンシング [x]mocopixUnity [x]色んな動作をとる []誤差を計測 []csvに書き出せるデスクトップアプリを作る []動作判別 [](mocopiから直接データを取りたい) []Androidアプリ開発 23年 12月研究テーマを決める 24年 1月~研究 12月WiNF 参考 1.mocopi(本体)[Bluetooth]→mocopi(アプリ) 2.mocopi(アプリ)[UDP]→Python(mcpreciever) 3.Python(mcpreciever)[VMC]→Unity 実際に30m歩く 歩きつつmocopi(アプリ)内のグリッドを数える 30m歩いたところ、バーチャルでは29m歩いたことになった 外で100mくらい歩いて誤差を計測したい 既存のアプリ等の問題点 扱いづらい PC側が受信(Python)と表示(Unity)で分かれている csv書き出し未対応 Pythonに追加すれば良いが、扱いづらい 移動距離等が分かりづらい グリッドを数える必要がある Tauri Rust(受信側) Next.js(表示側) ブラウザ上で動くようにした 三角関数で円形に動くアニメーションを作った →UDPで受信したデータを元に動かすようにする 破壊的変更により今までの情報がほとんど使えず、 公式ドキュメントを読みながら制作した NextRustでUDPを取得する 激しい動きをすると狂う 精度が完璧ではない 手先の位置 肘・膝の曲げ具合 座った時の体の傾き 足を上に上げたとき不安定 長距離歩いた時の誤差 もっとしっかり取りたい100mとか グラウンドぐるぐる歩いた時の誤差をとりたい 走たときはどうなるか 素振り,着席時の動作判別 2人以上の絡みをとりたい 馬跳 組体操 HIPを基準としたセンサとして使える? 土日にシス研で集まってみた

2023年10月23日

梶研 [Unity で可視化]

梶研 [Unity で可視化]

3年セミナー:??% []端末姿勢推定 [x]データを収集 [x]グラフを作成 [x]静止状態の判別 [x]端末の姿勢を推定 [x]加速度を世界座標に変換 [x]Unityで可視化 []カルマンフィルタを用いた推定 ~12月Androidアプリ開発 Unityでスマホの動きを可視化した Androidアプリ mocopi スマホと組み合わせてより詳細な動きをとりたい mocopi同士の位置 座っている状態の精度 気圧 技育CAMPvol.7 技育展予選 技育CAMPvol.9 HackU 技育CAMPアドバンス 技育展決勝 工科展 新たな誘惑から逃げ切れた 11月中ばでコメダ辞めます 最近の疲れを癒されてきた

2023年10月17日

梶研 [工科展]

梶研 [工科展]

3年セミナー:??% []端末姿勢推定 [x]データを収集 [x]グラフを作成 [x]静止状態の判別 [x]端末の姿勢を推定 [x]加速度を世界座標に変換 []Unityで可視化 []カルマンフィルタを用いた推定 9月中旬まで端末姿勢推定(加速度,角速度) 10月中端末姿勢推定(カルマンフィルタ) 11月中Kotlin(とRust)の勉強「いつでもセンシングアプリ」 大学内の施設や教室の混雑を知れるアプリ フロント Next.js バック Go Gin Gorm ipv4 smtp 優秀賞をいただいた ネットワークつよつよな方が来たりしたが、 全ての質問に対して回答とスライドを用意しており、 完璧に対応できたのが良かった. チームが崩壊しており、牧野先輩・林先輩に助けを求めてなんとか完成させており、 自分たちでできなかったという点ではPMとして良くなかった。 牧野先輩に買わせた韓国のサイダーがめっちゃ売れた 売れ残りのたこ焼きを食べながらタコパした

2023年10月10日

1
12
2