Last active
October 18, 2017 09:46
-
-
Save PhilCai1993/abbfd9451f5081581e82a53a1393ff1e to your computer and use it in GitHub Desktop.
detect brightness using ios camera
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (AVCaptureDevice *)frontCamera { | |
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; | |
for (AVCaptureDevice *device in devices) { | |
if ([device position] == AVCaptureDevicePositionFront) { | |
return device; | |
} | |
} | |
return nil; | |
} | |
- (void)setupAVCapture { | |
//-- Setup Capture Session. | |
_session = [[AVCaptureSession alloc] init]; | |
[_session beginConfiguration]; | |
//-- Set preset session size. | |
[_session setSessionPreset:AVCaptureSessionPreset1920x1080]; | |
//-- Creata a video device and input from that Device. Add the input to the capture session. | |
AVCaptureDevice * videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; | |
if(videoDevice == nil) | |
assert(0); | |
//-- Add the device to the session. | |
NSError *error; | |
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error]; | |
if(error) | |
assert(0); | |
[_session addInput:input]; | |
//-- Create the output for the capture session. | |
AVCaptureVideoDataOutput * dataOutput = [[AVCaptureVideoDataOutput alloc] init]; | |
[dataOutput setAlwaysDiscardsLateVideoFrames:YES]; // Probably want to set this to NO when recording | |
//-- Set to YUV420. | |
[dataOutput setVideoSettings:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_420YpCbCr8BiPlanarFullRange] | |
forKey:(id)kCVPixelBufferPixelFormatTypeKey]]; // Necessary for manual preview | |
// Set dispatch to be on the main thread so OpenGL can do things with the data | |
[dataOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()]; | |
[_session addOutput:dataOutput]; | |
[_session commitConfiguration]; | |
[_session startRunning]; | |
} | |
- (void)captureOutput:(AVCaptureOutput *)captureOutput | |
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer | |
fromConnection:(AVCaptureConnection *)connection | |
{ | |
CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(NULL, | |
sampleBuffer, kCMAttachmentMode_ShouldPropagate); | |
NSDictionary *metadata = [[NSMutableDictionary alloc] | |
initWithDictionary:(__bridge NSDictionary*)metadataDict]; | |
CFRelease(metadataDict); | |
NSDictionary *exifMetadata = [[metadata | |
objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy]; | |
self.autoBrightness = [[exifMetadata | |
objectForKey:(NSString *)kCGImagePropertyExifBrightnessValue] floatValue]; | |
float oldMin = -4.639957; // dark | |
float oldMax = 4.639957; // light | |
if (self.autoBrightness > oldMax) oldMax = self.autoBrightness; // adjust oldMax if brighter than expected oldMax | |
self.lumaThreshold = ((self.autoBrightness - oldMin) * ((3.0 - 1.0) / (oldMax - oldMin))) + 1.0; | |
NSLog(@"brightnessValue %f", self.autoBrightness); | |
NSLog(@"lumaThreshold %f", self.lumaThreshold); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment