Slide 1

Slide 1 text

C-LIS CO., LTD.

Slide 2

Slide 2 text

C-LIS CO., LTD. ༗ࢁܓೋʢ,FJKJ"3*:"."ʣ $-*4$0 -5% "OESPJEΞϓϦ։ൃνϣοτσΩϧ Photo by Koji MORIGUCHI (MORIGCHOWDER)

Slide 3

Slide 3 text

76;*9%FWFMPQFS$POGFSFODF .ͰɹɹɹɹΞϓϦ։ൃ

Slide 4

Slide 4 text

.

Slide 5

Slide 5 text

6*ʢग़ྗʣ nHD - 640x360 (16:9)

Slide 6

Slide 6 text

6*ʢೖྗʣ Χϝϥ

Slide 7

Slide 7 text

6*ʢೖྗʣ KEYCODE_DPAD_LEFT KEYCODE_DPAD_RIGHT KEYCODE_ENTER

Slide 8

Slide 8 text

6*ʢೖྗʣʔϘλϯΛ௕ԡ͠ ϗʔϜϘλϯ KEYCODE_BACK KEYCODE_MENU

Slide 9

Slide 9 text

6*ʢೖྗʣ λονύου

Slide 10

Slide 10 text

.ΞϓϦ։ൃߟྀ͢΂͖఺ 3VOUJNF1FSNJTTJPO Χϝϥͷ্Լ λονύωϧʹґଘ͠ͳ͍ը໘ઃܭ

Slide 11

Slide 11 text

"OESPJE.BSTINBMMPX

Slide 12

Slide 12 text

3VOUJNF1FSNJTTJPO

Slide 13

Slide 13 text

Χϝϥͷ্Լ

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

λονύωϧʹґଘ͠ͳ͍ը໘ઃܭ

Slide 16

Slide 16 text

ࣄྫ̍ ϑΥʔΧεͷҠಈ

Slide 17

Slide 17 text

ϑΥʔΧεͷॱ൪͕௚ײతͰͳ͍

Slide 18

Slide 18 text

ϑΥʔΧεҠಈ

Slide 19

Slide 19 text

OFYU'PDVT-FGU3JHIU

Slide 20

Slide 20 text

ϑΥʔΧεҠಈઃఆޙ

Slide 21

Slide 21 text

ࣄྫ̎ λον͕࢖͑ͳ͍৔߹ͷ6*

Slide 22

Slide 22 text

ΞΫγϣϯόʔͷεΠονʹΞΫηεͰ͖ͳ͍ https://github.com/DeviceConnect/DeviceConnect-Android

Slide 23

Slide 23 text

SFTNFOVBDUJWJUZ@TFSWJDF@MJTUYNM

Slide 24

Slide 24 text

SFTNFOVOPUPVDIBDUJWJUZ@TFSWJDF@MJTUYNM

Slide 25

Slide 25 text

SFTMBZPVUOPUPVDIBDUJWJUZ@TFSWJDF@MJTUYNM

Slide 26

Slide 26 text

λονύωϧ͕࢖͑ͳ͍6*ʹରԠ

Slide 27

Slide 27 text

76;*9%FWFMPQFS$POGFSFODF .ͰɹɹɹɹΞϓϦ։ൃ

Slide 28

Slide 28 text

76;*9%FWFMPQFS$POGFSFODF .ͰػցֶशΞϓϦ։ൃ

Slide 29

Slide 29 text

5FOTPS'MPXͱ͸ ೥݄ɺถ(PPHMF͕ࣾΦʔϓϯιʔεԽͨ͠ ػց஌ೳ޲͚ͷܭࢉϑϨʔϜϫʔΫ

Slide 30

Slide 30 text

5FOTPS'MPXͷಛ௃ ࣄલʹܭࢉάϥϑΛߏஙɺ࣮ߦ͢ΔύϥμΠϜ େن໛ͳฒྻɾ෼ࢄܭࢉʹରԠ 1$ʢαʔόʔʣʹՃ͑ͯɺ
 ϞόΠϧɺϘʔυίϯϐϡʔλʔͳͲ
 ෳ਺ͷϓϥοτϑΥʔϜ্Ͱಈ࡞ʢ˞ʣ ※ ݱࡏ͸inferenceʢਪ࿦ʣݶఆ

Slide 31

Slide 31 text

"OESPJEʹରԠ ୺຤ͷηϯαʔ৘ใΛ࢖ͬͯδΣενϟʔΛ ൑ผ͢Δ"OESPJEΞϓϦͷ࡞੒ 5FOTPS'MPXͷֶशࡁΈϞσϧΛ"OESPJE
 ΞϓϦ͔ΒಡΈࠐΜͰར༻͢Δ

Slide 32

Slide 32 text

࡞Δ΋ͷ .Λ૷ணͯ͠टΛৼΔδΣενϟͰɺ :&4ɾ/0 Λ൑ఆ͢Δ

Slide 33

Slide 33 text

Ϟσϧ conv 1x5
 64 max_pool 1x3 fully connected 192 ʢdropout 0.5ʣ output
 2 size = 256

Slide 34

Slide 34 text

ֶश৚݅ ܇࿅σʔλ:FT /P ֶशΞϧΰϦζϜ"EBN ֶश཰ όοναΠζ ֶशεςοϓ਺

Slide 35

Slide 35 text

ग़ྗϞσϧͷߏ଄ model.pb input_accel input_gyro softmax_logits

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

ֶशࡁΈϞσϧͷ഑ஔ

Slide 38

Slide 38 text

private static final String MODEL_FILEPATH = "model.pb";
 private final TensorFlowInferenceInterface mTfInference;
 GestureDetector(AssetManager am) {
 mTfInference = new TensorFlowInferenceInterface(am, MODEL_FILEPATH);
 }
 ϞσϧͷಡΈࠐΈ

Slide 39

Slide 39 text

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ʣ

Slide 40

Slide 40 text

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ʣ

Slide 41

Slide 41 text

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ʣ

Slide 42

Slide 42 text

σϞ

Slide 43

Slide 43 text

C-LIS CO., LTD. ຊࢿྉ͸ɺ༗ݶձࣾγʔϦεͷஶ࡞෺Ͱ͢ɻຊࢿྉͷશ෦ɺ·ͨ͸Ұ෦ʹ͍ͭͯɺஶ࡞ऀ͔ΒจॻʹΑΔڐ୚Λಘͣʹෳ੡͢Δ͜ͱ͸ې͡ΒΕ͍ͯ·͢ɻ 5IF"OESPJE4UVEJPJDPOJTSFQSPEVDFEPSNPEJpFEGSPNXPSLDSFBUFEBOETIBSFECZ(PPHMFBOEVTFEBDDPSEJOHUPUFSNTEFTDSJCFEJOUIF$SFBUJWF$PNNPOT"UUSJCVUJPO-JDFOTF ֤੡඼໊ɾϒϥϯυ໊ɺձ໊ࣾͳͲ͸ɺҰൠʹ֤ࣾͷ঎ඪ·ͨ͸ొ࿥঎ඪͰ͢ɻຊࢿྉதͰ͸ɺ˜ɺšɺäΛׂѪ͍ͯ͠·͢ɻ 5IF"OESPJESPCPUJTSFQSPEVDFEPSNPEJpFEGSPNXPSLDSFBUFEBOETIBSFECZ(PPHMFBOEVTFEBDDPSEJOHUPUFSNTEFTDSJCFEJOUIF$SFBUJWF$PNNPOT"UUSJCVUJPO-JDFOTF