Windows image acquisition перевод

диспетчерское управление и сбор данных
Подсистема сбора, хранения и обработки телеметрической информации, поступающей от удаленных датчиков, осуществляющих измерение температуры, давления, расхода электроэнергии и др. Сбор данных осуществляется с помощью контроллеров, программное обеспечение которых позволяет реализовать практически любой алгоритм опроса датчиков, а также обеспечить первичную обработку информации. Обмен данными часто осуществляется через интерфейс RS-485. Термин SCADA обычно употребляют, когда речь идет о контроле и регулировании каких-либо производственных процессов.
[Л.М. Невдяев. Телекоммуникационные технологии. Англо-русский толковый словарь-справочник. Под редакцией Ю.М. Горностаева. Москва, 2002]

Тематики

  • электросвязь, основные понятия

EN

  • SCADA
  • Supervisory Control and Data Acquisition

SCADA
SCADA-система
диспетчерское управление и сбор данных
ПО, предназначенное для поддержки средств автоматизации и построения систем промышленной автоматизации.
[ http://www.morepc.ru/dict/]

SCADA (аббр. от англ. supervisory control and data acquisition, диспетчерское управление и сбор данных) — программный пакет, предназначенный для разработки или обеспечения работы в реальном времени систем сбора, обработки, отображения и архивирования информации об объекте мониторинга или управления. SCADA может являться частью АСУ ТП, АСКУЭ, системы экологического мониторинга, научного эксперимента, автоматизации здания и т. д. SCADA-системы используются во всех отраслях хозяйства, где требуется обеспечивать операторский контроль за технологическими процессами в реальном времени. Данное программное обеспечение устанавливается на компьютеры и, для связи с объектом, использует драйверы ввода-вывода или OPC/DDE серверы. Программный код может быть как написан на языке программирования (например на C++), так и сгенерирован в среде проектирования.

Иногда SCADA-системы комплектуются дополнительным ПО для программирования промышленных контроллеров. Такие SCADA-системы называются интегрированными и к ним добавляют термин SoftLogic.

Термин «SCADA» имеет двоякое толкование. Наиболее широко распространено понимание SCADA как приложения[2], то есть программного комплекса, обеспечивающего выполнение указанных функций, а также инструментальных средств для разработки этого программного обеспечения. Однако, часто под SCADA-системой подразумевают программно-аппаратный комплекс. Подобное понимание термина SCADA более характерно для раздела телеметрия.

Значение термина SCADA претерпело изменения вместе с развитием технологий автоматизации и управления технологическими процессами. В 80-е годы под SCADA-системами чаще понимали программно-аппаратные комплексы сбора данных реального времени. С 90-х годов термин SCADA больше используется для обозначения только программной части человеко-машинного интерфейса АСУ ТП.

Основные задачи, решаемые SCADA-системами SCADA-системы решают следующие задачи:

  • Обмен данными с «устройствами связи с объектом», то есть с промышленными контроллерами и платами ввода/вывода) в реальном времени через драйверы.
  • Обработка информации в реальном времени.
  • Логическое управление.
  • Отображение информации на экране монитора в удобной и понятной для человека форме.
  • Ведение базы данных реального времени с технологической информацией.
  • Аварийная сигнализация и управление тревожными сообщениями.
  • Подготовка и генерирование отчетов о ходе технологического процесса.
  • Осуществление сетевого взаимодействия между SCADA ПК.
  • Обеспечение связи с внешними приложениями (СУБД, электронные таблицы, текстовые процессоры и т. д.). В системе управления предприятием такими приложениями чаще всего являются приложения, относимые к уровню MES.

SCADA-системы позволяют разрабатывать АСУ ТП в клиент-серверной или в распределённой архитектуре.

  • Драйверы или серверы ввода-вывода — программы, обеспечивающие связь SCADA с промышленными контроллерами, счётчиками, АЦП и другими устройствами ввода-вывода информации.
  • Система реального времени — программа, обеспечивающая обработку данных в пределах заданного временного цикла с учетом приоритетов.
  • Человеко-машинный интерфейс (HMI, англ. Human Machine Interface) — инструмент, который представляет данные о ходе процесса человеку оператору, что позволяет оператору контролировать процесс и управлять им. Программа-редактор для разработки человеко-машинного интерфейса.
  • Система логического управления — программа, обеспечивающая исполнение пользовательских программ (скриптов) логического управления в SCADA-системе. Набор редакторов для их разработки.
  • База данных реального времени — программа, обеспечивающая сохранение истории процесса в режиме реального времени.
  • Система управления тревогами — программа, обеспечивающая автоматический контроль технологических событий, отнесение их к категории нормальных, предупреждающих или аварийных, а также обработку событий оператором или компьютером.
  • Генератор отчетов — программа, обеспечивающая создание пользовательских отчетов о технологических событиях. Набор редакторов для их разработки.
  • Внешние интерфейсы — стандартные интерфейсы обмена данными между SCADA и другими приложениями. Обычно OPC, DDE, ODBC, DLL и т. д.

Концепции систем
Термин SCADA обычно относится к централизованным системам контроля и управления всей системой, или комплексами систем, осуществляемого с участием человека. Большинство управляющих воздействий выполняется автоматически RTU или ПЛК. Непосредственное управление процессом обычно обеспечивается RTU или PLC, а SCADA управляет режимами работы. Например, PLC может управлять потоком охлаждающей воды внутри части производственного процесса, а SCADA система может позволить операторам изменять уста для потока, менять маршруты движения жидкости, заполнять те или иные ёмкости, а также следить за тревожными сообщениями (алармами), такими как — потеря потока и высокая температура, которые должны быть отображены, записаны, и на которые оператор должен своевременно реагировать. Цикл управления с обратной связью проходит через RTU или ПЛК, в то время как SCADA система контролирует полное выполнение цикла.

Сбор данных начинается в RTU или на уровне PLC и включает — показания измерительного прибора. Далее данные собираются и форматируются таким способом, чтобы оператор диспетчерской, используя HMI мог принять контролирующие решения — корректировать или прервать стандартное управление средствами RTU/ПЛК. Данные могут также быть записаны в архив для построения трендов и другой аналитической обработки накопленных данных.

[ http://ru.wikipedia.org/wiki/SCADA]


CitectSCADA
полнофункциональная система мониторинга, управления и сбора данных (SCADA – Supervisory Control And Data Acquisition)

ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ:

CitectSCADA построена на базе мультизадачного ядра реального времени, что обеспечивает производительность сбора до 5 000 значений в секунду при работе в сетевом режиме с несколькими станциями. Модульная клиент-серверная архитектура позволяет одинаково эффективно применять CitectSCADA как в малых проектах, с использованием только одного АРМ, так и в больших, с распределением задач на несколько компьютеров.

В отличие от других SCADA-систем среда разработки CitectSCADA поставляется бесплатно. Оплачивается только среда исполнения (runtime). Это позволяет пользователю разработать и протестировать пробный проект, не вкладывая средств на начальном этапе.

Схема лицензирования CitectSCADA основана на учете числа одновременно задействованных компьютеров в проекте, а не общего числа компьютеров, на которых установлена CitectSCADA.

CitectSCADA лицензируется на заданное количество точек (дискретных или аналоговых переменных). При этом учитываются только внешние переменные, считываемые из устройств ввода/вывода, а внутренние переменные, находящиеся в памяти или на диске, бесплатны и не входят в количество лицензируемых точек. Градация количества лицензируемых точек в CitectSCADA более равномерна, чем в других системах: 75, 150, 500, 1 500, 5 000, 15 000, 50 000 и неограниченное количество.

В CitectSCADA резервирование является встроенным и легко конфигурируемым. Резервирование позволяет защищать все зоны потенциальных отказов как функциональных модулей (серверов и клиентов), так и сетевых соединений между узлами и устройствами ввода/вывода.

CitectSCADA имеет встроенный язык программирования CiCode, а также поддержку VBA.


Словесный портрет современной управляющей системы типа SCADA

  • Масштабируемая

    • Наращивание системы без её переконфигурирования
    • Масштабы проекта не ограничены
    • До 255 одновременно подключённых клиентов
    • Поддержка локальных и глобальных сетей
    • Возможность интеграции с веб-приложениями без конфигурирования системы
    • Возможность функционирования при малой пропускной способности коммуникаций
    • Поддержка кластерных конфигураций
    • Возможность перезапуска отдельных процессов, относящихся к разным компонентам
  • Гибкая

    • Полноценная архитектура «клиент-­сервер»
    • Возможность масштабирования серверов/серверных массивов алармов, трендов и отчётов
    • Поддержка централизованного хранения файлов проекта для удобства обслуживания, а также распределённого хранения и комбинированного варианта
    • Внесение изменений на отдельных локациях
    • Возможность функционирования при малой пропускной способности коммуникаций
    • Поддержка устоявшихся и новых стандартов
  • Надёжная

    • Встроенная поддержка режима ожидания
    • Резервирование файловых серверов
    • Резервирование сетевых коммуникаций
    • Резервирование серверов алармов
    • Резервирование серверов трендов
    • Резервирование серверов отчётов
    • Многоуровневое резервирование ввода-вывода
    • Автоматическая замена серверов
    • Автоматическая синхронизация историй трендов
    • Автоматическая синхронизация таблиц алармов
    • Автоматическая синхронизация времени
    • Защитные функции
    • Автоматический перезапуск в случае сбоя системы
  • Высокопроизводительная

    • Приемлемый уровень производительности для проектов любых масштабов
    • Низкие требования к процессорам и памяти
    • Малая загруженность сети
    • Поддержка многопроцессорных конфигураций
  • Безопасная

    • Настройки безопасности для отдельных пользователей и групп пользователей
    • До 250 одновременно работающих с системой пользователей
    • Неограниченное число имен пользователей
    • Задание набора прав и привилегий для каждого пользовательского имени

Ввод-вывод

  • Коммуникационные технологии

    • Поддержка открытых коммуникационных стандартов
    • Поддержка каждым сервером ввода-вывода многих протоколов
    • Драйверы протоколов RS-232, RS-422, RS-485, TCP/IP
    • Время установки драйверов в пределах 60 секунд
    • До 255 одновременно подключённых клиентов
    • До 4096 устройств ввода-вывода на одну систему
    • Поддержка внешнего подключения для удалённых устройств
    • Средства разработки драйверов для специализированных протоколов
    • Поддержка стандарта OPC Server DA2.0
    • Интегрированный веб-сервис XML
  • Доступ

    • Драйверы предоставляются без дополнительной платы
    • Новые версии драйверов выкладываются на сайт
    • Поддержка обновления драйверов
    • Высокая скорость доступа
    • Динамическая оптимизация для всех драйверов
    • Чтение данных по запросу
    • До 100000 целых чисел в секунду
    • Обновление с устройств ввода-вывода

Метки

  • Неограниченное число меток
  • Длина имени метки до 80 символов
  • Поддержка меток качества и времени для соответствующих драйверов
  • Единая база данных для контроллеров ПЛК и системы SCADA
  • Двунаправленная синхронизация со средой разработки для ПЛК
  • Статическая синхронизация для разработки в автономном режиме
  • — Автоматические импорт и синхронизация
  • Импорт из ПЛК разных типов
  • Добавление пользовательских схем импорта

Графика

  • Разработка

    • Неограниченное число экранов
    • 24-битные цвета
    • Быстрый выбор цветов по названиям
    • Поддержка прозрачных цветов
    • Продвинутая анимация без дополнительного программирования
    • Анимация символов на базе тегов
    • До 32000 анимированных изображений на страницу
    • Неограниченное число мигающих цветов
    • Мультиязычность
    • Инструменты типа 3D Pipe
    • Трёхмерные эффекты (поднятие, опускание, выдавливание)
  • Импорт графики

    • Растровые изображения Windows (BMP, RLE, DIB)
    • Формат AutoCAD (DXF)
    • Формат Encapsulated Postscript (EPS)
    • Формат Fax Image (FAX)
    • Формат Ventura (IMG)
    • Формат JPEG (JPG, JIF, JFF, JFE)
    • Формат Photo CD (PCD)
    • Формат PaintBrush (PCX)
    • Формат Portable Network Graphics (PNG)
    • Формат Targa (TGA)
    • Формат Tagged Image Format (TIFF)
    • Формат Windows Meta File (WMF)
    • Формат Word Perfect Graphics (WPG)
    • Неограниченное число отмен действий
    • Кнопки в стиле Windows XP со свойствами динамического перемещения
  • Шаблоны

    • Большое число шаблонов в разных стилях и для разных разрешений
    • Растягивание шаблонов средствами графического инструментария
    • Шаблоны могут содержать анимацию
    • Изменения в шаблонах отражаются на всех страницах
    • Одни и те же шаблоны могут использоваться в разных проектах
  • Символы
  • Более 800 символов в комплекте поставки

    • Создание пользовательских символов средствами графического инструментария
    • Символы могут содержать анимацию
    • Изменения в символах отражаются на всех их копиях
    • Одни и те же символы могут использоваться в разных проектах
  • Объектное конфигурирование

    • Неограниченное число объектов типа «джинн» (Genie) и «суперджинн» (Super Genie)
    • Пользовательские «джинны» позволяют отображать на экране пользовательское оборудование
    • Пользовательские «суперджины» позволяют работать с разными устройствами через один интерфейс
    • Объекты типа «джинн» и «суперджинн» способны воспринимать изменения в тегах устройств без дополнительного программирования
  • Работа

    • Разрешения до 4096 x 4096
    • Изменение размеров изображений (изотропное и анизотропное)
    • Поддержка вывода на несколько мониторов
    • Настройка скорости обновления страниц (минимум 10 мс)
    • Информирование о потере связи
    • Переключение языков в ходе работы
    • Поддержка одно- и двухбайтовых наборов символов
  • Безопасность

    • Уровень безопасности влияет на:
    • Видимость объектов
    • Доступ к графическим дисплеям
    • Подтверждение алармов
    • Создание отчётов
    • Системные утилиты

Действия

  • Управление

    • Сенсорные команды
    • Мышь
    • -Клавиатурное управление системой, страницами и анимацией
    • Вертикальные и горизонтальные ползунки
    • Замена БД
  • Анализ процессов

    • Объединение алармов с трендами
    • 32 и более перьев
    • 4 и более оконных секций
    • 2 и более курсоров
    • Наложение перьев
    • Информация о качестве данных
    • Аналоговые и цифровые перья
    • Информация о подтверждении алармов
    • Описание алармов (аналоговых и мультицифровых)
    • Комментарии к алармам
    • Поддержка перехода на летнее и зимнее время
    • Сохранение просмотров в процессе работы
    • Хранение просмотров в удалённых локациях
    • Отображение различных временных периодов на том же дисплее
    • Настраиваемое и расширяемое управление
  • Алармы

    • Неограниченное число алармов
    • Централизованная обработка алармов
    • Алармы могут быть следующих типов:
    • Цифровые
    • Аналоговые
    • Временные метки
    • Высокоуровневые выражения
    • Мультицифровые
    • Цифровые с временными метками
    • Аналоговые с временными метками
    • Изменение языка для всех алармов в процессе работы
    • Подтверждение приёма в сети без дополнительного конфигурирования
    • Отключение сети без дополнительного конфигурирования
    • Категории, зоны и приоритеты алармов
    • Задержки алармов
    • Назначение временных меток с разрешением в 1 мс
    • Различные данные в алармах
    • Индивидуальные и групповые подтверждения
    • Подтверждения на основе категорий и приоритетов
    • Подтверждения отображаются графически, в списке алармов или через специализированный код:
    • Сортировка алармов
    • Фильтрация алармов
    • Пользовательские поля алармов
  • Тренды

    • Неограниченное число трендов
    • До 16000 трендов на страницу
    • Отображение любого тренда из истории менее чем за 1 секунду
    • Файлов трендов регулируемых размеров
    • Просмотр архивных трендов параллельно с актуальными в процессе работы системы
    • Выбор с разрешением 1 мс
    • Сравнение трендов
    • Быстрый выбор трендов по тегам
    • Сохранение по событию или периодическое сохранение

Статистический контроль ( SPC)

  • Таблицы индексов Cp и CpK
  • Контрольные карты X, R и S
  • Диаграммы Парето
  • Настраиваемые размеры и границы подгрупп
  • Типы алармов: Above UCL, Below LCL, Outside CL, Down Trend, Up Trend, Erratic, Gradual, Down, Gradual Up, Mixture, Outside WL, Freak, Stratification и высокоуровневые выражения

Отчёты

  • Редактор сгенерированных отчётов, редактирование по модели WYSIWYN, отчёты в формате Rich Text
  • Запуск внешними событиями, по расписанию, через высокоуровневые выражения и по команде оператора
  • Вывод на принтер, в файл, по электронной почте, на экран, в формат HTML

Конфигурирование

  • Разработка проекта
  • Масштабы проекта не ограничены
  • Возможность разбиения на несколько проектов
  • Удобная стандартизация проектов
  • Удобное обслуживание проектов
  • Встроенное средство настройки компьютеров позволяет конфигурировать каждый подключённый к сети ПК по отдельности

Программное обеспечение

  • Истинная вытесняющая многозадачность
  • До 512 параллельных потоков
  • Доступно более 600 функций SCADA
  • Библиотеки для пользовательских функций
  • До 2700 пользовательских функций
  • Локальные, модульные и глобальные переменные
  • Дополнительное программное обеспечение для создания собственных функций не требуется
  • Прямой доступ к данным трендов, отчётов и алармов
  • Подсвечивание синтаксиса
  • Система онлайн-подсказок
  • Всплывающие подсказки
  • При редактировании доступны:
  • Контрольные точки
  • Просмотр переменных
  • Мониторинг нитей
  • Выделение кода цветом
  • Окно контрольных точек
  • Пошаговый режим выполнения
  • Выделение текущей строки
  • Удалённая отладка
  • Автоматическая отладка в случае ошибок

Безопасность

  • Интегрированные средства безопасности Windows на уровне проекта

Обмен данными

  • Сервер и клиент OPC
  • Интерфейс ODBC
  • Интерфейс OLE-DB
  • Интерфейс CTAPI
  • Интерфейс DLL
  • Интерфейс MAPI (MAIL)
  • Протоколы TCP/IP
  • Последовательный интерфейс

[ http://www.rtsoft-training.ru/?p=600074]

Тематики

  • автоматизированные системы

Синонимы

  • SCADA-система
  • диспетчерское управление и сбор данных
  • система диспетчерского управления и сбора данных
  • система мониторинга, управления и сбора данных

EN

  • SCADA
  • SCADA system
  • Supervisory for Control And Data Acquision

This HTML5 player is not supported by your browser

stresses
comp., MS служба загрузки изображений Windows (A device-driver interface that supports still digital cameras and low- and high-end scanners, and allows retrieving of still images from IEEE 1394-based DV camcorders and USB-based Web cams)
media. технология, предназначенная для работы с изображениями в среде Windows Me, позволяет сканировать изображения или отбирать фотографии, выполненные цифровой камерой без предварительного переноса их на жёсткий диск, на диск можно загрузить только отобранные фотографии
 English thesaurus
comp., abbr. WIA
IT, abbr. WIA (MS, Windows, API, DDI)

При подключении сканера или МФУ с функциями сканера, многие пользователи сталкиваются с сообщением об ошибке «Для использования этого устройства требуется драйвер WIA. Установите его с установочного компакт-диска или веб-сайта изготовителя и повторите попытку».

Драйвер WIA — это драйвер Windows Image Acquisition, который требуется для того, чтобы графические программы могли взаимодействовать с соответствующими устройствами. В этой инструкции подробно разберем возможные способы решить проблему и скачать драйвер WIA при необходимости.

Для использования этого устройства требуется драйвер WIA — первые действия

Для использования этого устройства требуется драйвер WIA

Прежде чем пробовать найти в Интернете, где скачать драйвер WIA для вашего принтера/сканера/МФУ, рекомендую выполнить следующие простые действия, которые часто могут решить проблему:

  1. Откройте службы Windows. В Windows 10 и Windows 11 нажмите клавиши Win+R на клавиатуре (Win — клавиша с эмблемой Windows), введите services.msc и нажмите Enter.
  2. В списке служб найдите «Служба загрузки изображений Windows (WIA)». Эта служба должна выполняться, а в поле «Тип запуска» установлено «Автоматически».
    Служба загрузки изображений Windows

  3. Если это не так, дважды нажмите по имени службы, установите тип запуска «Автоматически», примените настройки, а затем нажмите «Запустить» — не исключено, что уже эти действия решат проблему.
    Запуск службы WIA в Windows

Следующее простое действие, которое, если судить по многим отзывам, часто оказывается работоспособным — подключить устройство, которое требует драйвер WIA по USB 2.0 вместо USB 3.0 (как правило, разъемы USB 3.0 синего цвета, а 2.0 — чёрные), иногда может потребоваться последующая переустановка сканера (МФУ).  Попробуйте использовать этот вариант — действительно многим помогает.

В случае, если предложенные методы не сработали, служба WIA уже была запущена, а подключение к USB 2.0 не возымело действия, переходим к следующим действиям.

Где скачать драйвер WIA для сканера

Если устройство при установке сообщает, что для его использования требуется драйвер WIA, почти гарантированно он есть на официальном сайте производителя устройства на странице поддержки вашей модели.

Учитывайте: на официальном сайте может отсутствовать драйвер для текущей версии системы. Например, рассматриваемый вопрос часто возникает по поводу МФУ HP LaserJet M1120. Если у вас установлена Windows 10 или Windows 11. Не обращайте внимания, что на официальном сайте есть драйвер только для Windows 8 — он вполне успешно может использоваться и на более новых операционных системах.

Если скачанный драйвер не устанавливается, сообщая о неподдерживаемой операционной системе, вы можете:

  1. Распаковать файл с установщиком драйвера. Например, для LaserJet M1120 с этим успешно справляется 7-Zip, иногда могут пригодиться утилиты наподобие Universal Extractor. На изображении ниже — скриншот открытого файла установщика драйвера, где мы наблюдаем, в том числе и файлы драйвера WIA (что следует из имени файлов драйверов).
    Драйвер WIA для HP LaserJet M1120

  2. Установить драйвер вручную из INF-файла.

При возникновении проблем с установкой драйверов, предварительно удалите все имеющиеся драйверы вашего сканера или МФУ и само устройство с помощью диспетчера устройств (может потребоваться включить показ скрытых устройств в меню «Вид» и найти устройство в разделе «Устройства обработки изображений»), а также программы от производителя — HP, Canon, Epson или другого.

image

Задача поста — освежить информацию о работе с WIA в .NET, лежащую на просторах сети, т.к. большинство примеров безбожно устарели (они не работают), поделиться опытом с интересующимися и спросить совета у бывалых. Я думаю, совместно обсудить некоторые моменты, будет полезно для коллег, занимающихся подобными задачами. Постараюсь разжевать все моменты.

Мотив был таков: в программе, где хранится информация о людях есть их фотографии, но фотографии туда попадают сложным путем. Берем бумажный оригинал фото (их приносят люди вместе с документами), сканируем в файл, открываем в простом редакторе, кадрируем под 3х4см, сохраняем, в программе открываем анкету человека и там уже добавляем ему фото из готового файла.

Сейчас в программе несколько тысяч человек и стоит задача всех их сфотографировать красиво, потому что они приносят фотографии просто ужасного качества и с разным процентом заполнения лица. Дело за малым: повесить экран, выставить свет, стул, штатив, камера, USB… и наша программа.

У меня были большие планы по реализации этой функции:

  • приходит человек, причесывается, садится напротив камеры
  • оператор наводит камеру, поправляет человеку волосы, одежду… ну чтобы красиво
  • садиться за программу и нажимает кнопку «Сделать все автоматом»
  • все.

Тем временем программа должна:

  • подключиться к камере через WIA
  • заставить камеру сделать фотографию
  • получить из камеры свежий снимок
  • повернуть его в соответствии с данными о повороте
  • найти на фотографии лицо, определив прямоугольник, в который оно вписано
  • высчитать процент масштабирования так, чтобы прямоугольник лица занимал 80% кадра 3х4см при разрешении 300dpi
  • смасштабировать фото и наложить его на белый фон
  • сохранить фото в анкету человека

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

WIA

Windows Image Acquisition (WIA) — это простой способ работы с большинством моделей устройств обработки изображений (фотокамера, сканер, видеокамера и другие). Для успешной работы, нужно, чтобы устройство, как минимум, отобразилось в «Сканерах и камерах» Панели управления Windows. Чтобы это произошло — нужен подходящий драйвер. Какие-то устройства работают из коробки, а другим нужно устанавливать WIA-драйвер вручную, как в случае с фотокамерами Canon EOS.
Самая полезная статья MSDN, которая действительно помогает разораться с проблемами WIA — это статья с примерами. Я случайно наткнулся только на одну, must have.

Простейший код

Для простоты понимания, я приведу здесь код на VB.NET 2008 и C# 2008, и разберу их по полочкам. Сразу обращу внимание, что в нем опущены все субъективные методики, а также проверки на ошибки, чтобы максимально упростить пример. Продумывать логику приложения каждый должен сам, т.к. задачи у всех разные, и бывает очень сложно разобраться в чьем-то коде, особенно, когда тебе из него нужно лишь несколько строк. Коллеги могут раскрыть код на предпочтительном языке и обращаться к нему по ходу текста. Шаги полностью аналогичны.

Здесь исходный код формы Form1 с единственным элементом PictureBox1, растянутым на всю форму. И самое «сложное» здесь — добавить в параметрах проекта ссылку на COM-объект WIA. Перед запуском убедитесь, что ваше устройство включено.

Код VB.NET

Imports WIA

Public Class Form1

    Dim Device1 As WIA.Device
    Dim CommonDialog1 As New WIA.CommonDialogClass
    Dim DeviceManager1 As New WIA.DeviceManager

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' 1. Помогаем пользователю выбрать устройство
        Device1 = CommonDialog1.ShowSelectDevice(WiaDeviceType.CameraDeviceType)
        ' 2. Делаем снимок
        Device1.ExecuteCommand(WIA.CommandID.wiaCommandTakePicture)

        ' 4. Подключаемся к устройству для получения фото
        Dim Device1a As WIA.Device = DeviceManager1.DeviceInfos(Device1.DeviceID).Connect
        ' 3. Запоминаем какой объект нам нужен
        Dim newItem As WIA.Item = Device1a.Items(Device1a.Items.Count)
        ' 5. Читаем файл из устройства
        Dim newImage As WIA.ImageFile = CommonDialog1.ShowTransfer(newItem, WIA.FormatID.wiaFormatJPEG)
        ' 6. Преобразуем полученные данные в вектор 
        Dim newVector As WIA.Vector = newImage.FileData

        ' 7. Забираем из вектора байтовый массив, содержащий изображение
        Dim bytBLOBData() As Byte = newVector.BinaryData
        ' 8. Преобразуем массив в поток
        Dim stmBLOBData As New IO.MemoryStream(bytBLOBData)
        ' 9. Преобразуем поток в изображение и присваиваем его элементу PictureBox
        PictureBox1.Image = Image.FromStream(stmBLOBData)
        ' 10. Режим масштабирования Zoom помогает увидеть весь кадр (в целях отладки)
        PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
    End Sub

End Class

Код C# 2008

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WIA;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            WIA.DeviceManager DeviceManager1 = new DeviceManagerClass();
            WIA.CommonDialogClass CommonDialog1 = new CommonDialogClass();
            
            // 1. Помогаем пользователю выбрать устройство
            WIA.Device Device1 = CommonDialog1.ShowSelectDevice(WiaDeviceType.CameraDeviceType, true, false);

            // 2. Делаем снимок
            Device1.ExecuteCommand(WIA.CommandID.wiaCommandTakePicture);

            // 3. Снова подключаемся к устройству для получения фото
            WIA.Device Device1a = null;
            foreach (DeviceInfo dev_item in DeviceManager1.DeviceInfos)
            {
                // Перечисляем все устройства
                if (dev_item.DeviceID == Device1.DeviceID)
                {
                    // и подключаемся к тому, чей DeviceID совпадает с ранее выбранным
                    Device1a = dev_item.Connect();
                    break;
                }
            }
            
            // 4. Находим какой объект нам нужен
            WIA.Item newItem = Device1a.Items[Device1a.Items.Count];

            // 5. Читаем файл из устройства
            WIA.ImageFile newImage = (ImageFile)CommonDialog1.ShowTransfer(newItem, WIA.FormatID.wiaFormatJPEG, false);

            // 6. Преобразуем полученные данные в вектор
            WIA.Vector newVector = newImage.FileData;

            // 7. Забираем из вектора байтовый массив, содержащий изображение
            Byte[] bytBLOBData = (Byte[])newVector.get_BinaryData();

            // 8. Преобразуем массив в поток
            MemoryStream stmBLOBData = new MemoryStream(bytBLOBData);
        
            // 9. Преобразуем поток в изображение и присваиваем его элементу PictureBox
            pictureBox1.Image = Image.FromStream(stmBLOBData);
            
            // 10. Режим масштабирования Zoom помогает увидеть весь кадр (в целях отладки)
            pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

        }
    }
}

После 7-го шага Вы вольны делать с изображением что угодно: сохранить в файл, сохранить в базу данных, вывести на форму, преобразовать, применить фильтры и т.д. Главное, что оно у вас есть.
Я, чтобы убедиться что все работает, отображал его на форме.

Вроде все просто

Как видите — код краток и насыщен полезными действиями. Но грабли и подводные камни — вечные спутники программистов по разные стороны Microsoft. Там думали, что все сделали просто и очевидно, а мы, как всегда, не поняли.

Шаг 1

        ' 1. Помогаем пользователю выбрать устройство
        Device1 = CommonDialog1.ShowSelectDevice(WiaDeviceType.CameraDeviceType)

Надо выбрать устройство. Есть два пути: выбрать самому или дать выбрать пользователю. Цель у обоих способов одна — получить ID устройства — DeviceID. Дальше можно работать с WIA, используя везде этот DeviceID как ссылку на нужное устройство.

В примере открывается стандартное окно WIA для выбора устройства. Их может быть несколько.
Если нам не нужно, чтобы пользователь решал чем он хочет пользоваться, тогда можно отфильтровать доступные устройства, используя параметр WiaDeviceType. В примере я ищу фотокамеру — CameraDeviceType. Но берегитесь, некоторые картридеры прикидываются фотокамерами.
Здесь можно поступить так: пройтись циклом по всем устройствам и проверить, поддерживают ли они функцию wiaCommandTakePicture (сделать фотку). Соответственно, если таковое небыло найдено, но есть хотябы одно подходящее, то тут пользователю не отвертеться — придется ему решать, чем фотографировать. Как это сделать, хорошо описано в одном из примеров статьи MSDN (см.выше).

Камень №раз

Может статься, что ни одно устройство не поддерживает wiaCommandTakePicture. Это вводит в замешательство, особенно, если у вас Canon и стоят все программы с их диска, включая программу для Remote Shooting (удаленной съемки по USB). В ней он фотографирует, а через WIA не хочет. Здесь можно либо бодаться с Canon и клянчить у них SDK, которую они мало кому дают, а затем писать свой модуль, либо заставлять пользователя делать снимок вручную, а дальше все делать автоматом. Но в целом игра стоит свечь. Имейте в виду, что у Canon много подразделений, и SDK они распространяют каждое в своем регионе. Для России все грустно, но можно попробовать обратиться в Европейское отделение. Примерно так они мне ответили по почте.

Шаг 2

        ' 2. Делаем снимок
        Device1.ExecuteCommand(WIA.CommandID.wiaCommandTakePicture)

Ок, допустим нам повезло и можно фотографировать. Ур… а-э-э… What a f*ck?
Никаких настроек. Можно только сделать фото. Камера (читай — объектив) выезжает, щелкает в режиме полной автоматики (или что там на переключателе выставлено) и уезжает обратно. Ну, и на том спасибо.
Честно говоря, я не углублялся в проблематику предварительной настройки камеры удаленно, но потуги у населения замечены при помощи Гугла. Возможно кто-то смог найти решение.
Камера делает кадр и сохраняет его в свою память или карту. Теперь его надо оттуда достать!

Шаг 3

        ' 3. Подключаемся к устройству для получения фото
        Dim Device1a As WIA.Device = DeviceManager1.DeviceInfos(Device1.DeviceID).Connect

Еще раз подключаемся к камере, но уже в другом режиме. На C# этот шаг чуть длиннее. Здесь мы подключаемся к ней, как вместилищу файлов. Будьте бдительны! Структура файлов запоминается на момент подключения! Об этом дальше…

Шаг 4

        ' 4. Находим какой объект нам нужен
        Dim newItem As WIA.Item = Device1.Items(Device1.Items.Count)

Пока писал статью, похоже, понял причину проблемы с Камнем №два. Спасибо Харб!
На этом шаге, мы запоминаем ID последнего файла, хранящегося в камере, т.к. объект Device1.Items хранит информацию обо всех файлах и папках, хранящихся в памяти камеры. Да да, и папок тоже — будьте внимательны. Через этот объект можно получить любую информацию, например имя файла. Это все есть в примерах MSDN (см.выше). Здесь нам помогает простой счетчик объектов. Логично, но не всегда верно, что наша новая фотография — сделана последней. Так что проверку на ошибки здесь тоже нужно вставить.

Шаг 5

        ' 5. Читаем файл из устройства
        Dim newImage As WIA.ImageFile = CommonDialog1.ShowTransfer(newItem, WIA.FormatID.wiaFormatJPEG)

И хватаем файл, указатель на который запомнили.
Здесь процесс загрузки фотографии будет показан стандартным WIA-интерфейсом с прогрессбаром.
Одним из параметров функции является формат передаваемого файла. Мне вот нужен wiaFormatJPEG. Это чтобы фотоаппарат вдруг не отдал мне TIFF. (шутка)

Камень №два

А вернее грабли, здесь заключаются в том, что функция, выдающая последнюю сделанную фотографию, запоминает структуру файлов камеры на момент подключения. Вот почему используется новое подключение — нужно обновить структуру файлов после фотографирования.

Шаг 6

        ' 6. Преобразуем полученные данные в вектор 
        Dim newVector As WIA.Vector = newImage.FileData

Единственный документированный способ получения фотографии — это ее получение через вектор-интерфейс. В итоге, в этом объекте будет много всего, но нас интересует лишь один — массив байт BinaryData, содержащий изображение.

Шаги 7,8,9

        ' 7. Забираем из вектора байтовый массив, содержащий изображение
        Dim bytBLOBData() As Byte = newVector.BinaryData
        ' 8. Преобразуем массив в поток
        Dim stmBLOBData As New IO.MemoryStream(bytBLOBData)
        ' 9. Преобразуем поток в изображение и присваиваем его элементу PictureBox
        PictureBox1.Image = Image.FromStream(stmBLOBData)

Этот BinaryData требует парочки преобразований, прежде чем он станет полноценной картинкой. Байты в поток, поток в изображение. А дальше можно делать с полученным объектом что угодно (согласно комментариям в листинге).
К слову: указанным методом изображения преобразуются для хранения в СУБД (только преобразование идет в обратную сторону).

Шаг 10

        PictureBox1.SizeMode = PictureBoxSizeMode.Zoom

Каждому свой путь, ну а я для наглядности, присвоил картинку свойству Image элемента PictureBox1. Чтобы посмотреть на себя тепленького.

Теперь осталось только обеспечить обработку ошибок, т.к. WIA — очень капризная и ситуаций будет много (больше всего их будет при разработке под x64-систему, потому что во время отладки в случае ошибки, код не выдаст исключения, а просто не будет выполнен начиная с места возникновения ошибки). Камера, например, может уснуть, пока ей долго не будут пользоваться. Многое нужно предусмотреть.

Очень часто применяется эта технология для работы типа «бюро пропусков» с фотографиями.

Теперь о вопросах для обсуждения:

  1. У кого-нибудь есть SDK для Canon? Можете ли поделиться необходимыми DLL-ками для некоммерческого использования?
  2. Распознать прямоугольник, в который вписано лицо на фотографии, можно буквально за 10 строк, используя OpenCV и ее обертку для .NET. Чем я и займусь в ближайшем будущем.

Спасибо за внимание!
UPD: Добавлен пример на C#. Убрал путаницу с шагами.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Hid совместимая мышь драйвер windows 10 не работает мышь
  • Windows 10 скорость загрузки в трее
  • Смена порта rdp windows server 2012
  • Hyperx ngenuity download windows 10
  • Какой windows стоит на lenovo