Android传感器的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android传感器的使用相关的知识,希望对你有一定的参考价值。

参考技术A 目前每部android 手机里面都会内置有许多的传感器,它们能够监测到各种发生在手机上的物理事件,而我们只要灵活运用这些事件就可以编写出很多好玩的应用程序。下面我们开始简单的传感器使用的学习。

1.手机内置的传感器是一种微型的物理设备,它能够探测、感受到外界的信号,并按一定规律转换成我们所需要的信息。

2.Android手机通常会支持多种类型的传感器,如光照传感器,地磁传感器,压力传感器,温度传感器。

3.Android手机只是负责将这些传感器所输出的信息传递给我们,至于具体如何去利用这些信息就要我们在程序中具体去利用这些得到的数据去处理了。

从Android1.5开始,系统内置了对多达八种传感器的支持,他们分别是:加速度传感器(accelerometer)、陀螺仪(gyroscope)、环境光照传感器(light)、磁力传感器(magnetic field)、方向传感器(orientation)、压力传感器(pressure)、距离传感器(proximity)和温度传感器(temperature)。

1.Android所有的传感器都归传感器管理器SensorManager管理,如下是获得传感器的方法:

2.获取某个或者某些传感器的方法有如下三种:

第一种:获取某种传感器:

第二种:获取某种传感器列表:

第三种:获取所有传感器列表:

Android:使用传感器实时检测眼睛的运动

【中文标题】Android:使用传感器实时检测眼睛的运动【英文标题】:Android : Detect movement of eyes using sensor at real time 【发布时间】:2017-09-11 10:44:35 【问题描述】:

我正在准备一个 android 应用程序,我必须在其中检测眼睛的运动。不知何故,我能够在图像上实现上述目标,但我希望在实时眼睛上实现这一点。

如果我们可以使用接近传感器来检测眼睛,我无法理解。就像 smartStay 功能一样。

请提出实施相同的想法。

【问题讨论】:

你不会使用接近,你会使用你的摄像头......我希望这会有所帮助 感谢@OmarElDon 的建议。所以前置摄像头不会在背景下出现在屏幕上,它会检测到眼睛。请确认我的理解是否正确。 不完全是,它只是接近不能作为运动检测器,至少对于远处的物体 【参考方案1】:

不,您不能使用接近传感器进行眼睛检测或跟踪。试一试 OpenCV。 链接:OpenCv github:OpenCv github

【讨论】:

我们可以使用前置摄像头进行眼睛检测吗?意味着前置摄像头可以在后台运行并且能够感知眼睛。 是的,这是可能的。 你有没有在没有openCv的android上运行的例子(对openCv一无所知)。【参考方案2】:

我们可以使用前置摄像头来检测眼睛和眨眼。使用 Vision api 来检测眼睛。

眼动追踪代码:

public class FaceTracker extends Tracker<Face> 

private static final float PROB_THRESHOLD = 0.7f;
private static final String TAG = FaceTracker.class.getSimpleName();
private boolean leftClosed;
private boolean rightClosed;

@Override
public void onUpdate(Detector.Detections<Face> detections, Face face) 
    if (leftClosed && face.getIsLeftEyeOpenProbability() > PROB_THRESHOLD) 
        leftClosed = false;
     else if (!leftClosed &&  face.getIsLeftEyeOpenProbability() < PROB_THRESHOLD)
        leftClosed = true;
    
    if (rightClosed && face.getIsRightEyeOpenProbability() > PROB_THRESHOLD) 
        rightClosed = false;
     else if (!rightClosed && face.getIsRightEyeOpenProbability() < PROB_THRESHOLD) 
        rightClosed = true;
    

    if (leftClosed && !rightClosed) 
        EventBus.getDefault().post(new LeftEyeClosedEvent());
     else if (rightClosed && !leftClosed) 
        EventBus.getDefault().post(new RightEyeClosedEvent());
     else if (!leftClosed && !rightClosed) 
        EventBus.getDefault().post(new NeutralFaceEvent());
    




//method to call the FaceTracker 
 private void createCameraResources() 
    Context context = getApplicationContext();

    // create and setup the face detector
    mFaceDetector = new FaceDetector.Builder(context)
            .setProminentFaceOnly(true) // optimize for single, relatively large face
            .setTrackingEnabled(true) // enable face tracking
            .setClassificationType(/* eyes open and smile */ FaceDetector.ALL_CLASSIFICATIONS)
            .setMode(FaceDetector.FAST_MODE) // for one face this is OK
            .build();

    // now that we've got a detector, create a processor pipeline to receive the detection
    // results
    mFaceDetector.setProcessor(new LargestFaceFocusingProcessor(mFaceDetector, new FaceTracker()));

    // operational...?
    if (!mFaceDetector.isOperational()) 
        Log.w(TAG, "createCameraResources: detector NOT operational");
     else 
        Log.d(TAG, "createCameraResources: detector operational");
    

    // Create camera source that will capture video frames
    // Use the front camera
    mCameraSource = new CameraSource.Builder(this, mFaceDetector)
            .setRequestedPreviewSize(640, 480)
            .setFacing(CameraSource.CAMERA_FACING_FRONT)
            .setRequestedFps(30f)
            .build();

【讨论】:

以上是关于Android传感器的使用的主要内容,如果未能解决你的问题,请参考以下文章

使用内置 android 传感器的移动方向

Android 光线传感器的调用

Android之使用传感器获取相应数据

Android开发之方向传感器的使用? (2011-10-13 20:56:05)转载▼

如何在Android中计算传感器功耗

Android传感器的使用(GravieySensor)