0LAUK0 2018Q1 Group 2 - Programming overview
Jump to navigation
Jump to search
Processing code layout
User object has
- Average location (x,y,z detected by OpenCV and IR)
- Ideal location (x,y,z of center of screen)
- Max RSI preventive compliant posture (how extreme can the user posture be without breaking the RSI prevention rules)
- Time spent in current posture
- Pixel map of face at startup
- Precision measure of repeated observations of face pixel map.
Cameras have
- Conversion metrics to transform pixels into angles into meters
Arduino IR has
- Conversion metric to transform voltage into meters
At startup
- User's face will be around their ideal location, capture the pixel map of the face detected around this location
- Load equipment and user attributes mentioned above.
At a predefined interval - call openCV to detect faces
- If no face is detected, maintain the average face location calculated from previous face detections
- If one face is detected, compare to face pixel map
- If similarity is too low, maintain the average face location calculated from previous face detections
- If similarity is high, update the average face location
- If multiple faces are detected, compare detected faces to face pixel map
- If there is no match, maintain the average face location calculated from previous face detections.
- If there is one match, update average face location using this face.
- If there are multiple matches, choose faces closest to average face location and update average face location using this face.
- If the current location of the face is significantly different from the average face location:
- Start counting time that this new posture is held:
- If time is very low: it was a split movement, no long term change in posture -> ignore
- If time is long: it is a long term change in posture -> move monitor
- If detected as posture change:
- Face has moved up or down:
- Calculate delta_x, delta_y. give command to move monitor, when the monitor is in front of the user, calculate delta_z using the arduino IR. Give command to move monitor in z direction if delta_z > threshold
- Detected face width has changed: (user moved forward or backward)
- Calculate delta_z using the arduino IR. Give command to move monitor in z direction if delta_z > threshold
- Determine if new posture is RSI preventive compliant
- Face has moved up or down:
- Start counting time that this new posture is held:
Keep track of how long a posture is held
- If posture is RSI prevention compliant: held for too long, notify user to move
- If posture is not RSI prevention compliant: use a much shorter time threshold, notify user sooner