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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ARIYAMA Keiji
December 01, 2017
Technology
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vuzix Developer Conference 20171201
2017年12月1日に開催されたVuzix Developer Conferenceでの発表資料です。
「M300で アプリ開発」
ARIYAMA Keiji
December 01, 2017
More Decks by ARIYAMA Keiji
See All by ARIYAMA Keiji
Build with AI
keiji
0
270
DroidKaigi 2023
keiji
0
2.1k
TechFeed Conference 2022
keiji
0
340
Android Bazaar and Conference Diverse 2021 Winter
keiji
0
920
ci-cd-conference-2021
keiji
1
1.3k
Android Bazaar and Conference 2021 Spring
keiji
3
930
TFUG KANSAI 20190928
keiji
0
170
Softpia Japan Seminar 20190724
keiji
1
210
pixiv App Night 20190611
keiji
1
640
Other Decks in Technology
See All in Technology
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
290
シンガポールで登壇してきます
yama3133
0
250
Network Firewallやっていき!
news_it_enj
0
170
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
2
430
SRE Next 2026 何でも屋からの脱却
bto
0
1k
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
3
1.1k
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
230
Multicaで30個のミニプロジェクトをAIエージェント運用して見えてきたこと
eiei114
0
400
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
490
AI時代の闇と光
tatsuya1970
0
110
ruby.wasmとPicoRuby.wasmに対応した仮想DOMライブラリを作ってる話 #kaigieffect_kaigi
sue445
PRO
0
160
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
0
160
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.4k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
220
The Language of Interfaces
destraynor
162
27k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
350
Visualization
eitanlees
152
17k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Building the Perfect Custom Keyboard
takai
2
810
Why Our Code Smells
bkeepers
PRO
340
58k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
870
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
180
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