Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
筋トレを習慣化させる テクノロジー
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
naokia
December 06, 2018
1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
筋トレを習慣化させる テクノロジー
naokia
December 06, 2018
Featured
See All Featured
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
Leo the Paperboy
mayatellez
8
1.9k
Faster Mobile Websites
deanohume
310
32k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
230
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Paper Plane
katiecoart
PRO
1
52k
エンジニアに許された特別な時間の終わり
watany
107
250k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Producing Creativity
orderedlist
PRO
348
40k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
290
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
Transcript
ےτϨΛश׳Խͤ͞Δ ςΫϊϩδʔ !OBPLJB
ࣗݾհ w Ѫౠथ ͋ͨ͗ͳ͓͖ w UXJUUFS!OBPLJB w ΤϯδχΞɻ"TL%PDUPSTͱήϊϜؔ࿈αʔϏε୲ w
3VCZ +BWB +4ͳͲීஈ৮ͬͯ·͢ w झຯ৯า͖ͱిݯΛΘͳ͍ήʔϜ
ࠓ͢͜ͱ w ϓϥΠϕʔτͰͬͯΔϓϩδΣΫτͷͰ͢ w ےτϨΛͨͯ͘͠ͳ͔ͳ͔श׳ԽͰ͖ͳ͍ਓͰɺے τϨΛश׳ԽͰ͖ΔϕετϓϥΫςΟεΛൃݟͨ͠ʂʂ w ͦͷϕετϓϥΫςΟεΛΑΓ࣮֬ʹ࣮ફ͢ΔͨΊͷ "QQMF8BUDI༻ͷΞϓϦΛ࡞ͬͨ
ࢲͳͥٸʹےτϨΛ ࢝ΊΔΑ͏ʹͳ͔ͬͨ
͋ΔɺΓʹͭ͜͏ͱͯ͠ ෆҙʹؾ͍ͮͨ
ࠓɺΤϯδχΞͱͯ͠ಇ͍ͯ ऩೖΛಘ͍ͯΔ͚Ͳ
֩͠ઓ૪Ͱจ໌่͕յͯ͠ɺ Πϯλʔωοτύιίϯ͕͑ͳ͘ͳͬͨ ΒɺͲ͏ͬͯऩೖΛಘΕ͍͍Μͩɾɾɾʁ
ఆ͢Δੈք؍
None
֩͠ઓ૪ޙͷੈքͰΑ͏͘खʹೖΕͨ ࣄ͕ΥʔϘʔΠͩͬͨΒʁ ମ࿑ಇ ˠࠓ͔ΒےτϨ͢Δ͔͠ͳ͍
w ͍ͭےτϨΛ͠Α͏ͱࢥ͏Μ͚ͩͲɺҙࢥ͕ऑ͗ͯ͢ ·ͱʹଓ͖ͨ͜͠ͱ͕ͳ͍ w ͲΕ͘Β͍ऑ͍͔ͱ͍͏ͱɺՈ͔Βెา̍̌ͷͱ͜Ζ ʹ͋ΔτϨʔχϯάδϜΛʮԕ͍ʯͱ͍͏ཧ༝Ͱୀձͨ͠ ͜ͱ͕͋ΔϨϕϧ
ͦΜͳͰઈରʹےτϨΛ ܧଓͰ͖Δํ๏Λݟ͚ͭ ͨɾɾ
ࢲͷ5XJUUFSΞΧϯτʹͯɻ
ࢲͷ5XJUUFSΞΧϯτʹͯɻ
ࣗʹ՝ͨ͠ϧʔϧ w ຖि࠷ೋճɺඞͣےτϨΛ͢Δ w ےτϨΛͨ͠ΒͦͷࢫΛ5XJUUFSʹॻ͖ࠐΉ w ͠िೋճͷےτϨΛୡ͍ͯ͠ͳ͚ΕɺϑΥϩϫʔ ࢲʹઍԁͷ"NB[POΪϑτ݊ΛٻͰ͖Δ ˠ͜ͷࠒϑΥϩϫʔਓ͘Β͍ͩͬͨͷͰɺےτϨΛଵ
Εࢲ࠷େͰສԁͷଛࣦΛड͚Δ͜ͱʹͳΔɻ ڪා৺ʹۦΒΕͯɺےτϨ͕ḿΔ
݁Ռ w ڪා৺ʹۦΒΕͳ͕Βࡾϲ݄ےτϨΛܧଓ͢Δ͜ͱ͕ Ͱ͖ͨʂʢྺ࠷ߴهʣ
͔͠͠ࡾϲ݄ʹͯ͠࠳ં ͦΕͰ࠷ه
w ୭"NB[POΪϑτ݊Λٻͯ͠དྷͳ͔ͬͨ Կਓ͔ΥονϟʔΛެݴ͢Δਓ͕͍ͨͣͳͷͩ ͕ɾɾɾ
w ୭"NB[POΪϑτ݊Λٻͯ͠དྷͳ͔ͬͨ Կਓ͔ΥονϟʔΛެݴ͢Δਓ͕͍ͨͣͳͷͩ ͕ɾɾɾ ˠҙ֎ͱΈΜͳ༏͔ͬͨ͠
w ҙ֎ͱΈΜͳྑࣝ͋ΔେਓͩͬͨͷͰɺϖφϧςΟͷҙຯ ͕ͳ͔ͬͨ w ےτϨ͢Δͨͼʹ5XJUUFSʹॻ͖ࠐΉͷΊΜͲ͍͘͞͠ɺ ͳΜ͔Ξϐʔϧͯ͠ΔΈ͍ͨͰݏͩ
ͦ͜ͰࣗಈԽΛࢼΈΔ w िೋճےτϨΛߦΘͳ͍ͱɺࣗಈతʹΫϨδοτΧʔυ͔ Β͓ۚΛҾ͖མͱ͍ͯ͘͜͠ͱͰ͖ͳ͍͔ʁ w "QQMF8BUDI্Ͱಈ࡞͠ɺՃηϯαʔͰےτϨͷಈ ͖Λݕͯ͠ɺͦΕ͕Ұఆظ్ؒઈ͑ͨΒ͓ۚΛࣗಈతʹ Ҿ͖མͱ͍ͯͦ͘͠ΜͳΞϓϦ
ػೳ w J1IPOFΞϓϦͰϢʔβʹ݄ऩ खऔΓ ͱɺΫϨδοτΧʔυ ใΛೖྗͤ͞Δ w ےτϨͨ͠ࣄ͕ࣗݾਃࠂͩͱڏِͷਃࠂ͕ՄೳͳͷͰɺ"QQMF 8BUDIͰےτϨͷϞʔγϣϯΛݕ͠ɺهͰ͖ΔΑ͏ʹ͢Δ w
ےτϨͱ͍͍ͬͯΖ͍Ζϝχϡʔ͕͋Δ͕ɺͱΓ͋͑ͣෲے͕ هͰ͖Εྑ͠ͱ͢Δ w िʹೋճҎ্ɺه͕ߦΘΕͳ͔ͬͨΒɺೖྗ͞Ε݄ͨऩʹԠ ͯ͡ɺࣗಈతʹΧʔυ͔ΒҾ͖௨͠Λߦ͏ ʢϓϩτλΠϓͰ͜͜ະ࣮
ϓϩτλΠϓΛ࡞ͬͯ ݟͨ
None
None
γεςϜߏ Amazon DynamoDB Lambda function Amazon API Gateway* ܾࡁใ τϨʔχϯάͷه
ෲےͨ͜͠ͱΛݕ͢Δํ๏ w $PSF.PUJPOΛ༻͍ͯ"QQMF8BUDIͷճసΛर͏ w γϯϓϧʹɺϐον͕࣠Ұఆͷ֯มԽͨ͠Βɺෲے͕ߦ ΘΕͨ͜ͱʹ͢Δ ϩʔϧ ϐον Ϥʔ
σόΠεͷϞʔγϣϯΛर͏ ͨΊͷϋϯυϥΛొ͢Δ let motionManager = CMMotionManager() motionManager.deviceMotionUpdateInterval = 1.0 /
50 // 50hz motionManager.startDeviceMotionUpdates(to: queue) { (deviceMotion: CMDeviceMotion?, error: Error?) in if deviceMotion != nil { self.processDeviceMotion(deviceMotion!) } }
σόΠεͷϞʔγϣϯΛर͏ ͨΊͷϋϯυϥΛొ͢Δ let motionManager = CMMotionManager() motionManager.deviceMotionUpdateInterval = 1.0 /
50 // 50hz motionManager.startDeviceMotionUpdates(to: queue) { (deviceMotion: CMDeviceMotion?, error: Error?) in if deviceMotion != nil { self.processDeviceMotion(deviceMotion!) } }
ճసͷมԽΛݕग़͢Δ let pitchThreshold = 1.95 // Radians let rateThreshold =
3.5 // Radians/sec func processDeviceMotion(_ deviceMotion: CMDeviceMotion) { let rotationRate = deviceMotion.rotationRate let rateX = rotationRate.x // rateBuffer1ඵؒͷճసΛྻͰอ͍࣋ͯ͠Δ(50hzͳͷͰ50Πϕϯτ) rateBuffer.addSample(rateX) if !rateBuffer.isFull() { return } let accumulatedPitchRot = rateBuffer.sum() / 50 let peakRate = accumulatedPitchRot > 0 ? rateAlongGravityBuffer.max() : rateAlongGravityBuffer.min() if (accumulatedPitchRot > pitchThreshold && peakRate > rateThreshold) { incrementCountAndUpdateDelegate() } if (recentDetection && abs(rateBuffer.recentMean()) < resetThreshold) { recentDetection = false rateAlongGravityBuffer.reset() } }
ͦΕͬΆ͘ෲےΛΧϯτͰ ͖ͯྑ͍͕ɾɾ w ࢲͷෲے͔ͩΒ͏·͘ճΧϯτͰ͖ͯΔ͚Ͳɺ͏গ͠ νϡʔχϯάͷ༨͋Δؾ͕͢Δ w צͷྑ͍ਓ͓͔Γͷ௨ΓɺΛ͙ΔΜ͙ΔΜ͢Εෲےͨ͠ ͜ͱʹͳͬͯ͠·͏ w αʔϏεతͳɻ
͠िೋճͷෲے͕ߦΘΕͳ͚ΕɺϢʔβʹొͤͯ͞ΔΧʔ υΛͬͯҾ͖མͱ͕͠ߦΘΕΔ͕ɺܾࡁʹ༻͍͍ͯΔ4USJQFͷ ߹Ͱɺৼࠐઌ͕ࢲ͔ࣗ͠ࢦఆͰ͖ͳ͍
ͦΕͬΆ͘ෲےΛΧϯτͰ ͖ͯྑ͍͕ɾɾ w ࢲͷෲے͔ͩΒ͏·͘ճΧϯτͰ͖ͯΔ͚Ͳɺ͏গ͠ νϡʔχϯάͷ༨͋Δؾ͕͢Δ w צͷྑ͍ਓ͓͔Γͷ௨ΓɺΛ͙ΔΜ͙ΔΜ͢Εෲےͨ͠ ͜ͱʹͳͬͯ͠·͏ w αʔϏεతͳɻ
͠िೋճͷෲے͕ߦΘΕͳ͚ΕɺϢʔβʹొͤͯ͞ΔΧʔ υΛͬͯҾ͖མͱ͕͠ߦΘΕΔ͕ɺܾࡁʹ༻͍͍ͯΔ4USJQFͷ ߹Ͱɺৼࠐઌ͕ࢲ͔ࣗ͠ࢦఆͰ͖ͳ͍ ˠظͤͣͯ͠ϏδωενϟϯεΛग़ͯ͠͠·ͬͨ
·ͱΊ w ڧͳϖφϧςΟ͕͋ΔͱےτϨḿΔ w $PSF.PUJPOҙ֎ͱ؆୯ w ͜ͷΞϓϦΛଞਓʹΘͤͯͦ͜Ͱಘ͓ͨۚͰϥΠβοϓ ʹ͍͚ɺࢲݸਓͷ՝ղܾ͢ΔՄೳੑ͕͋Δ w ։ൃ͢Δߦҝ
ಈ࡞֬ೝͱ͔ ࣗମͰ͍ͩͿෲے͕͑ΒΕ ͨ