|
| 1 | +RecSyncNG is a video recording app with sub-millisecond synchronization accuracy for multiple Android smartphones, |
| 2 | +useful for creating affordable and easy-to-setup multi-view camera systems for robotics, SLAM, 3D-reconstruction, panorama stitching. |
| 3 | + |
| 4 | +RecSynchNG is a fork of the original [RecSynch-android](https://github.com/MobileRoboticsSkoltech/RecSync-android) project. Here is the [original README](README-orig.md). |
| 5 | + |
| 6 | +The original project has been improved with a remote GUI allowing for remote control of the android devices, centralized video download capability, |
| 7 | + and a revised post-processing stage for the deployment of perfectly synchronized videos. |
| 8 | + |
| 9 | + |
| 10 | +## Installation and setup |
| 11 | + |
| 12 | +(Use img from the slides) |
| 13 | + |
| 14 | + |
| 15 | +### Requirements |
| 16 | + |
| 17 | +* A set of Android devices, _all of the same hardware type_, with Android version 10+. (We were able to compile and run on Android 8, but not tested since a while) |
| 18 | +* Elect a _Leader_ android device: |
| 19 | + * must have an adaptor for Ethernet connection; |
| 20 | + * must be able to configure the ethernet with static IP address; |
| 21 | + * must be able to configure Hotspot (share Ethernet via WiFi): |
| 22 | + * not all devices can by default enable Hotspot without a SIM card. To circumvent some limited GUIs, we are using the `VPNHotspot` app. |
| 23 | +* A laptop/PC with Python 3.9 and an ethernet adaptor |
| 24 | + |
| 25 | +### Android devices installation and setup |
| 26 | + |
| 27 | +* Install the RecSynchNG apk on all devices |
| 28 | +* Select one device as _Leader_: |
| 29 | + * configure its Ethernet adaptor with: |
| 30 | + * Static IP: 192.168.5.2 |
| 31 | + * Mask: 255.255.255.0 |
| 32 | + * Gateway 192.168.5.1 |
| 33 | + * Start a Wi-Fi hotspot, sharing the Ethernet connection. |
| 34 | +* Connect all other android devices to the Hotspot WiFi network. |
| 35 | + |
| 36 | + |
| 37 | +The master app should display now the connected clients and buttons for recording control |
| 38 | + |
| 39 | +### Remote controlling PC installation and setup |
| 40 | + |
| 41 | +Configure the ethernet adaptor of your PC as: |
| 42 | +* Static IP: 192.168.5.1 |
| 43 | +* Mask: 255.255.255.0 |
| 44 | +* Gateway 192.168.5.1 |
| 45 | + |
| 46 | +Cable connect the PC and the Master device. |
| 47 | + |
| 48 | +Verify the Ethernet connection with Ping. E.g., from the PC, in a terminal |
| 49 | + |
| 50 | +``` |
| 51 | +ping 192.168.5.2 |
| 52 | +
|
| 53 | +64 bytes from 192.168.5.2: icmp_seq=347 ttl=125 time=2.425 ms |
| 54 | +64 bytes from 192.168.5.2: icmp_seq=348 ttl=125 time=2.233 ms |
| 55 | +64 bytes from 192.168.5.2: icmp_seq=349 ttl=125 time=7.560 ms |
| 56 | +64 bytes from 192.168.5.2: icmp_seq=350 ttl=125 time=2.288 ms |
| 57 | +``` |
| 58 | + |
| 59 | + |
| 60 | +Setup a python environment using Python 3.9+. |
| 61 | + |
| 62 | +``` |
| 63 | +cd PythonTools |
| 64 | +python3 -m venv p3env-RecSynchNG |
| 65 | +source p3env-RecSynchNG/bin/activate |
| 66 | +pip install -r requirements.txt |
| 67 | +``` |
| 68 | + |
| 69 | +For the post-processing of the videos, you need to install ffmpeg executable. E.g.: |
| 70 | +* On Linux: `apt install ffmpeg` |
| 71 | +* On Mac: `brew install ffmpeg` |
| 72 | + |
| 73 | + |
| 74 | +## Usage |
| 75 | + |
| 76 | +### Run the software |
| 77 | + |
| 78 | +(Android) First, start the app on all Android devices: |
| 79 | +* Wait a few seconds for synchronization; |
| 80 | +* on client devices you should see the client ID and info about the connection status; |
| 81 | +* on the leader device you should see the list of connected clients. |
| 82 | + |
| 83 | +Second, start the software on the controlling PC. |
| 84 | + |
| 85 | +On one terminal **start the http file server**. It starts a small http server ready to receive the recorded files from the android devices: |
| 86 | + |
| 87 | +``` |
| 88 | +cd PythonTools |
| 89 | +source p3env-RecSynchNG/bin/activate |
| 90 | +python FileServer.py |
| 91 | +``` |
| 92 | + |
| 93 | +TODO -- pic of the server console |
| 94 | + |
| 95 | +On another terminal, **start the remote controlling GUI** : |
| 96 | + |
| 97 | +``` |
| 98 | +cd PythonTools |
| 99 | +source p3env-RecSynchNG/bin/activate |
| 100 | +python RemoteController.py |
| 101 | +``` |
| 102 | + |
| 103 | +TODO -- pic of the GUI |
| 104 | + |
| 105 | + |
| 106 | +### Recording video |
| 107 | + |
| 108 | +1. [Optional step] Press the ```calculate period``` button. The app will analyze frame stream and use the calculated frame period in further synchronization steps. |
| 109 | +2. Adjust exposure and ISO to your needs. |
| 110 | +3. Press the ```phase align``` button. |
| 111 | +4. Press the ```record video``` button to start synchronized video recording. |
| 112 | +5. Get videos from RecSync folder in smartphone root directory. |
| 113 | + |
| 114 | +### Extraction and matching of the frames |
| 115 | + |
| 116 | + |
| 117 | + |
| 118 | +## Citations / Credits |
| 119 | + |
| 120 | +If you use this application, please cite [Sub-millisecond Video Synchronization of Multiple Android Smartphones](https://arxiv.org/abs/2107.00987): |
| 121 | +``` |
| 122 | +@misc{akhmetyanov2021submillisecond, |
| 123 | + title={Sub-millisecond Video Synchronization of Multiple Android Smartphones}, |
| 124 | + author={Azat Akhmetyanov and Anastasiia Kornilova and Marsel Faizullin and David Pozo and Gonzalo Ferrer}, |
| 125 | + year={2021}, |
| 126 | + eprint={2107.00987}, |
| 127 | + archivePrefix={arXiv}, |
| 128 | + primaryClass={cs.CV} |
| 129 | +} |
| 130 | +``` |
| 131 | + |
| 132 | +This work is based on "Wireless Software Synchronization of Multiple Distributed Cameras" |
| 133 | + |
| 134 | +Reference code for the paper |
| 135 | +[Wireless Software Synchronization of Multiple Distributed Cameras](https://arxiv.org/abs/1812.09366). |
| 136 | +_Sameer Ansari, Neal Wadhwa, Rahul Garg, Jiawen Chen_, ICCP 2019. |
0 commit comments