Mohit Nigam
Mohit Nigam

Reputation: 454

how to detect if iphone is still?

I have to make an app in which user can take photo only when iPhone is still. Can you please tell me how to proceed with that. Any help will be appreciated.

Below is the code that I have tried, please Suggest improvement on it, this code is giving jerky output

            _previousMotionValue = 0.0f;
            memset(xQueue, 0, sizeof(xQueue));
            memset(yQueue, 0, sizeof(yQueue));
            queueIndex = 0;

            [_motionManager startAccelerometerUpdatesToQueue:_motionManagerUpdatesQueue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {

                if ([_motionManagerUpdatesQueue operationCount] > 1) {
                    return;
                }

                xQueue[queueIndex] = -accelerometerData.acceleration.x;
                yQueue[queueIndex] = accelerometerData.acceleration.y;

                queueIndex++;
                if (queueIndex >= QueueCapacity) {
                    queueIndex = 0;
                }

                float xSum = 0;
                float ySum = 0;

                int i = 0;

                while (i < QueueCapacity)
                {
                    xSum += xQueue[i];
                    ySum += yQueue[i];
                    i++;
                }

                ySum /= QueueCapacity;
                xSum /= QueueCapacity;

                    double motionValue = sqrt(xSum * xSum + ySum * ySum);
                    CGFloat difference = 50000.0 * ABS(motionValue - _previousMotionValue);
                    if (difference < 100)
                    {
                        //fire event for capture
                    }
                    [view setVibrationLevel:difference];
                    _previousMotionValue = motionValue;

            }];

Based on vibration level, I am setting the different images like green, yellow, red. I have chosen threshold 100.

Upvotes: -2

Views: 231

Answers (1)

Tricertops
Tricertops

Reputation: 8512

To answer “…user can take photo only when iPhone is stabilized…?”:

You can use CoreMotion.framework and its CMMotionManager to obtain info about device movement. (I guess you are interested in accelerometer data.) These data will come at high rate (you can choose frequency, default if 1/60 s). Then you store (let's say) 10 latest values and make some statistics about the average and differences. By choosing optimal treshold you can tell when the device is in stabilized position.


But you mentioned image stabilization, which is not the same as taking photos in stabilized position. To stabilize image, I guess you will have to adjust the captured image by some small offset calculated from device motion.

Upvotes: 0

Related Questions