una ser saber ritmo pulso prbpm para normal mujer medir humano frecuencia esta cuanto como cardiaco cardiaca bien apple app objective-c ios image-processing camera avcapturesession
Here

objective c - ser - Detectando la frecuencia cardíaca usando la cámara



prbpm normal (3)

Como nota al margen, es posible que esté interesado en este documento de investigación . Este método ni siquiera requiere un dedo (o algo) directamente en la lente.

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

El proceso básico requiere que el usuario:

  1. Coloque la punta del dedo índice suavemente sobre la lente de la cámara.
  2. Aplique una presión pareja y cubra toda la lente.
  3. Manténgalo fijo durante 10 segundos y obtenga la frecuencia cardíaca.

Esto puede lograrse al encender el flash y ver cómo cambia la luz a medida que la sangre se mueve a través del dedo índice.

¿Cómo puedo obtener los datos de nivel de luz de la captura de video? ¿Dónde debería buscar esto? Miré a través de la clase AVCaptureDevice pero no encontré nada útil.

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


De hecho, puede ser simple, debe analizar los valores de píxel de la imagen capturada. Un algoritmo simple sería: seleccionar y el área en el centro de la imagen, convertir a escala de grises, obtener el valor medio del píxel para cada imagen y terminará con una función 2D y en esta función calcular la distancia entre los mínimos o máximo y problema resuelto.

Si observa el histograma de las imágenes adquiridas durante un período de 5 segundos, notará los cambios en la distribución del nivel de gris. Si desea un cálculo más sólido, analice el histograma.


Mira esto..

// 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 muestra Here