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
200
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
200
DroidKaigi 2023
keiji
0
1.7k
TechFeed Conference 2022
keiji
0
270
Android Bazaar and Conference Diverse 2021 Winter
keiji
0
870
ci-cd-conference-2021
keiji
1
1.2k
Android Bazaar and Conference 2021 Spring
keiji
3
790
TFUG KANSAI 20190928
keiji
0
110
Softpia Japan Seminar 20190724
keiji
1
170
pixiv App Night 20190611
keiji
1
590
Other Decks in Technology
See All in Technology
MagicPodが描くAIエージェント戦略とソフトウェアテストの未来
magicpod
0
340
VitePress & MCPでアプリ仕様のオープン化に挑戦する
hal_spidernight
0
150
え!! 日本国内でGo言語のバイリンガル勉強会を!?
logica0419
2
110
ホワイトボックス& SONiC アーキテクチャ(全体像) - SONiC Workshop Japan 2025
ebiken
PRO
1
450
事業と組織から目を逸らずに技術でリードする
ogugu9
19
5.5k
AWS_MCP_Servers入門.pdf
naotoiso
0
210
激動の一年を通じて見えてきた「技術でリードする」ということ
ktr_0731
8
8.6k
スプリントゴールで価値を駆動しよう
takufujii
3
1.5k
Software Delivery Observability CI・CD , DORA metrics も Datadog で可視化しよう / datadog-ci-cd-observability
parupappa2929
0
200
4月15日の AZ 障害をテクサポの中の人目線で振り返ってみる
kazzpapa3
3
190
「祝」Desktop Linux 元年 2025年度版
rlysleepynick
0
110
AWS LambdaをTypeScriptで動かして分かった、Node.jsのTypeScriptサポートの利点と課題
smt7174
1
860
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
RailsConf 2023
tenderlove
30
1.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
105
19k
Making Projects Easy
brettharned
116
6.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.4k
Fireside Chat
paigeccino
37
3.4k
What's in a price? How to price your products and services
michaelherold
245
12k
Site-Speed That Sticks
csswizardry
6
560
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
How STYLIGHT went responsive
nonsquared
100
5.5k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
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