我正在使用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
成功命名为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:
现在,我们再次进入循环等待更多图片。 拍摄新照片后,相同的步骤再次发生。
答案 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
与实时模式不兼容