The app allows the researcher to connect to the GoPro, start and stop video, take a photo, adjust GoPro settings, check the battery and SD card status, and save out new videos and images taken into user defined directories. For a detailed breakdown of the App refer to the app breakdown
This project uses the Open GoPro SDK for all communication with and from the GoPro.
Note
This product and/or service is not affiliated with, endorsed by or in any way associated with GoPro Inc. or its products and services. GoPro, HERO, and their respective logos are trademarks or registered trademarks of GoPro, Inc.
The app is available in both a dark and light mode version shown below. The app will default to your system theme, but there is also a theme switcher in the upper right of the app. This app was designed in dark mode so it is preferred aesthetically, but there is no functional difference between the themes.
-
Resolution Selector: Allows the user to select between the available resolutions for the GoPro.
- Note that not all frame rates are possible at a given resolution
-
Frame Rate Selector: Allows the user to select between the available frame rates for a given resolution on the GoPro
-
Field of View Selector: Allows the user to select between the field of view options on the GoPro
-
Theme Selector: Allows the user to select between the system default theme, a dark theme, and a light theme for the app
-
Video Recording Switch: A switch to start and stop a video recording on the GoPro
-
Photo Button: Switches to photo mode, takes a photo, and returns to video mode
-
Directory Name: The name of a user defined subdirectory in the Data folder of the repository
- If you don't have a Data folder, the app generates one when it is opened
-
Refresh Battery Indicator Button: Polls the GoPro for an updated estimate of battery life and SD card recording room
-
Battery and SD Card Status Indicators: Shows the battery life and room left on the SD card
- These values will change based on the selected resolution and frame rate
- Battery life is shown as a time and as a colored bar for high, medium and low battery
-
Digital Zoom Slider: Allows you to give the GoPro a digital zoom.
Note
The motion of zooming with the slider is choppy due to the frequency of sending the commands at a low rate
Warning
Do not zoom while taking a video. This GoPro is not capable of doing both at the same time and the app will keep trying to zoom unsuccessfully which will block all other commands until the video is manually stopped by hitting the button ont he GoPro.
-
GoPro selector: Dropdown menu for selecting which GoPro to connect to
- If your GoPro is not listed, you can select the ability to connect to the first available GoPro
-
Connection Button: Button to start the connection to the GoPro
-
File Transfer Button: When clicked, all new files are saved into the user defined subdirectory from GUI element 7
-
Timestamp Checkbox: When checked, a timestamp for when the files were saved is added to the beginning of all transferred files in the format of YYYYMMDD_HHMMSS_"GoPro file name"
Note
Not all resolutions and frame rates for every GoPro have been added to the app. For example, at this time, the Hero11 has more features in the Open GoPro SDK That would need to be added if you are going to use a new GoPro. Alternatively, there could be a future GoPro version selector.
When connecting to a GoPro, open the GoPro to its page for pairing to the Quik app.
Warning Make sure you do not select connecting to a remote.
In order to get to this option, swipe down from the top on the rear screen of the GoPro, then swipe right to left and click on the Connections option. On this screen select connect device and select the GoPro Quik App. When this is done you should see this screen.
If you have not already done so, open the app and select the correct GoPro from the drop down in the lower left. The number of the GoPro is written on the top in silver marker.
Note
In this state, only the theme switcher, GoPro selector, and connection button should be functional. This is to prevent you from sending commands before the GoPro is connected to.
Press the "Open Connection" button. When you have done this, the following prompt will appear.
If you forgot to start pairing, you can start it now or press cancel. If you press ok, the code will connect to the GoPro
Warning
The GoPro will say it is connected before the code has finished connecting. Make sure the code confirms the connection has occurred when the following message appears.
Once the connection is confirmed, press ok and the GoPro is default to the lowest resolution and frame rate values and the indicators will refresh for you. You will have to manually refresh them after this, but they will auto refresh when resolution and frame rate change.
The GoPro will not always connect correctly when the connection is opened in the app even if the GoPro says the connection occurred. This is because the GoPro will confirm early in the connection process, but the full connection requires a bluetooth and wifi connection to the GoPro. If the connection confirmation appears, then you know the connection occurred correctly. If not, then try the following:
- Retry pairing form the beginning
- Restart the app and then pairing
- Turn the GoPro on and off
- Reset the connections in the connections menu
- Make sure you are using a python version at or above 3.10, but before 3.11
After the app is connected to a GoPro, all of the settings widgets will become active and allow you to change the settings. When you change the resolution, the list of frame rate options will change based on what that resolution can do. If the frame rate you want is not available at that resolution, you will likely need to change the resolution. Refer to the battery life table below for a list of all possible resolution and frame rate combinations. The FOV values should have no effect on the resolution or frame rate options so they should all be available at any time.
Note
The battery and SD card indicators will refresh when the app originally connects and when you change resolution and frame rate parameters, but if you stay at one setting, you will need to poll the GoPro for they values your self with the "Refresh Battery Indicator" button. This is a manual process to save battery.
Battery Life in Minutes: | |||||
---|---|---|---|---|---|
Resolution | 24 fps | 30 fps | 60 fps | 120 fps | 240 fps |
1080p | - | 120 | 90 | 64 | 48 |
2.7K | - | - | 75 | 60 | 44 |
2.7 (4x3) | - | - | 75 | 59 | - |
4K | 76 | 76 | 72 | 36 | - |
4K (4x3) | - | - | 51 | - | - |
5K (4x3) | - | 64 | - | - | - |
5.3K | - | 74 | 47 | - | - |
If you would like to use the app on another computer that does not have python, you can convert the app into an executable. This is done by using the pyinstaller package. Unfortunately, pyinstaller has difficulty finding all of the files for customtkinter, the package used to make the GUI, when using the --onefile option so you need to add the data directly using the --add-data option. Follow these steps to make the executable
- Find the location of customtkinter on your computer. You can do this by entering
pip show customtkinter
in the terminal.- It will likely be in the form of
C:/Users/<username>/Lib/site-packages
- If you are using a virtual environment, make sure it is part of the file path
- It will likely be in the form of
- Enter the call to pyinstaller using the following:
pyinstaller --noconfirm --onedir --windowed --add-data "<customtkinter location>/customtkinter;customtkinter/" <recording_app.py location>
- If you want to also include the icon, you can add the option
--icon="<repository location>/GoPro-App/Docs/Media/film-roll.ico"
- If you want to change the name of the app, add the option
--name <new app name>
- This will make a build and dist folder in your current directory.
- I ran this code when in the Code folder and committed my current version of the dist folder
- The dist folder contains your new .exe file in the recording app folder. It will
have the same name as the python app.
Note
When running the .exe, it will make a Data folder in the directory right above it in the dist folder. If you move the .exe it would likely make it in whatever directory was right above its new location. You should probably not move the exe as the full directory of packages in the recording_app folder will be needed.
- If you would like a shortcut you can put anywhere, right click on the .exe and
select the option to make a shortcut. This will make a shortcut in the current
folder.
- If you want to change the icon to the same icon as the app, go to the properties of the shortcut and select the change icon button in the shortcut tab. Select your new icon from there
- Python 3.10.0
- Python 3.11 is not supported currently by Open GoPro
- customtkinter version: 5.0.4
- open-gopro 0.12.0
Warning
For its intended purpose, this app is made to record videos of a participant which is Protected Data. In order to be allowed to use this app to record a participant either in the operating room or in the lab during experiments, you must use a VA approved device to run the app. If this is not possible, you must disable the button to save video files on your local device running the app. For all questions relating to HIPAA compliance, refer to the Clinical and Regulatory staff for what is and is not allowed when interacting with participants.
Code and documentation written by Nabeel Chowdhury
App icon from: Analog icons created by juicy_fish - Flaticon