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
Vuzix Developer Conference 20171201
Search
ARIYAMA Keiji
December 01, 2017
Technology
0
210
Vuzix Developer Conference 20171201
2017年12月1日に開催されたVuzix Developer Conferenceでの発表資料です。
「M300で アプリ開発」
ARIYAMA Keiji
December 01, 2017
Tweet
Share
More Decks by ARIYAMA Keiji
See All by ARIYAMA Keiji
Build with AI
keiji
0
220
DroidKaigi 2023
keiji
0
1.9k
TechFeed Conference 2022
keiji
0
290
Android Bazaar and Conference Diverse 2021 Winter
keiji
0
880
ci-cd-conference-2021
keiji
1
1.2k
Android Bazaar and Conference 2021 Spring
keiji
3
820
TFUG KANSAI 20190928
keiji
0
130
Softpia Japan Seminar 20190724
keiji
1
180
pixiv App Night 20190611
keiji
1
600
Other Decks in Technology
See All in Technology
GPUをつかってベクトル検索を扱う手法のお話し~NVIDIA cuVSとCAGRA~
fshuhe
0
170
AIを使ってテストを楽にする
kworkdev
PRO
0
230
IBC 2025 動画技術関連レポート / IBC 2025 Report
cyberagentdevelopers
PRO
2
210
SOTA競争から人間を超える画像認識へ
shinya7y
0
610
Kubernetes self-healing of your workload
hwchiu
1
610
DMMの検索システムをSolrからElasticCloudに移行した話
hmaa_ryo
0
170
Zero Trust DNS でより安全なインターネット アクセス
murachiakira
0
110
20251027_マルチエージェントとは
almondo_event
1
470
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
320
ラスベガスの歩き方 2025年版(re:Invent 事前勉強会)
junjikoide
0
520
オブザーバビリティと育てた ID管理・認証認可基盤の歩み / The Journey of an ID Management, Authentication, and Authorization Platform Nurtured with Observability
kaminashi
1
1.1k
だいたい分かった気になる 『SREの知識地図』 / introduction-to-sre-knowledge-map-book
katsuhisa91
PRO
3
1.5k
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
A better future with KSS
kneath
239
18k
The Illustrated Children's Guide to Kubernetes
chrisshort
49
51k
Become a Pro
speakerdeck
PRO
29
5.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
Faster Mobile Websites
deanohume
310
31k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Making Projects Easy
brettharned
120
6.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Transcript
C-LIS CO., LTD.
C-LIS CO., LTD. ༗ࢁܓೋʢ,FJKJ"3*:"."ʣ $-*4$0 -5% "OESPJEΞϓϦ։ൃνϣοτσΩϧ Photo by
Koji MORIGUCHI (MORIGCHOWDER)
76;*9%FWFMPQFS$POGFSFODF .ͰɹɹɹɹΞϓϦ։ൃ
.
6*ʢग़ྗʣ nHD - 640x360 (16:9)
6*ʢೖྗʣ Χϝϥ
6*ʢೖྗʣ KEYCODE_DPAD_LEFT KEYCODE_DPAD_RIGHT KEYCODE_ENTER
6*ʢೖྗʣʔϘλϯΛԡ͠ ϗʔϜϘλϯ KEYCODE_BACK KEYCODE_MENU
6*ʢೖྗʣ λονύου
.ΞϓϦ։ൃߟྀ͖͢ 3VOUJNF1FSNJTTJPO Χϝϥͷ্Լ λονύωϧʹґଘ͠ͳ͍ը໘ઃܭ
"OESPJE.BSTINBMMPX
3VOUJNF1FSNJTTJPO
Χϝϥͷ্Լ
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); mSensorOrientation
= characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); // Orientation int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); int orientation = (ORIENTATIONS.get(rotation) + mSensorOrientation + 270) % 360; captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, orientation); ݱࡏͷը໘ํɾΧϝϥͷํΛߟྀ https://github.com/googlesamples/android-Camera2Basic
λονύωϧʹґଘ͠ͳ͍ը໘ઃܭ
ࣄྫ̍ ϑΥʔΧεͷҠಈ
ϑΥʔΧεͷॱ൪͕ײతͰͳ͍
<LinearLayout> <LinearLayout> <Button android:id="@+id/button1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button 1" />
<Button android:id="@+id/button2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button 2" /> </LinearLayout> ϑΥʔΧεҠಈ <LinearLayout> <Button android:id="@+id/button3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button 3" /> <Button android:id="@+id/button4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button 4" /> </LinearLayout> </LinearLayout>
<LinearLayout> <LinearLayout> <Button android:id="@+id/button1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button 1" android:nextFocusRight="@+id/button4"
android:nextFocusLeft="@+id/button2" /> <Button android:id="@+id/button2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button 2" android:nextFocusRight="@+id/button1" android:nextFocusLeft="@+id/button3" /> </LinearLayout> OFYU'PDVT-FGU3JHIU <LinearLayout> <Button android:id="@+id/button3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button 3" android:nextFocusRight="@+id/button2" android:nextFocusLeft="@+id/button4" /> <Button android:id="@+id/button4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button 4" android:nextFocusRight="@+id/button3" android:nextFocusLeft="@+id/button1" /> </LinearLayout> </LinearLayout>
ϑΥʔΧεҠಈઃఆޙ
ࣄྫ̎ λον͕͑ͳ͍߹ͷ6*
ΞΫγϣϯόʔͷεΠονʹΞΫηεͰ͖ͳ͍ https://github.com/DeviceConnect/DeviceConnect-Android
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/activity_service_manager_power" app:actionViewClass="android.widget.Switch" app:showAsAction="always"
android:title="@string/app_name"/> <item android:id="@+id/activity_service_menu_item_settings" app:showAsAction="never" android:title="@string/activity_service_menu_settings"/> <item android:id="@+id/activity_service_menu_item_help" app:showAsAction="never" android:title="@string/activity_service_menu_help"/> </menu> SFTNFOVBDUJWJUZ@TFSWJDF@MJTUYNM
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/activity_service_menu_item_settings" app:showAsAction="never" android:title="@string/activity_service_menu_settings"
/> <item android:id="@+id/activity_service_menu_item_help" app:showAsAction="never" android:title="@string/activity_service_menu_help" /> </menu> SFTNFOVOPUPVDIBDUJWJUZ@TFSWJDF@MJTUYNM
<LinearLayout android:id="@+id/activity_service_list_buttons_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"> <Switch android:id="@+id/activity_service_list_manager_switch" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="8dp"
android:layout_weight="1" android:text="@string/app_name" /> <Button android:id="@+id/activity_service_list_search_button" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="8dp" android:layout_weight="1" android:text="@string/activity_service_list_search" /> </LinearLayout> SFTMBZPVUOPUPVDIBDUJWJUZ@TFSWJDF@MJTUYNM
λονύωϧ͕͑ͳ͍6*ʹରԠ
76;*9%FWFMPQFS$POGFSFODF .ͰɹɹɹɹΞϓϦ։ൃ
76;*9%FWFMPQFS$POGFSFODF .ͰػցֶशΞϓϦ։ൃ
5FOTPS'MPXͱ ݄ɺถ(PPHMF͕ࣾΦʔϓϯιʔεԽͨ͠ ػցೳ͚ͷܭࢉϑϨʔϜϫʔΫ
5FOTPS'MPXͷಛ ࣄલʹܭࢉάϥϑΛߏஙɺ࣮ߦ͢ΔύϥμΠϜ େنͳฒྻɾࢄܭࢉʹରԠ 1$ʢαʔόʔʣʹՃ͑ͯɺ ϞόΠϧɺϘʔυίϯϐϡʔλʔͳͲ ෳͷϓϥοτϑΥʔϜ্Ͱಈ࡞ʢ˞ʣ ※ ݱࡏinferenceʢਪʣݶఆ
"OESPJEʹରԠ ͷηϯαʔใΛͬͯδΣενϟʔΛ ผ͢Δ"OESPJEΞϓϦͷ࡞ 5FOTPS'MPXͷֶशࡁΈϞσϧΛ"OESPJE ΞϓϦ͔ΒಡΈࠐΜͰར༻͢Δ
࡞Δͷ .Λணͯ͠टΛৼΔδΣενϟͰɺ :&4ɾ/0 Λఆ͢Δ
Ϟσϧ conv 1x5 64 max_pool 1x3 fully connected 192
ʢdropout 0.5ʣ output 2 size = 256
ֶश݅ ܇࿅σʔλ:FT /P ֶशΞϧΰϦζϜ"EBN ֶश όοναΠζ ֶशεςοϓ
ग़ྗϞσϧͷߏ model.pb input_accel input_gyro softmax_logits
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude
group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' compile 'org.tensorflow:tensorflow-android:1.4.0' } CVJMEHSBEMF
ֶशࡁΈϞσϧͷஔ
private static final String MODEL_FILEPATH = "model.pb"; private final TensorFlowInferenceInterface
mTfInference; GestureDetector(AssetManager am) { mTfInference = new TensorFlowInferenceInterface(am, MODEL_FILEPATH); } ϞσϧͷಡΈࠐΈ
GestureType recognizeGesture(float[] accelData, float[] gyroData) { mTfInference.feed("input_accel", accelData, accelData.length);
mTfInference.feed("input_gyro", gyroData, gyroData.length); mTfInference.run(new String[]{"softmax_logits"}); mTfInference.fetch("softmax_logits", mRecognizeGestureResult); for (int index = 0; index < mRecognizeGestureResult.length; index++) { (FTUVSF%FUFDUPSͷ࣮ʢGFFEʣ
GestureType recognizeGesture(float[] accelData, float[] gyroData) { mTfInference.feed("input_accel", accelData, accelData.length);
mTfInference.feed("input_gyro", gyroData, gyroData.length); mTfInference.run(new String[]{"softmax_logits"}); mTfInference.fetch("softmax_logits", mRecognizeGestureResult); for (int index = 0; index < mRecognizeGestureResult.length; index++) { (FTUVSF%FUFDUPSͷ࣮ʢSVOʣ
GestureType recognizeGesture(float[] accelData, float[] gyroData) { mTfInference.feed("input_accel", accelData, accelData.length);
mTfInference.feed("input_gyro", gyroData, gyroData.length); mTfInference.run(new String[]{"softmax_logits"}); mTfInference.fetch("softmax_logits", mRecognizeGestureResult); for (int index = 0; index < mRecognizeGestureResult.length; index++) { (FTUVSF%FUFDUPSͷ࣮ʢGFUDIʣ
σϞ
C-LIS CO., LTD. ຊࢿྉɺ༗ݶձࣾγʔϦεͷஶ࡞Ͱ͢ɻຊࢿྉͷશ෦ɺ·ͨҰ෦ʹ͍ͭͯɺஶ࡞ऀ͔ΒจॻʹΑΔڐΛಘͣʹෳ͢Δ͜ͱې͡ΒΕ͍ͯ·͢ɻ 5IF"OESPJE4UVEJPJDPOJTSFQSPEVDFEPSNPEJpFEGSPNXPSLDSFBUFEBOETIBSFECZ(PPHMFBOEVTFEBDDPSEJOHUPUFSNTEFTDSJCFEJOUIF$SFBUJWF$PNNPOT"UUSJCVUJPO-JDFOTF ໊֤ɾϒϥϯυ໊ɺձ໊ࣾͳͲɺҰൠʹ֤ࣾͷඪ·ͨొඪͰ͢ɻຊࢿྉதͰɺɺɺäΛׂѪ͍ͯ͠·͢ɻ 5IF"OESPJESPCPUJTSFQSPEVDFEPSNPEJpFEGSPNXPSLDSFBUFEBOETIBSFECZ(PPHMFBOEVTFEBDDPSEJOHUPUFSNTEFTDSJCFEJOUIF$SFBUJWF$PNNPOT"UUSJCVUJPO-JDFOTF