Python程序Airnef在下载图像时卡住了

时间:2018-09-22 13:28:42

标签: python macos wifi photography

我正在使用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"

我连接了相机,并向我显示了一些有关连接的信息:

  

已建立与192.168.188.84:15740的连接
  相机型号“ Canon EOS 200D”,序列号“ XXXXXXXXX”

现在airnef告诉我:

  

正在等待相机中的实时照片下载。
  按下即可退出|

我拍照并按预期下载:

  

下载“ IMG_0084.JPG”:96%

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

  

/Users/besi/Desktop/IMG_0084.JPG [大小= 4,602,357]只需1.94秒(2.26 MB / s)

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

  

正在等待从相机下载的实时照片。按下即可退出\

源代码

可在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:

现在,我们再次进入循环等待更多图片。 拍摄新照片后,相同的步骤再次发生。

1 个答案:

答案 0 :(得分:2)

我没有兼容的相机,因此我的回答仅基于论坛上发布的日志(在 Debug 模式下)。
在其中一项评论中,它也是一个反复试验的建议,因此它不是“科学”方法(在其中找出原因,然后加以解决)。
为了得出这个答案,需要一个团队(@Besi和我)进行努力(功劳应相应地分配)。

根据日志,两个文件的处理方式有所不同:

select * from DcnezekCloudAuction dc1
left join 
(select dc_id, Mosah_code,  [31] , [32] ,[33], [34]
from (select dc.dc_id, dc.Mosah_code, dp.Sapak_code, dp.DC_Pprice_after_discount from DcnezekCloudAuction dc
left join DcnezekCloudAuctionParts dp on dc.dc_id = dp.DC_ID and dp.Mosah_code = dc.Mosah_code) as S
pivot
(
sum (DC_Pprice_after_discount)
 FOR  Sapak_Code IN ([31], [32], [33], [34])
)AS P) piv on dc1.dc_id = piv.dc_id and dc1.Mosah_code = piv.Mosah_code

当处理2 nd 文件( IMG_0183.JPG )时看到,存在1 st 一个文件( IMG_0182 .JPG ),触发一切被放弃。

浏览[TestCams]: airnef - Wireless download from your Nikon Camera!是命令行参数之一(实际上,我建议有更多建议),引起了我的注意:
<ul *ngFor="let item of topic> <li>{{item.topicName}} <ul *ngFor="let info of item.postInformations"> <li> {{info.postName}}</li> <ul *ngFor="let number of info.postNumbers"> <li>{{number.number1}}</li> <li>{{number.number2}}</li> <li>{{number.number3}}</li> </ul> </ul> </ul> ,我建议指定 numobjs (并因此覆盖默认值)。显然,这是(主要)问题。
另一部分是... filename = DCIM\100CANON\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 ... ilename = DCIM\100CANON\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: ... 的存在。默认情况下,在实时下载模式下,它设置为 oldestfirst (请参见下文)。删除它(或多余地指定--rtd\_mtppollingmethod\_newobjdetection)就可以了。

结论

为了解决此问题,有两件事是必要的(对于 airnefcmd.py cmdline args):

  • 指定--transferorder newestfirst
  • 删除--transferorder oldestfirst

根据[GitHub]: besi/airnef - (master) airnef/airnefcmd.py: 3403

--rtd_mtppollingmethod_newobjdetection numobjs

我认为这是 airnef 方面的错误(关于-transferorder )。位于其中一个

  • 代码:在实时模式下,应忽略-转储单
  • 文档:指定--transferorder newestfirst实时模式不兼容