Necesito la misma funcionalidad que la aplicación Instant Heart Rate.

El proceso básico que se requiere que el usuario:

  1. Coloque la punta del dedo índice suavemente sobre la lente de la cámara.
  2. Aplique una presión uniforme y cubrir la totalidad de la lente.
  3. Mantenerla estable durante 10 segundos y obtener la frecuencia cardíaca.

Esto se puede realizar girando el flash y ver la luz del cambio como la sangre se mueve a través del dedo índice.

¿Cómo puedo obtener el nivel de luz de los datos de la captura de video? Donde debo buscar para esto?
Miré a través de la clase AVCaptureDevice, pero no encontró nada útil.

También encontré AVCaptureDeviceSubjectAreaDidChangeNotification, que sería útil?

  • pero, ¿qué acerca de la falta de flash modelos de iphone y ipad?
  • si usted tiene suficiente luz en su entorno el flash del teléfono, no es necesario.
  • El flash del teléfono es necesario para esta aplicación de la cámara. Con el dedo contra el objetivo, que usted acaba de ver la negrura de otra manera.
  • No sé exactamente cómo es el trabajo con la cámara del iPhone, pero con una normal webcam si el entorno es lo suficientemente ligero como no hay necesidad de luz extra.
  • cuando no hay suficiente luz a levantar tu dispositivo móvil, con el dedo sobre la cámara del dispositivo) y mantenerlo en contra de una fuente de luz brillante: a mí me ha funcionado con la luz del día a través de la ventana.
InformationsquelleAutor ellenpage | 2012-02-14

3 Comentarios

  1. 26

    Echa un vistazo a este..

    //switch on the flash in torch mode  
    if([camera isTorchModeSupported:AVCaptureTorchModeOn]) {  
    [camera lockForConfiguration:nil];  
    camera.torchMode=AVCaptureTorchModeOn;  
    [camera unlockForConfiguration];  
    }  
    [session setSessionPreset:AVCaptureSessionPresetLow];
    //Create the AVCapture Session  
    session = [[AVCaptureSession alloc] init];  
    //Get the default camera device  
    AVCaptureDevice* camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];  
    if([camera isTorchModeSupported:AVCaptureTorchModeOn]) {  
    [camera lockForConfiguration:nil];  
    camera.torchMode=AVCaptureTorchModeOn;  
    [camera unlockForConfiguration];  
    }  
    //Create a AVCaptureInput with the camera device  
    NSError *error=nil;  
    AVCaptureInput* cameraInput = [[AVCaptureDeviceInput alloc] initWithDevice:camera error:&error];  
    if (cameraInput == nil) {  
    NSLog(@"Error to create camera capture:%@",error);  
    }  
    //Set the output  
    AVCaptureVideoDataOutput* videoOutput = [[AVCaptureVideoDataOutput alloc] init];  
    //create a queue to run the capture on  
    dispatch_queue_t captureQueue=dispatch_queue_create("catpureQueue", NULL);  
    //setup our delegate  
    [videoOutput setSampleBufferDelegate:self queue:captureQueue];  
    //configure the pixel format  
    videoOutput.videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber     numberWithUnsignedInt:kCVPixelFormatType_32BGRA], (id)kCVPixelBufferPixelFormatTypeKey,  
    nil];  
    //cap the framerate  
    videoOutput.minFrameDuration=CMTimeMake(1, 10);  
    //and the size of the frames we want  
    [session setSessionPreset:AVCaptureSessionPresetLow];  
    //Add the input and output  
    [session addInput:cameraInput];  
    [session addOutput:videoOutput];  
    //Start the session  
    [session startRunning];  
    - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {  
    //this is the image buffer  
    CVImageBufferRef cvimgRef = CMSampleBufferGetImageBuffer(sampleBuffer);  
    //Lock the image buffer  
    CVPixelBufferLockBaseAddress(cvimgRef,0);  
    //access the data  
    int width=CVPixelBufferGetWidth(cvimgRef);  
    int height=CVPixelBufferGetHeight(cvimgRef);  
    //get the raw image bytes  
    uint8_t *buf=(uint8_t *) CVPixelBufferGetBaseAddress(cvimgRef);  
    size_t bprow=CVPixelBufferGetBytesPerRow(cvimgRef);  
    //get the average red green and blue values from the image  
    float r=0,g=0,b=0;  
    for(int y=0; y<height; y++) {  
    for(int x=0; x<width*4; x+=4) {  
    b+=buf[x];  
    g+=buf[x+1];  
    r+=buf[x+2];  
    }  
    buf+=bprow;  
    }  
    r/=255*(float) (width*height);  
    g/=255*(float) (width*height);  
    b/=255*(float) (width*height);  
    NSLog(@"%f,%f,%f", r, g, b);  
    }  

    Código De Ejemplo Aquí

    • Este código sólo se da en la gráfica. Pero ¿cuál es la lógica detrás de conseguir valor de bpm de la frecuencia cardíaca como 100 lpm. Alguna idea?
    • Mismo código de enlace está roto. Por favor arreglar
  2. 3

    De hecho, puede ser simple, usted tiene que analizar los valores de los píxeles de la imagen capturada. Un simple algoritmo sería: seleccione y área en el centro de la imagen, convertir a escala de grises, obtener el valor de la mediana de los píxeles de cada imagen, y usted va a terminar con 2D función y en esta función calcula la distancia entre dos mínimos o máximos y problema resuelto.

    Si usted tiene una mirada en el histograma de las imágenes adquiridas durante un periodo de 5 segundos, usted notará los cambios del nivel de gris de distribución. Si usted desea un más robusto de cálculo de analizar el histograma.

    • Hola alinoz, ¿sería posible publicar el código de ejemplo? Gracias de antemano!
    • y Brabbeldas – voy a tratar de hacer una pequeña instalación próximos días.
    • ¿te da la oportunidad de poner un proyecto de ejemplo / código para esto? Por favor, háganos saber si usted pone algo juntos
    • yo no entiendo cómo el problema se resuelve después de encontrar la distancia entre los 2 mínimo o máximo ,por favor, puedes elaborar en la
    • el uso de la marca de tiempo de cada imagen capturada.
    • así que según el algoritmo tengo que calcular cada fotograma de la mediana y, a continuación, 2(máximo o mínimo) de la mediana de los valores deben ser tomados con hay tiempo de que se produzca y, a continuación, calcular la frecuencia cardíaca,estoy en lo correcto.

  3. 3

    Como una nota del lado, usted puede estar interesado en el presente trabajo de investigación. Este método no requiere tener un dedo (o nada) directamente en la lente.

    • que el artículo está pendiente de patente de la investigación, en caso de que le importa a usted
    • Puede proporcionar una referencia para ser patentados o en proceso?

Dejar respuesta

Please enter your comment!
Please enter your name here