Доступ к USB-сканеру

Мне нужно иметь возможность взаимодействовать с USB-сканером (в частности, с Epson Perfection V550). Я пробовал использовать ImageScanner, но он не находит мое устройство (я также пытался установить twain, но возникают проблемы с сообщением, что

Could not find any downloads that satisfy the requirement twain.)

Поэтому вместо этого я обратился к PyUSB, который может видеть, что устройство есть. Проблема, с которой я столкнулся сейчас, заключается в том, что я не уверен, что мне нужно, чтобы отправить устройство для сканирования и отправки мне обратно изображения.

Вот код, который я запустил:

import usb.core
import usb.util
import sys

venderID = 0x04B8
productID = 0x013B

dev = usb.core.find(idVendor=venderID, idProduct=productID)
for cfg in dev:
    print cfg

и вывод к этому:

CONFIGURATION 1: 2 mA ====================================
   bLength              :    0x9 (9 bytes)
   bDescriptorType      :    0x2 Configuration
   wTotalLength         :   0x20 (32 bytes)
   bNumInterfaces       :    0x1
   bConfigurationValue  :    0x1
   iConfiguration       :    0x0
   bmAttributes         :   0xc0 Self Powered
   bMaxPower            :    0x1 (2 mA)
    INTERFACE 0: Vendor Specific ===========================
     bLength            :    0x9 (9 bytes)
     bDescriptorType    :    0x4 Interface
     bInterfaceNumber   :    0x0
     bAlternateSetting  :    0x0
     bNumEndpoints      :    0x2
     bInterfaceClass    :   0xff Vendor Specific
     bInterfaceSubClass :   0xff
     bInterfaceProtocol :   0xff
     iInterface         :    0x0
      ENDPOINT 0x81: Bulk IN ===============================
       bLength          :    0x7 (7 bytes)
       bDescriptorType  :    0x5 Endpoint
       bEndpointAddress :   0x81 IN
       bmAttributes     :    0x2 Bulk
       wMaxPacketSize   :  0x200 (512 bytes)
       bInterval        :   0xff
      ENDPOINT 0x2: Bulk OUT ===============================
       bLength          :    0x7 (7 bytes)
       bDescriptorType  :    0x5 Endpoint
       bEndpointAddress :    0x2 OUT
       bmAttributes     :    0x2 Bulk
       wMaxPacketSize   :  0x200 (512 bytes)
       bInterval        :   0xff

person Wesley Bowman    schedule 07.07.2014    source источник
comment
Вы явно пытаетесь сделать это в коде или вас удовлетворит работающее приложение? Я был доволен vuescan для моего Fujitsu ScanSnap S1500. Работает в Linux и Windows для USB-сканера, но, возможно, не у вас.   -  person hughdbrown    schedule 07.07.2014
comment
Явно пытаюсь сделать это с помощью Python. Я могу получить доступ с помощью сканера с установленным по умолчанию программным обеспечением, но это не является целью этого проекта.   -  person Wesley Bowman    schedule 07.07.2014
comment
PyUSB позволяет вам получить доступ только к необработанным дескрипторам/конечным точкам USB. Чтобы ваш сканер заработал, вам нужно реализовать собственный драйвер на Python, что требует много работы. Лучше бы вы попытались заставить TWAIN работать.   -  person jbaiter    schedule 08.07.2014
comment
Ознакомьтесь с этим проектом и посмотрите, поможет ли он вам заставить работать TWAIN. github.com/pelletier/django-dynamictwain   -  person Rachel    schedule 09.07.2014
comment
Я буду смотреть в него. Выглядит очень интересно.   -  person Wesley Bowman    schedule 09.07.2014


Ответы (1)


Если вы можете заставить свой сканер работать в Windows, вы можете настроить виртуальную машину Windows на хосте Linux. Я рекомендую gnome-boxes/KVM. Вам понадобится хост-машина с расширениями виртуализации ЦП (это есть у большинства современных ЦП).

Затем установите Wireshark на хост-компьютер. Используя wireshark, вы можете отслеживать USB-соединение между драйвером сканера Windows и устройством. Основываясь на этом, вы, надеюсь, сможете реконструировать протокол USB. Как только вы поймете протокол, реализовать его с помощью PyUSB будет относительно легко.

person user2896082    schedule 08.07.2014
comment
Хорошо. Мне не нужно, чтобы программа работала в линуксе, только в винде, а сканер будет работать и в винде. У меня уже есть Wireshark, поэтому я рассмотрю его обратный инжиниринг. Спасибо. Сообщу о моем прогрессе. - person Wesley Bowman; 09.07.2014