Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create pinaki7272.md #9

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
199 changes: 199 additions & 0 deletions pinaki7272.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
# sjcam

A python CLI tool for controlling SJCAM WiFi Sports Cameras

# installation

As far as I know, the only dependancies not catered for by the installation script are VideoLAN, used for viewing a live stream from the camera and opencv. To install under Ubuntu:

sudo apt-get install vlc python-opencv

For other ditros, visit the home pages for more info:

http://www.videolan.org/

http://opencv.org/

# usageTo install sjcam:


sudo python ./setup.py install



Running the script with no arguments will show a help screen:

sjcam

Usage: /usr/local/bin/sjcam <COMMAND> [ARG(s)] [<COMMAND> [ARG(s)] ...]

Commands:

BLAM BlamCam mode - detect bullet hits on target (auto switch to PHOTO mode)
CONFIG Show camera config and status
DATE <YYYY-MM-DD> Set camera date
DEBUG <OFF | ON> Set DEBUG printing
DIR Show PHOTO and MOVIE directory listing
GET <FILE> Copy file from camera to local storage
IP <ADDRESS> Set IP address (default 192.168.1.254)
MODE <[T]MOVIE | [T]PHOTO> Set camera to [TIMED] MOVIE or PHOTO mode
PASS <PASSWORD> Set WiFi PASSWORD (will not take effect until disconnect/reconnect)
PATH <FILE PATH> Set PATH for saving snapshots and movies (default ./)
PING Check camera is visible and connectable on network
PREVIEW View low-res PHOTO preview image (auto switch to PHOTO mode)
SET <PARAMETER> <VALUE> Set camera config ('?' to list parameters and/or values)
START START MOVIE recording (auto switch to MOVIE mode)
STOP STOP MOVIE recording or TIMED PHOTO
SYNC Synchronise camera TIME & DATE with host
[G|V]SNAP Take a snapshot and optionally [V]iew and/or [G]et it (auto switch to PHOTO mode)
SSID <SSID> Set WiFi SSID (will not take effect until disconnect/reconnect)
STREAM View live video stream (auto switch to MOVIE mode)
TIME <HH:MM:SS> Set camera clock

Commands will be executed sequentially and must be combined as appropriate.

Most commands are self explanatory.

# viewing camera config settings

sjcam config

Camera config:

Movie_Resolution: 720P_1280x720_60fps
Cyclic_Record: Off
HDR/WDR: On
1012: 0
Motion_Detection: On
Audio: Off
Date_Stamping: On
2010: 3
Videolapse: Off
Photo_Image_Size: 8M_3264x2448
1005: 0
Sharpness: Strong
White_Balance: Auto
Colour: Colour
ISO: 100
Exposure: +0.0
Anti_Shaking: On
Frequency: 60Hz
Rotate: Off
Default_Setting: Cancel
Format: Cancel
Auto_Power_Off: Off
3003: 0
3004: 0
Language: English

Parameter names and values are translated to a keyword format that is easy to cut & paste for SET commands. Parameters that have not yet been reverse engineered or cannot be changed using the SET command are shown as their original numeric value.

# setting camera parameters

Changeable parameters can be set using the SET command, followed by parameter name and value. To get a full list of parameters and values, use:

sjcam set ? ?

SET config help:

Default_Setting: Cancel, OK
HDR/WDR: Off, On
Language: English, French, Spanish, Polish, German, Italian, Unknown_1, Unknown_2, Russian, Unknown_3, Unknown_4, Unknown_5, Portugese
Rotate: Off, On
Format: Cancel, OK
Exposure: +2.0, +5/3, +4/3, +1.0, +2/3, +1/3, +0.0, -1/3, -2/3, -1.0, -4/3, -5/3, -2.0
Frequency: 50Hz, 60Hz
Auto_Power_Off: Off, 3_Minutes, 5_Minutes, 10_Minutes
Anti_Shaking: Off, On
Movie_Resolution: 1080FHD_1920x1080, 720P_1280x720_60fps, 720P_1280x720_30fps, WVGA_848x480, VGA_640x480
Cyclic_Record: Off, 3_Minutes, 5_Minutes, 10_Minutes
Videolapse: Off, 1_Second, 2_Seconds, 5_Seconds, 10_Seconds, 30_Seconds, 1_Minute
Motion_Detection: Off, On
Audio: Off, On
ISO: Auto, 100, 200, 400
Colour: Colour, B/W, Sepia
White_Balance: Auto, Daylight, Cloudy, Tungsten, Flourescent
Sharpness: Strong, Normal, Soft
Date_Stamping: Off, On
Photo_Image_Size: 12M_4032x3024, 10M_3648x2736, 8M_3264x2448, 5M_2592x1944, 3M_2048x1536, 2MHD_1920x1080, VGA_640x480, 1.3M_1280x960

To get the list of values for a specific parameter, use e.g.:

sjcam set Photo_Image_Size ?

SET config help:

Photo_Image_Size: 12M_4032x3024, 10M_3648x2736, 8M_3264x2448, 5M_2592x1944, 3M_2048x1536, 2MHD_1920x1080, VGA_640x480, 1.3M_1280x960

To change a parameter, specify the parameter name and new value:

sjcam set Photo_Image_Size 2MHD_1920x1080

Setting Photo_Image_Size to 2MHD_1920x1080
OK

# special parameters

There are two 'parameters' that are actually executable functions: Format and Default_Setting.

Format will wipe the SD card and Default_Setting will set all parameters back to defaults.

There is no 'are you sure?' prompt, so running the command:

sjcam set format ?

SET config help:

Format: Cancel, OK

shows the options, and:

sjcam set format ok

Setting format to ok
OK

will immediately wipe your SD card. Use with caution!

sjcam dir

Camera directory:

PHOTO:


MOVIE:

# BlamCam mode

BlamCam mode was the main reason for writing this code in the first place. The idea is that you place the camera in front of a target, then monitor it from the firing point. The camera on its own would be very useful for this, but with a bit of image processing it can be even more so. Accordingly, in this mode, each time you press a key a new image is taken and compared to the last. The difference should be the most recent shot, which will be highlighted. You can also review previous shots at any time, which will highlight each shot in situ on the current target image.

![BlamCam](/images/blamcam.jpg)

# known issues / further development

Since there is no published API for this type of camera, it was reverse engineered by sniffing packets from the Android app. Not all settings visible on the camera can be changed from the app, so some things are still unknown or may be incorrect.

There are several tools out there for doing this, and I used one that allows sniffing of only the local network traffic without rooting the phone:

https://play.google.com/store/apps/details?id=app.greyshirts.sslcapture&hl=en_GB

It's a bit clunky and doesn't have any kind of filtering support, so you have to wade through a lot of irrelevant data to find the packet you're looking for, but it was easy to install and run and got the ball rolling, so I stuck with it.

I only have access to the SJ4000 camera, so it's possible other cameras behave completely differently - please let me know your experiences!

Commands can be tested by sending them directly to the camera using a browser. For example, to change the WiFi name:

http://192.168.1.254/?custom=1&cmd=3003&str=%22MyShinySJ4000%22

If you find any new or useful commands, please email me details, or send me a pull request. I have commented some as yet unexplored options in sj4000.py

At some point, it would be nice to have a GUI.

Need to add GET option to video start/stop...

Need to fix camera directory to show file sizes, dates etc. (strange problem with BS4)

Find better lens options for BlamCam (in progress)

Really really need a better GUI for BlamCam!