RSSI-based Hidden Camera Localizer
With given camera MAC address and channel information, localize a hidden camera in an unfamiliar environment.
Existing works proposed reliable method for obtaining MAC address and channel information. More on this paper
Background knownledge just in case 👇
- RSSI: received signal strength indicator. Available in Wi-Fi radio packet header. Stronger the Wi-Fi signal, higher the RSSI.
- Hidden camera: usually streaming packets when motion is detected -> high RSSI values
- RSSI is very coarse: reflections from other objects might interfer with rssi readings
Experiment Setup
Equipment:
- Raspberry Pi 4 with Wi-Fi dungle and SenseHat
- Hidden camera: same Rpi4, transmitting packets when motion is detected
Environment:
- Office setup (desks, tables, TV, office supplies, …)
- No walking, only sitting
Known information:
- Camera’s MAC address
- Camera channel number
- Unprivilleged access to Wi-Fi
Experiment specific setup:
- Data collection for 1 minute
- Data analysis after data collection (postprocessing only)
Methodology
- Data: IMU raw data + RSSI data
- Positioning: Joystick orientation + IMU Step Detection
- Localization: spatial interpolated max RSSI
The Real-Time Component is running real-time when exploring in the unfamiliar environment
The Post-processing Module and Localization Module run seperatively after data collection is completed.
Data Collection
- RSSI: We run a packet sniffer on the Raspberry Pi, collecting only packets from the known camera’s MAC address.
- IMU: real-time IMU data
- Orientation: pull joystick when turning (so only 90 or 180 degree turning)
Step Detection
Uses IMU acceleration data (all xyz axis), plus a Butterworth filter, plus find_peaks
from scipy. Then linearly interpolate step magnitudes (acceleration magnitude) to step sizes:
A 1.2m step has higher acceleration peak compared to a 0.3m step
IMU-RSSI-Step Fusion
Steps + orientation gives coarse routes in the room. Some other IMU-Step fusion and interpolation are used to fill the voids between each steps. See our report for more details.
We assign RSSI values to each positioning coordinate (x, y). Then we use spatial interpolation on coordinates.
Localization
Intuition tells the hidden camera is on the middle right of the room, which it is!
We use a combination of three methods:
- Max RSSI: take the point with maximum RSSI value
- Grid RSSI: grid-based max rssi, take the grid with maximum average RSSI
- Spatial RSSI: spatial interpolation + curve fit, find max
The true label is very close to max rssi label. In case when there is no line-of-sight between the camera and the receiver, spatial rssi is more accurate because it takes into account the spatial distribution of RSSI values.
Experiment Result
In an office setup (around 4m * 8m), we achieved < 2m localization error. This is still useful in finding hidden cameras in real-world scenarios. Also note that we only have 1 minute of data collection, which in real-world scenarios, we can collect data for longer time and achieve better results.