首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GoPro Python API

非官方 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所代替.

用法:

你可以用这个类库做很多事情, 以下是一些命令如何使用的片段:

fromgoprocamimportGoProCamera

fromgoprocamimportconstants

gpCam = GoProCamera.GoPro()

注意: 你可以使用 来初始化, 它会检测连接哪台相机以及使用哪个 API, 因为我只测试了 HERO4 和 HERO3, 可能不太可靠. 如果你想连接指定的相机, 可以使用 HERO4/5/HERO+ 的 和 HERO3/HERO3+ 的 .

如果你想为相机指定特定的 MAC 地址(只支持 HERO4/5/HERO+):

重要:对 HERO5 Session/Black 和 HERO4 Session, 这是必须的.

注意: 某些命令仅适用于 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 及以上

命令 让你可以修改相机的所有设置. 结构如下:

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)

大部分设置都在 中. 但在 GoPro Setup 部分发现某些设置在 中, 同时 Capture 设置在 中.

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)

状态

你可以获取所有可用状态.

将显示相机的简单概述, 例如:

对于 HERO4 及以上:

currentmode:Video

currentsubmode:Video

currentvideoresolution: 1080p

currentvideoframerate: 30

picturestaken: 78

videostaken: 17

videosleft: 01:42:46

picturesleft: 3916

batteryleft:NearlyEmpty

spaceleftinsdcard: 24.27GB

cameraSSID:KonradHERO4Black

IsRecording:Notrecording-standby

Clientsconnected: 1

cameramodel:HERO4Black

camerassidname:KonradHERO4Black

firmwareversion:HD4.02.05.00.00

对于HERO3/3+:

currentmode: Video

currentvideo resolution: 1080p

currentphoto resolution: 12mp

currenttimelapse interval: 1s

currentvideo Fov: Wide

statuslights:OFF

recording:OFF

HERO4 及以上:

状态信息分为两部分, 状态和设置.

在状态中, 一般会返回相机概况, 如拍摄的照片数目, 剩余电量, 当前模式…

在设置中, 从指定的 id 返回状态, 这个 id 是一条来自 gpControlSet() 常量文件中的命令.

你可以使用 getStatus() 来查询状态信息.

gpCam.getStatus(constants.Status.Status,constants.Status.STATUS.Mode)#Gets current mode status

gpCam.getStatus(constants.Status.Status, constants.Status.STATUS.BatteryLevel)#Gets battery level

3

gpCam.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+:

与 非常相似, 它可以返回你想要获取的输入的任何值.

状态信息在 中, 这将返回原始值.

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

24

gpCam.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)

>>> 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][] #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

译者:郭明

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180423A077Q600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券