Python 程序 Airnef 在下载图像时卡住
Python program Airnef stuck while downloading images
我正在使用 Airnef 通过 python 从我的 Canon DSLR 相机下载照片。
我可以毫无问题地下载一张图片,所以整个设置似乎都可以正常工作。但是,一旦我想下载另一个图像,软件就会挂起。代码对我来说看起来很复杂。
两个月前,我在 TestCams.com 上做了 post a thread。由于我还没有得到回复,所以我 post 这里作为 python 相关问题。
线程
我从命令行启动 airnef。
python airnefcmd.py --ipaddress 192.168.188.84 --action getfiles --realtimedownload only --downloadexec open @pf@ --transferorder newestfirst --outputdir "/Users/besi/Desktop"
我连接了摄像头,我看到了一些关于我的连接的信息:
Connection established to 192.168.188.84:15740
Camera Model “Canon EOS 200D”, S/N “XXXXXXXXX”
现在 airnef 告诉我:
Waiting for realtime photos from camera to download.
Press to exit |
我拍照并按预期下载:
Downloading “IMG_0084.JPG”: 96%
Airnef 随后会显示有关此图片的更多信息:
/Users/besi/Desktop/IMG_0084.JPG [size = 4,602,357] in 1.94 seconds (2.26 MB/s)
我又拍了一些照片,但没有下载,软件卡在提示符下:
Waiting for realtime photos from camera to download. Press to exit \
源代码
源代码可在 Airnef 网站上获得。我创建了一个 github 存储库来解决这个问题:https://github.com/besi/airnef
代码卡住的地方在airnefcmd.py:3203
更新:论坛 Post
这里是link到forum post on testcams.com
更新:调试
第一张图片调用IMG_0182was downloaded成功
在调试输出中,我可以看到正在拍摄一张新照片,但由于之前的图像已经下载,所以跳过了下载:
filename = DCIM0CANON\IMG_0183.JPG
captureDateSt = 20180926T071759
modificationDateStr= 20180926T071758
找到了一个名为 IMG_0183.JPG
的新图像。
Skipping IMG_0182.JPG - already downloaded this session
下载的旧图像似乎阻止了对当前图像的进一步处理。
Skipping 100CANON - object is not file - MTP_OBJFORMAT_Assocation (0x3001)
Skipping DCIM - object is not file - MTP_OBJFORMAT_Assocation (0x3001)
Waiting for realtime photos from camera to download. Press <ctrl-c> to exit -execMtpOp: MTP_OP_GetObjectHandles - CmdReq payload:
现在我们又陷入了等待更多图片的循环中。
当拍摄新照片时,同样的过程再次发生。
我没有兼容的相机,所以我的回答完全基于论坛上发布的日志(调试 模式)。
此外,这是其中一条评论中的试错建议,因此它不是“科学”方法(找出原因,然后修复)。
需要一个团队(@Besi 和我)的努力才能得出这个答案(并且应该相应地分配功劳)。
根据日志,这 2 个文件的处理方式有所不同:
...
filename = DCIM0CANON\IMG_0182.JPG
captureDateSt = 20180926T071747
modificationDateStr= 20180926T071748
Download history file “/Users/besi/Library/Application Support/airnef/appdata/Canon EOS 200D-SN59074c1578e347a3bf1f6f85e8dec624-downloadhist” loaded – 53 entries
>> MTP_OP_GetObject
Downloading “IMG_0182.JPG”: 0%IMG_0182.JPG – downloading next piece, offset=0x0, count=0x100000
...
filename = DCIM0CANON\IMG_0183.JPG
captureDateSt = 20180926T071759
modificationDateStr= 20180926T071758
Skipping IMG_0182.JPG – already downloaded this session
Skipping 100CANON – object is not file – MTP_OBJFORMAT_Assocation (0x3001)
Skipping DCIM – object is not file – MTP_OBJFORMAT_Assocation (0x3001)
Waiting for realtime photos from camera to download. Press <ctrl-c> to exit -execMtpOp: MTP_OP_GetObjectHandles – CmdReq payload:
...
如处理第2nd文件(IMG_0183.JPG)时所见,存在第1st一个(IMG_0182.JPG),触发一切被放弃
浏览[TestCams]: airnef - Wireless download from your Nikon Camera!,其中一个命令行参数(实际上,我建议的还有更多)引起了我的注意:
--rtd_mtppollingmethod_newobjdetection,我建议指定 numobjs(从而覆盖默认值)。显然,这是(主要)问题。
另一部分是--transferorder newestfirst的存在。默认情况下,在 Realtime Download 模式下,它设置为 oldestfirst(见下文)。删除它(或冗余指定 --transferorder oldestfirst)就成功了。
结论
为了解决这个问题,需要做两件事(根据 cmdline args for airnefcmd.py):
- 指定--rtd_mtppollingmethod_newobjdetection numobjs
- 移除--transferorder newestfirst
根据[GitHub]: besi/airnef - (master) airnef/airnefcmd.py#3403:
g.args['transferorder'] = 'oldestfirst' # so that downloadMtpFileObjects() will properly enumerate through multiple realtime images as we add them
我认为这是 airnef 方面的错误(关于 --transferorder)。它位于
- 代码:--transferorder在实时模式
中应该被忽略
- Doc: 指定--transferorder newestfirst不兼容Realtime模式
我正在使用 Airnef 通过 python 从我的 Canon DSLR 相机下载照片。
我可以毫无问题地下载一张图片,所以整个设置似乎都可以正常工作。但是,一旦我想下载另一个图像,软件就会挂起。代码对我来说看起来很复杂。
两个月前,我在 TestCams.com 上做了 post a thread。由于我还没有得到回复,所以我 post 这里作为 python 相关问题。
线程
我从命令行启动 airnef。
python airnefcmd.py --ipaddress 192.168.188.84 --action getfiles --realtimedownload only --downloadexec open @pf@ --transferorder newestfirst --outputdir "/Users/besi/Desktop"
我连接了摄像头,我看到了一些关于我的连接的信息:
Connection established to 192.168.188.84:15740
Camera Model “Canon EOS 200D”, S/N “XXXXXXXXX”
现在 airnef 告诉我:
Waiting for realtime photos from camera to download.
Press to exit |
我拍照并按预期下载:
Downloading “IMG_0084.JPG”: 96%
Airnef 随后会显示有关此图片的更多信息:
/Users/besi/Desktop/IMG_0084.JPG [size = 4,602,357] in 1.94 seconds (2.26 MB/s)
我又拍了一些照片,但没有下载,软件卡在提示符下:
Waiting for realtime photos from camera to download. Press to exit \
源代码
源代码可在 Airnef 网站上获得。我创建了一个 github 存储库来解决这个问题:https://github.com/besi/airnef
代码卡住的地方在airnefcmd.py:3203
更新:论坛 Post
这里是link到forum post on testcams.com
更新:调试
第一张图片调用IMG_0182was downloaded成功
在调试输出中,我可以看到正在拍摄一张新照片,但由于之前的图像已经下载,所以跳过了下载:
filename = DCIM0CANON\IMG_0183.JPG
captureDateSt = 20180926T071759
modificationDateStr= 20180926T071758
找到了一个名为 IMG_0183.JPG
的新图像。
Skipping IMG_0182.JPG - already downloaded this session
下载的旧图像似乎阻止了对当前图像的进一步处理。
Skipping 100CANON - object is not file - MTP_OBJFORMAT_Assocation (0x3001)
Skipping DCIM - object is not file - MTP_OBJFORMAT_Assocation (0x3001)
Waiting for realtime photos from camera to download. Press <ctrl-c> to exit -execMtpOp: MTP_OP_GetObjectHandles - CmdReq payload:
现在我们又陷入了等待更多图片的循环中。 当拍摄新照片时,同样的过程再次发生。
我没有兼容的相机,所以我的回答完全基于论坛上发布的日志(调试 模式)。
此外,这是其中一条评论中的试错建议,因此它不是“科学”方法(找出原因,然后修复)。
需要一个团队(@Besi 和我)的努力才能得出这个答案(并且应该相应地分配功劳)。
根据日志,这 2 个文件的处理方式有所不同:
... filename = DCIM0CANON\IMG_0182.JPG captureDateSt = 20180926T071747 modificationDateStr= 20180926T071748 Download history file “/Users/besi/Library/Application Support/airnef/appdata/Canon EOS 200D-SN59074c1578e347a3bf1f6f85e8dec624-downloadhist” loaded – 53 entries >> MTP_OP_GetObject Downloading “IMG_0182.JPG”: 0%IMG_0182.JPG – downloading next piece, offset=0x0, count=0x100000 ... filename = DCIM0CANON\IMG_0183.JPG captureDateSt = 20180926T071759 modificationDateStr= 20180926T071758 Skipping IMG_0182.JPG – already downloaded this session Skipping 100CANON – object is not file – MTP_OBJFORMAT_Assocation (0x3001) Skipping DCIM – object is not file – MTP_OBJFORMAT_Assocation (0x3001) Waiting for realtime photos from camera to download. Press <ctrl-c> to exit -execMtpOp: MTP_OP_GetObjectHandles – CmdReq payload: ...
如处理第2nd文件(IMG_0183.JPG)时所见,存在第1st一个(IMG_0182.JPG),触发一切被放弃
浏览[TestCams]: airnef - Wireless download from your Nikon Camera!,其中一个命令行参数(实际上,我建议的还有更多)引起了我的注意:
--rtd_mtppollingmethod_newobjdetection,我建议指定 numobjs(从而覆盖默认值)。显然,这是(主要)问题。
另一部分是--transferorder newestfirst的存在。默认情况下,在 Realtime Download 模式下,它设置为 oldestfirst(见下文)。删除它(或冗余指定 --transferorder oldestfirst)就成功了。
结论
为了解决这个问题,需要做两件事(根据 cmdline args for airnefcmd.py):
- 指定--rtd_mtppollingmethod_newobjdetection numobjs
- 移除--transferorder newestfirst
根据[GitHub]: besi/airnef - (master) airnef/airnefcmd.py#3403:
g.args['transferorder'] = 'oldestfirst' # so that downloadMtpFileObjects() will properly enumerate through multiple realtime images as we add them
我认为这是 airnef 方面的错误(关于 --transferorder)。它位于
- 代码:--transferorder在实时模式 中应该被忽略
- Doc: 指定--transferorder newestfirst不兼容Realtime模式