Python программа Airnef застряла при загрузке изображений - PullRequest
0 голосов
/ 22 сентября 2018

Я использую Airnef для загрузки изображений с моей цифровой зеркальной камеры Canon через python.

Я могу загрузить одно изображение без проблем, поэтому кажется, что вся настройка работает.Однако, как только я хочу загрузить другой образ, программа зависает.Код для меня выглядит довольно сложным.

Два месяца назад я опубликовал ветку на TestCams.com.Поскольку я не получил ответа, я публикую его как вопрос, связанный с 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», S / N «XXXXXXXXX»

Теперь airnef сообщает мне:

Ожидание загрузки фотографий с камеры в реальном времени.
Нажмите, чтобы выйти |

Я беруизображение и загружает его, как и ожидалось:

Загрузка «IMG_0084.JPG»: 96%

Airnef затем показывает еще немного информации об этом изображении:

/ Users / besi / Desktop / IMG_0084.JPG [размер = 4 602 357] за 1,94 секунды (2,26 МБ / с)

Я делаю еще несколько снимков, но они не загружаются ипрограммное обеспечение зависает при запросе:

Ожидание загрузки фотографий с камеры в режиме реального времени.Нажмите для выхода \

Исходный код

Исходный код доступен на веб-сайте Airnef.Я создал github-репозиторий для решения этой проблемы: https://github.com/besi/airnef

Место, где застрял код, находится по адресу airnefcmd.py: 3203

Обновление: сообщение на форуме

Вот ссылка на сообщение на форуме на testcams.com

Обновление: отладка

Первое изображение под названием IMG_0182 было загружено успешно.

В выходных данных отладки я вижу, что делается новый снимок, но загрузка пропускается, поскольку предыдущий образ уже был загружен:

См. 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 голосов
/ 02 октября 2018

У меня нет совместимой камеры, поэтому я основываю свой ответ исключительно на журналах (в режиме Debug ), размещенных на форуме.
Также это было предложение проб и ошибок в одном из комментариев, так что это не «научный» подход (где причина идентифицируется, а затем исправляется).
Требовалась команда (@Besi и I), чтобы придумать этот ответ (и кредит должен быть соответствующим образом разделен).

Согласно журналам, есть разница между тем, как 2обрабатываются файлы:

...

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:

...

Как видно при обработке файла 2 nd ( IMG_0183.JPG ), существование 1 st one ( IMG_0182.JPG ), запускает все, от чего нужно отказаться.

Просмотр [TestCams]: airnef - Беспроводная загрузка с камеры Nikon! , один из аргументов командной строки (на самом деле, я предложил больше) привлек мое внимание:
--rtd\_mtppollingmethod\_newobjdetection, и я предложил указать numobjs (и, таким образом, переопределить значение по умолчанию).Видимо, это была (главная) проблема.
Другой частью было присутствие --transferorder newestfirst.По умолчанию в режиме Загрузка в реальном времени установлено значение самыми старыми (см. Ниже).Удаление (или избыточное указание --transferorder oldestfirst) сделало свое дело.

Заключение

Чтобы решить проблему, потребовались 2 вещи (в терминах * 1041)* cmdline args для 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 должен игнорироваться в режиме Realtime
  • Doc: укажите, что --transferorder newestfirstнесовместим с режимом Realtime
...