我正在使用Airnef通过python从佳能DSLR相机下载图片。

我可以下载一张图片而不会出现问题,因此整个设置似乎可以正常工作。但是,一旦我要下载其他镜像,软件就会挂起。对我来说,代码看起来很复杂。

两个月前,我确实在TestCams.com上发布了a thread。由于我没有得到回应,因此我将其发布为与Python相关的问题。

线程

我从命令行启动airnef。

python airnefcmd.py --ipaddress 192.168.188.84 --action getfiles --realtimedownload only --downloadexec open @pf@ --transferorder newestfirst --outputdir "/Users/besi/Desktop"

我连接了相机,并看到一些有关连接的信息:



现在airnef告诉我:



我拍了一张照片,并按预期下载了它:



然后,Airnef显示有关此图像的更多信息:



我拍了一些照片,但没有下载,并且该软件停留在提示符下:



源代码

源代码可在Airnef网站上找到。我创建了一个github存储库来解决此问题:https://github.com/besi/airnef

代码被卡住的地方是airnefcmd.py:3203

更新:论坛帖子

这是forum post on testcams.com的链接

更新:调试

第一张图片成功命名为IMG_0182 was downloaded

在调试输出中,我可以看到正在拍摄一张新照片,但是由于先前的图像已经下载,因此下载被跳过了:

参见airnef.log:433:
    filename           = DCIM\100CANON\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和我)进行努力(功劳应相应地分配)。
根据日志,这两种文件的处理方式有所不同:

从处理第二个文件(IMG_0183.JPG)时可以看出,第一个文件(IMG_0182.JPG)的存在会触发一切被放弃。
浏览命令行参数之一[TestCams]: airnef - Wireless download from your Nikon Camera!(实际上,我还建议更多)引起了我的注意: --rtd_mtppollingmethod_newobjdetection ,我建议指定numobjs(因此覆盖默认值)。显然,这是(主要)问题。另一部分是 --transferorder newestfirst 的存在。默认情况下,在实时下载模式下,它设置为最早的优先(请参见下文)。删除它(或多余地指定 --transferorder oldestfirst )就可以了。
结论
为了解决此问题,需要做两件事(就airnefcmd.py的cmdline args而言):

  • 指定--rtd_mtppollingmethod_newobjdetection numobjs
  • 删除--transferorder最新firstfirst

  • 根据[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
  • 文件:指定--transferorder newestfirst与实时模式
  • 不兼容

    关于Python程序Airnef在下载图像时卡住了,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52457112/

    10-13 05:03