GoPro Python API
Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。
非官方 Python GoPro API 庫 - 通過 WiFi 連接 GoPro 相機
(可以電腦打開閱讀原文鏈接,留日後查閱)
兼容性:HERO3
HERO3+
HERO4 (包括 HERO Session)
HERO+
HERO5 (包括 HERO5 Session)
HERO6
Fusion 1
安裝
通過 PyPi:
pip install goprocam
Git(不穩定)
git clone http://github.com/konradit/gopro_py_api
cd gopro-py-api
python setup.py install
基於 Python 3.6.0 測試 -- 適用於 Linux, Windows 和 Mac
文檔:HERO4 以及最新 (gpcontrol)這些相機使用以 /gp/gpControl/ url 為中心的新版 GoPro API.
HERO3/HERO3+/HERO2 (auth):
這些相機使用傳統的/camera/ 或 /bacpac/ GoPro API, 現在已被棄用, 從HERO 4開始已經被新相機的gpControl所代替.
用法:你可以用這個類庫做很多事情, 以下是一些命令如何使用的片段:
from goprocam import GoProCamera
from goprocam import constantsgpCam = GoProCamera.GoPro
注意: 你可以使用 GoProCamera.GoPro
來初始化, 它會檢測連接哪台相機以及使用哪個 API, 因為我只測試了 HERO4 和 HERO3, 可能不太可靠. 如果你想連接指定的相機, 可以使用 HERO4/5/HERO+ 的GoProCamera.GoPro(constants.gpcontrol)
和 HERO3/HERO3+ 的GoProCamera.GoPro(constants.auth)
.
如果你想為相機指定特定的 MAC 地址(只支持 HERO4/5/HERO+):
重要:對 HERO5 Session/Black 和 HERO4 Session, 這是必須的.
GoProCamera.GoPro(mac_address="...")
注意: 某些命令僅適用於 HERO4/5, 反之亦然: gpControlCommand/gpControlSet/gpControlExecute 僅適用於 HERO4/5, sendBacpac/sendCamera 僅適用於 HERO3/3+. 根據你的相機確保使用正確的getStatus常量.
命令啟動, 停止
你可以啟動或關閉視頻, 同樣也可拍照或延時拍攝. 可應用於所有相機.
啟動視頻或拍照:
gpCam.shutter(constants.start)
關閉視頻或延時拍攝:
gpCam.shutter(constants.stop)
改變模式
你可以改變相機模式. 第二行僅適用於 HERO4 Black/Silver/Session 和 HERO5 Black/Session(由於他們具有模式和子模式).
gpCam.mode(constants.Mode.VideoMode)
gpCam.mode(constants.Mode.VideoMode, constants.Video.SubMode.Looping)
高亮標籤
只針對 HERO4 及以上版本: 可以在視頻中設置高亮標籤.
gpCam.hilight
定位相機
這會使相機發出嘟嘟聲.
gpCam.locate(constants.start)
...
gpCam.locate(constants.stop)
打開或關閉相機
根據你指定的相機, 你可以使用單獨的命令打開或關閉它.對於 HERO4 及以上版本(gpcontrol):
gpCam.power_on
HERO3/3+ (auth):
gpCam.power_on_auth
關閉時, 不管用哪種相機:
gpCam.power_off
快速攝像
只需一條命令即可快速捕捉照片, 如果你願意, 也可以設定一個計時器. 這適用於所有相機.
gpCam.take_photo(10) #will wait 10 seconds before taking the picture
將會返回照片的 URL.
快速攝影
只需一條命令即可開始攝影, 你也可以指定影片的時長, 如果不指定, 攝影不會停止. 這適用於所有相機.
gpCam.shoot_video #starts a video
gpCam.shoot_video(40) #shoots a 40 second video
快速修改視頻解析度
此命令會設置指定的視頻解析度和幀率, 參數間以逗號分隔. 確保你的相機支持指定的視頻解析度和幀率.
gpCam.video_settings("1080p","30")
gpCam.video_settings("1440p")
設置正確的時間
GoPro 相機需設置時鐘, 否則媒體的元數據將會不正確.
gpCam.syncTime
修改設置
根據你擁有的相機, 你可以使用指定的命令來修改設置.
HERO4 及以上
命令 gpControlSet
讓你可以修改相機的所有設置. 結構如下:
gpCam.gpControlSet(constants.Setup.COMMAND_NAME, constants.Setup.CommandName.Parameter)
因此, 可以這樣關閉相機的嘟嘟聲:
gpCam.gpControlSet(constants.Setup.BEEP, constants.Setup.Beep.OFF)
constants 命令分成了不同的部分:
* Video
* Photo
* Multishot
* Setup
每個部分都有不同的命令和參數, 所以上面提到的 beep 命令是在 Setup 中的.
對視頻, 照片和多鏡頭, 你可以改變解析度, protune值, 並且在模式中, 你可以修改特定的模式命令. 比如修改 Multishot 的 TimeLapse 時間間隔為10秒:
gpCam.gpControlSet(constants.Multishot.TIMELAPSE_INTERVAL, constants.Multishot.TimeLapseInterval.I10)
或者修改視頻模式到視頻+照片子模式的時間間隔為30分鐘:
gpCam.gpControlSet(constants.Video.VIDEO_PHOTO_INTERVAL, constants.Video.VideoPhotoInterval.Interval30Min)
關於可用設置的完整列表, 請查看 constants.py 文件.
HERO3 / HERO3+
對於 HERO3/HERO3+ 相機, 有一點不同, 因為他們使用了舊版本的 API, 命令與 HERO4 不同.
gpCam.sendCamera(constants.Hero3Commands.COMMAND_NAME, constants.Hero3Commands.CommandName.Parameter)
大部分設置都在 constants.Hero3Commands
中. 但在 GoPro Setup 部分發現某些設置在constants.Hero3Commands.Setup
中, 同時 Capture 設置在constants.Hero3Commands
中.
Hero3Commands:
BURST_RATE
PHOTO_RESOLUTION
CONTINOUOUS_RATE
TIMELAPSE_RATE
FOV
FRAME_RATE
VIDEO_RESOLUTION
Setup:
BEEP
ONE_BTN_MODE
ON_SCREEN_DISP
DEFAULT_MODE
LED
NTSC
Capture Settings:
COLOR_PROFILE
SHARPNESS
EXPOSURE_COMP
SPOT_METER
ISO
VIDEO_PHOTO_INTERVAL
LOOPING_VIDEO
WHITE_BALANCE
ORIENTATION
PROTUNE
只針對 HERO3+ Black Cameras:
gpCam.sendCamera(constants.Hero3Commands.BURST_RATE, constants.Hero3Commands.BurstRate.BU10_1)
gpCam.sendCamera(constants.Hero3Commands.Setup.LED, constants.Hero3Commands.Setup.StatusLight.OFF)
gpCam.sendCamera(constants.Hero3Commands.CaptureSettings.PROTUNE, constants.Hero3Commands.CaptureSettings.ProTune.ON)
狀態
你可以獲取所有可用狀態.
gpCam.overview
將顯示相機的簡單概述, 例如:
對於 HERO4 及以上:
current mode: Video
current submode: Video
current video resolution: 1080p
current video framerate: 30
pictures taken: 78
videos taken: 17
videos left: 01:42:46
pictures left: 3916
battery left: Nearly Empty
space left in sd card: 24.27GB
camera SSID: KonradHERO4Black
Is Recording: Not recording - standby
Clients connected: 1
camera model: HERO4 Black
camera ssid name: KonradHERO4Black
firmware version: HD4.02.05.00.00
對於HERO3/3+:
current mode: Video
current video resolution: 1080p
current photo resolution: 12mp
current timelapse interval: 1s
current video Fov: Wide
status lights: OFF
recording: OFF
HERO4 及以上:
狀態信息分為兩部分, 狀態和設置.
在狀態中, 一般會返回相機概況, 如拍攝的照片數目, 剩餘電量, 當前模式…
在設置中, 從指定的 id 返回狀態, 這個 id 是一條來自 gpControlSet 常量文件中的命令.
你可以使用 getStatus 來查詢狀態信息.
gpCam.getStatus(constants.Status.Status,constants.Status.STATUS.Mode) #Gets current mode status
0gpCam.getStatus(constants.Status.Status, constants.Status.STATUS.BatteryLevel) #Gets battery level
3gpCam.getStatus(constants.Status.Settings, constants.Setup.ORIENTATION) #Gets orientation mode
2
這裡返回的是原始值, 你可以用 parse_value 將其轉化為容易識別的信息.
gpCam.parse_value("video_left",gpCam.getStatus(constants.Status.Status, constants.Status.STATUS.RemVideoTime))
"01:42:50"gpCam.parse_value("video_res",gpCam.getStatus(constants.Status.Settings, constants.Video.RESOLUTION))
"1080p"gpCam.parse_value("battery", gpCam.getStatus(constants.Status.Status, constants.Status.STATUS.BatteryLevel))
"Full"
可以使用 infoCamera 來獲取相機信息, 比如相機名稱和固件名稱:
print(gpCam.infoCamera(constants.Camera.Name)) #Gets camera name
HERO4 Black
print(gpCam.infoCamera(constants.Camera.Firmware)) #Gets camera fw version
HD4.02.05.00.00
HERO3 / HERO3+:
與 sendCamera
非常相似, 它可以返回你想要獲取的輸入的任何值.
狀態信息在 constants.Hero3Status.
中, 這將返回原始值.
gpCam.getStatus(constants.Hero3Status.WhiteBalance)
"00"
gpCam.getStatus(constants.Hero3Status.IsRecording)
"01"
gpCam.getStatus(constants.Hero3Status.PicRes)
"5"
可以將這些值轉化為我們可理解的信息:
gpCam.parse_value(constants.Hero3Status.PicRes, gpCam.getStatus(constants.Hero3Status.PicRes))
"12mp"
gpCam.parse_value(constants.Hero3Status.TimeLapseInterval, gpCam.getStatus(constants.Hero3Status.TimeLapseInterval))
"1s"
gpCam.parse_value(constants.Hero3Status.Mode, gpCam.getStatus(constants.Hero3Status.Mode))
"Video"
媒體
這是跨平台相機:
獲取拍攝的最新的視頻或相片的 url
print(gpCam.getMedia) #Latest media taken URL
http://10.5.5.9:8080/videos/DCIM/104GOPRO/GOPR2386.JPG
獲取最新媒體的名稱/大小:
print(gpCam.getMediaInfo("file")) #Latest media taken filename
GOPR2386.JPG
print(gpCam.getMediaInfo("size")) #Latest media taken size
14.82MB
下載最新的媒體:
gpCam.downloadLastMedia #Downloads last video/photo taken
下載某個 URL(或者抓取並下載它):
gpCam.downloadLastMedia(gpCam.take_photo(5)) #Waits 5 seconds, takes a photo, downloads it to current directory.
gpCam.downloadLastMedia(gpCam.shoot_video(120)) #Shoots a 120 second video and then downloads it.
下載一個低解析度的視頻:
你可以下載以1080p或者更低解析度錄製的視頻. 這可以加快視頻的傳輸, 但低解析度視頻只能用作高質量視頻的參考.
gpCam.downloadLowRes #video is already recorded, now this downloads the low resolution version
gpCam.downloadLowRes(gpCam.shoot_video(120)) #Record a 120 second video and download it in low resolution
下載相機中的所有視頻:
gpCam.downloadAll #downloads all media
gpCam.downloadAll("photos") #downloads only all photos
gpCam.downloadAll("videos") #downloads all videos
下載指定的視頻:
gpCam.downloadMedia("100GOPRO","GOPR0045.MP4")
獲取視頻元數據:
gpCam.getVideoInfo("dur", "GOPR2524.MP4") #gets video duration
24gpCam.getVideoInfo("tags", "GOPR2524.MP4") #get an array of hilight tags in ms
[5872, 7907]gpCam.getVideoInfo("tag_count", "GOPR2524.MP4")
2
刪除:
所有:
gpCam.delete("all")
最新:
gpCam.delete("last")
指定的文件:
gpCam.deleteFile("104GOPRO","GOPR0038.JPG")
列出相機媒體內容:
gpCam.listMedia
將返回相機上可用媒體文件的JSON列表:
{
"id": "3993129928403681535",
"media": [
{
"d": "104GOPRO",
"fs": [
{
"mod": "1490468532",
"n": "GOPR2760.JPG",
"s": "4919786"
},
{
"mod": "1490468536",
"n": "GOPR2761.JPG",
"s": "4942872"
},
{
"mod": "1490468540",
"n": "GOPR2762.JPG",
"s": "4943428"
},
如果你想格式化:
gpCam.listMedia(format=True)
folder: 104GOPRO
GOPR2760.JPG
GOPR2761.JPG
GOPR2762.JPG
GOPR2763.JPG
GOPR2764.MP4
GOPR2765.MP4
GOPR2766.MP4
GOPR2767.MP4
GOPR2768.MP4
將以每行一個的格式返回.
最後, 如果你想返回數組:
gpCam.listMedia(format=True, media_array=True)
[["100GOPRO", "GOPR3132.MP4", "741578340"], ["100GOPRO", "GOPR3133.MP4", "61818786"], ["100GOPRO", "GOPR3134.MP4", "52298492"], ["100GOPRO", "GOPR3135.MP4", "22484879"]]
>>> m=gopro.listMedia(True, True)
>>> m[0] #First media item
["100GOPRO", "GOPR3132.MP4", "741578340"]
>>> m[1] Second media item
["100GOPRO", "GOPR3133.MP4", "61818786"]
>>> m[2] Third media item
["100GOPRO", "GOPR3134.MP4", "52298492"]
>>> m[2][1] #Get name of third media item
"GOPR3134.MP4"
>>> m[2][0] #Get folder of third media item
"100GOPRO"
>>> m[2][2] #Get size (bytes) of first media item
"52298492"
流媒體:
對於流媒體, 類庫提供了以下功能:
這將開啟所有相機的直播流.
gpCam.livestream("start")
gpCam.livestream("stop")
將GoPro流傳輸到另外一個地方, 比如 localhost(需要HERO4/5):
gpCam.stream("udp://localhost:5000")
你也可以設置流的質量, HERO5支持720p!
gpCam.streamSettings(constants.Stream.Bitrate.B4Mbps, constants.Stream.WindowSize.R480) #For HERO4
gpCam.streamSettings(constants.Stream.Bitrate.B4Mbps, constants.Stream.WindowSize.R720) #For HERO5
對於 HERO3, 步驟同上.
請參閱 examples/opencv_gopro 文件夾中的 python 腳本在 openCV 中打開 HERO4/5 源, 並檢測面部. 在 examples/streaming 中有腳本可以將 GoPro 直播流傳輸到Facebook, YouTube 或者 Twitch.
視頻錄屏:HERO4 Black: https://vimeo.com/209079783
HERO4 Session: https://vimeo.com/209129019
HERO3 Black: https://vimeo.com/209181246
HERO5 Black: https://vimeo.com/235135652
英文原文:https://github.com/konradit/gopro-py-api
譯者:郭明
※MySQL 8.0的十大新特性
※PhantomJS宣布終止開發
TAG:Python部落 |