Как сканировать через браузер
В этой статье мы, как вы уже догадались, поговорим про Screen Capture API. Этот API появился на свет в 2014 году, и новым его назвать сложно, однако поддержка браузерами все еще достаточно слабая. Тем не менее его вполне можно использовать для персональных проектов или там, где эта поддержка не так важна.
Немного ссылок для начала:
На случай если ссылка с демо отвалится (или если вам лень туда перейти) — вот так выглядит готовое демо:
Мотивация
Некоторые продукты, такие как 1Password, включают в себя интересное решение для этой ситуации. При необходимости настроить аккаунт из QR-кода, они открывают полупрозрачное окно, которое можно перетащить поверх изображения с кодом, и он автоматически распознается. Вот как это выглядит:
Было бы идеально, если бы мы могли реализовать что-то подобное для нашего приложения. Но, наверное, в браузере так не выйдет.
Встречайте — getDisplayMedia
Ну почти. Здесь нам и поможет Screen Capture API с его единственным методом getDisplayMedia . getDisplayMedia — это как getUserMedia , только для экрана устройства, вместо его камеры. К сожалению, поддержка браузерами, как уже было сказано выше, далеко не такая распространенная, как у доступа к камере. Согласно MDN использовать его можно в Firefox, Chrome, Edge (правда, там оно находится в неправильном месте — сразу в navigator , а не в navigator.mediaDevices ) + Edge Mobile и… Opera for Android.
Довольно любопытная подборка мобильных браузеров рядом с ожидаемой большой двойкой.
Само по себе API крайне простое. Оно работает также, как и getUserMedia , но позволяет захватывать видеопоток с одной из определенных display surface:
- c монитора (экран целиком),
- с окна или всех окон определенного приложения,
- с браузера, или точнее с конкретного документа. В Chrome этим документом является отдельная вкладка, а в FF такая опция отсутствует.
Браузерное API, которое позволяет заглянуть за пределы браузера… Звучит знакомо и обычно сулит одни неприятности, но в данном случае может быть достаточно удобно. Можно захватывать картинку из других окон и, например, в реальном времени распознавать и переводить текст, как Google Translate Camera. Ну и, наверное, есть еще много интересных применений.
Собираем
Итак, с возможностями, которые нам дает API, разобрались. Что дальше?
А дальше нам нужно перегнать этот видеопоток в изображения, над которыми можно работать. Для этого мы используем элементы , и еще немного JS.
Крупным планом процесс выглядит примерно так:
Вся эта процедура может звучать немного странно из-за такого длинного пайплайна, но этот способ достаточно популярен и использовался еще для захвата данных с веб-камер в getUserMedia .
Опуская все не относящееся к делу, чтобы запустить поток и вытащить из него фрейм, нам понадобится примерно следующий код:
Как и говорилось выше: сначала мы создаем элементы и и просим у канваса 2D контекст ( CanvasRenderingContext2D ).
Затем мы определяем ограничения/условия потока. В отличие от потоков с камеры, тут их немного. Мы говорим, что не хотим видеть курсор, и что нам не нужно аудио. Хотя на момент написания этой статьи захват аудио все равно никем не поддерживается.
После этого мы цепляем полученный поток типа MediaStream к элементу . Обратите внимание, что getDisplayMedia возвращает Promise.
Наконец, из полученных данных о потоке мы запоминаем разрешение видео, чтобы правильно отрисовать его на канвас, отрисовываем фрейм и вытаскиваем из канваса объект ImageData .
Для полноценного использования вам, скорее всего, захочется обрабатывать кадры в цикле, нежели один раз. Например, пока вы ждете когда необходимое изображение появится в кадре. И здесь нужно сказать пару слов.
Когда речь заходит об "обработке чего-то в DOM в постоянном цикле", первое, что приходит на ум — это, скорее всего, requestAnimationFrame . Однако в нашем случае использовать его не выйдет. Все дело в том, что когда вкладка перестает быть активной — браузеры ставят обработку циклов rAF на паузу. В нашем случае, именно в это время мы будем хотеть обрабатывать изображения.
В связи с этим вместо rAF мы будем использовать старый добрый setInterval . Но и с ним не так все гладко. В неактивной вкладке интервал между срабатываниями коллбэка составляет минимум 1 секунду. Тем не менее нам этого достаточно.
Наконец, добравшись до кадров, мы можем обрабатывать их как нам заблагорассудится. Для целей этого демо мы будем использовать библиотеку jsQR. Она крайне проста: на вход принимает ImageData , ширину и высоту изображения. Если в полученном изображении есть QR-код — назад вы получите JS-объект с распознанными данными.
Давайте дополним наш предыдущий пример еще буквально парой строк кода:
Я подумал, что основной код за этим примером можно упаковать в npm-библиотеку и сэкономить в последующем использовании немного времени на первоначальную настройку. Библиотека очень проста, на данном этапе она всего лишь принимает коллбэк, на который будет отправляться ImageData , и один дополнительный параметр — частоту отправки данных. Весь процессинг нужно приносить свой. Я подумаю, есть ли смысл расширять ее функционал.
Библиотека называется stream-display : NPM | Github.
Ее использование сводится буквально к трем строчкам кода и коллбэку:
Демо можно посмотреть здесь. Также есть CodePen версия для быстрых экспериментов. Оба примера используют упомянутый выше NPM-пакет.
Немного о тестировании
Упаковывая этот код в библиотеку мне пришлось задуматься о том, как же ее тестировать. Совершенно не хотелось тянуть 50МБ безголового Chrome, чтобы запускать в нем несколько маленьких тестов. И хотя идея писать заглушки для всех составных частей казалась слишком мучительной, в итоге я так и поступил.
В качестве тест-раннера был выбран tape . Вот что в итоге пришлось имитировать:
Также я использовал sinon для всех заглушек функций, за вызовами которых нужно было следить. Остальное было реализовано пустыми JS-функциями.
Разумеется, вы вольны выбирать тот инструментарий, с которым уже знакомы. Но, надеюсь, этот список позволит его заранее подготовить, так как теперь вы знаете, с чем придется иметь дело.
Конечный результат можно увидеть в репозитории библиотеки. Выглядит не слишком красиво, но работает.
Заключение
Решение получилось не столь элегантным, как упомянутое в начале статьи прозрачное окно, но, возможно, однажды веб дойдет и до этого. Остается только надеяться, что когда браузеры научатся видеть сквозь свои окна — эти возможности будут строго подконтрольны нам. А пока что помните, что когда вы шарите экран в Chrome — его могут парсить, записывать, и т.д. Так что не шарьте больше чем нужно!
Надеюсь, кто-то после этой статьи выучил для себя новый трюк. Если у вас есть идеи, для чего еще это может быть использовано, — пишите в комментариях. И до новых встреч.
Привет друзья! Во вчерашней статье " Как настроить общий доступ к сканеру в локальной сети " мы получили доступ к удаленному сканеру при помощи программы Blind Scanner Pro. В сегодняшней статье мы с Вами произведём сканирование документа по сети интернет с помощью обычного вэб-браузера. Не смотря на кажущуюся сложность задачи, всё на самом деле очень просто.
Сканирование документов по сети через веб-браузер
Конфигурация нашей сети осталась прежней и представляет собой следующее: сканер физически подключен к компьютеру с Windows 7 (COMP-1)
Установку производим на компьютер, к которому физически подключен сканер (в нашем случае это компьютер с Windows 7, сканер HP Scanjet g2410)
Произведем настройку программы TWAIN@Web. Для этого в меню Пуск находим TWAIN@Web Standlone, далее Конфигурация
Примечание : На компьютере установлен файервол Outpust Firewall Pro. Нам нужно настроить его таким образом, чтобы он разрешил удаленному компьютеру подключиться к компьютеру с Windows 7.
Мы создали правило и теперь наш файервол не будет блокировать входящие подключения к данному компьютеру по 81 порту
Теперь нам нужно узнать ip адрес компьютера с Windows 7. Запускаем командную строку и вводим команду ipconfig. Как видим ip адрес следующий: 192.168.1.7
Попробуем получить доступ к сканеру с удаленного компьютера. Для этого переходим на компьютер с Windows 10 и запускаем веб-браузер.
В адресной строке браузера прописываем следующее: ip адрес компьютера, к которому физически подключен сканер (Windows 7) а именно 192.168.1.7, порт по которому будут передаваться данные (81),
далее идет следующее выражение /TWAIN@Web/. В итоге в адресной строке нужно ввести следующее 192.168.1.7:81/TWAIN@Web/
Переходим в настройки браузера и указыаем в качестве папки для загрузок данную папку. Именно в нее будут сохраняться отсканированные документы
Выбираем наш сканер WIA-HP Scanjet G2410, вводим имя документа (Сканированный документ), порядок нумерации (001), разрешение DPI (300), режим сканирования (так как мы будем сканировать текст
Автор материала Ro8 .
Комментарии (0)
Но! Вы можете стать первым. Поделитесь своим впечатлением о статье или задайте свой вопрос!
Рекламный блок
Подпишитесь на рассылку
Навигация
Облако тегов
Архив статей
Сейчас обсуждаем
Гость Алекс
Очень жду эту фитчу! Честно из-за ее отсутствия я откатился на 10ку, хотя в 11 много чего нравится,
Grey3
Цитата: Гость Виталий России нужен отечественный VPN. Пользуйтесь Kaspersky VPN - ежемесячно
Гость Алексей
При попытке открыть получившийся ISO в пустой виртуалке, пишет "Fatal: Could not read from the boot
rediffusion
rediffusion
Как будут выглядеть параметры, если ссылаться на уже извлечённый install.wim из .ISO?
RemontCompa — сайт с огромнейшей базой материалов по работе с компьютером и операционной системой Windows. Наш проект создан в 2010 году, мы стояли у истоков современной истории Windows. У нас на сайте вы найдёте материалы по работе с Windows начиная с XP. Мы держим руку на пульсе событий в эволюции Windows, рассказываем о всех важных моментах в жизни операционной системы. Мы стабильно выпускаем мануалы по работе с Windows, делимся советами и секретами. Также у нас содержится множество материалов по аппаратной части работы с компьютером. И мы регулярно публикуем материалы о комплектации ПК, чтобы каждый смог сам собрать свой идеальный компьютер.
Наш сайт – прекрасная находка для тех, кто хочет основательно разобраться в компьютере и Windows, повысить свой уровень пользователя до опытного или профи.
Разделы сайта
Социальные сети
Привет друзья! В прошлой статье " Локальная сеть между компьютером с Windows 7 и Windows 10 " мы с Вами настроили общий доступ к принтеру со всех компьютеров, входящих в локальную сеть, но согласитесь, в жизни всё бывает и иногда присутствует необходимость использовать и удалённый сканер.
В сегодняшней статье мы подключим к компьютеру с Windows 7 сканер HP Scanjet g2410, который будем использовать для сканирования документов по сети. Для осуществления задуманного нам понадобится две программы: Blind Scanner и XnView. Итак, поехали.
Как настроить общий доступ к сканеру в локальной сети
Оставляем по умолчанию. Далее
Так как мы будем управлять удаленным сканером с компьютера с Windows 10, выбираем BlindScanner Pro TWAIN-драйвер (Клиент)
Переходим на компьютер с Windows 7 и таким же образом (как и на Windows 8), устанавливаем на него программу BlindScanner Pro.
Так как наш сканер физически подключен к компьютеру с Windows 7, в данном окне выбираем BlindScanner Pro сервер
Запускаем программу, выбираем наш сканер HP Scanjet G2410 TWAIN (сканер программа определяет автоматически), режим запуска выбираем Приложение и нажимаем Старт
Откроется окно программы BlindScanner. Нажимаем кнопку выбора сервера, к которому будем подключаться (он у нас один, это компьютер с Windows 7)
Далее выбираем наш удаленный сканер HP Scanjet G2410, опции сканирования, такие как разрешение сканирования, режим сканирования (в нашем случае мы будем сканировать текстовый документ, поэтому выбираем черно-белый). Нажимаем Scan
Комментарии (26)
Рекламный блок
Подпишитесь на рассылку
Навигация
Облако тегов
Архив статей
Сейчас обсуждаем
Гость Алекс
Очень жду эту фитчу! Честно из-за ее отсутствия я откатился на 10ку, хотя в 11 много чего нравится,
Grey3
Цитата: Гость Виталий России нужен отечественный VPN. Пользуйтесь Kaspersky VPN - ежемесячно
Гость Алексей
При попытке открыть получившийся ISO в пустой виртуалке, пишет "Fatal: Could not read from the boot
rediffusion
rediffusion
Как будут выглядеть параметры, если ссылаться на уже извлечённый install.wim из .ISO?
RemontCompa — сайт с огромнейшей базой материалов по работе с компьютером и операционной системой Windows. Наш проект создан в 2010 году, мы стояли у истоков современной истории Windows. У нас на сайте вы найдёте материалы по работе с Windows начиная с XP. Мы держим руку на пульсе событий в эволюции Windows, рассказываем о всех важных моментах в жизни операционной системы. Мы стабильно выпускаем мануалы по работе с Windows, делимся советами и секретами. Также у нас содержится множество материалов по аппаратной части работы с компьютером. И мы регулярно публикуем материалы о комплектации ПК, чтобы каждый смог сам собрать свой идеальный компьютер.
Наш сайт – прекрасная находка для тех, кто хочет основательно разобраться в компьютере и Windows, повысить свой уровень пользователя до опытного или профи.
Разделы сайта
Социальные сети
У некоторых многофункциональных устройств, производители предоставляют программное обеспечение, благодаря которому можно нажав на кнопку «Сканировать», документ попадает в определенную папку или сетевой ресурс, а далее сотрудник легко по сети может получить данный документ. Но не все устройства имеют такие функции, по этому, в данном видео рассмотрим программу, позволяющую выполнять удаленное сканирование, т.е. по сети. Не требующее физического присутствия за компьютером, к которому подключен сканер или многофункциональное устройство, чтобы не мешать работающему сотруднику.
Скачиваем программу и запускаем установщик (Расширенные настройки \ Путь оставляем прежним \ Указываем порт). По умолчанию указывается 80 порт, но я не советую его указывать, так как данный порт может быть уже занят Skype-ом или веб-сервером. Если точно знаете, что ни веб-сервер ни Skype не будут устанавливаться на этой машине, то можете оставить 80 порт по умолчанию. Я же укажу 81.
Так же нам понадобится создать правило в брандмауэре Windows, или в стороннем файерволе, если вы не используете стандартный брандмауэр Windows. (Пуск \ Панель управления \ Брандмауэр Windows \ Дополнительные параметры \ Правила для входящих подключений \ Создать правило \ Для программы или порта \ TCP 81 \ Разрешить подключение \ Для всех профилей)
— выбор сканера — тут обычно присутствует 2 устройства, это TWAIN драйвер поставляемый производителем оборудования и WIA драйвер. Лично у меня получалось сканировать только через WIA, по этому, его и выбираем. При переключении можно увидеть какой диапазон разрешения поддерживается, как вы видите, TWAIN драйвер выдает какие-то нереальные цифры, а WIA похожие на правду;
— имя и номер;
— разрешение DPI — обычно достаточно 150, чтобы и файл получился не большой и все можно было разглядеть;
— цвет, тип выходного файла и формат бумаги.
Если вы хотите отсканировать несколько документов подряд, то есть пункт «Пакетное сканирование». Здесь следует указать количество сканированных документов и задержку между сканированием, т.е. время, которое потребуется для замены листа на сканере в секундах. Данная задержка так же выполняется при первом сканировании, чтобы вы успели дойти до сканера и положить туда документ.
Но здесь есть свои тонкости, можно указать сканирование документов с сохранением в отдельные jpeg файлы. Но, в internet explorer каждый раз будет выполняться запрос, сохранить файл или открыть, по этому, все равно придется каждый раз подходить к компьютеру, чтобы выбрать действие. В данной ситуации можно сохранить документы в pdf файл, тогда только по окончании сканирования всех документов появится запрос на сохранение документа.
Если же вам нужно сканировать каждый лист в отдельный jpeg файл, то можно воспользоваться браузером Google Chrome, в нем документы автоматически сохраняются в указанной папке, без запроса. Да и вообще, в Chrome все работает более адекватно, как вы видели в Internet Explorer, не сработало название файла и нумерация, а здесь все отлично. Еще стоит учесть, что нумерация файлов будет продолжаться с последнего сканирования, даже когда вы неделю не сканировали.
Теперь, мы можем просто создать ярлык на рабочем столе у пользователя на данную страницу, а если у вас сеть с доменом, при помощи групповой политики можно раскидать данный ярлык на все компьютеры за считанные минуты!
Таким образом, можно выполнять сканирование даже с таких устройств как телефоны и планшеты, единственное условие, чтобы они находились в одной сети, а далее все так же через браузер.
Если со временем потребуется изменить порт, на котором работает серверная часть программы, то его можно изменить в любой момент (Пуск \ Программы \ TWAIN@Web \ Конфигурация)
Так же желательно указать автоматический перезапуск службы сканирования, при сбоях (Пуск \ Панель управления \ Администрирование \ Службы \ TWAIN@Web \ Тип запуска: автоматически \ Восстановление: на все сбои – перезапуск службы)
И если у вас возник какой-то вопрос или предложение, обращайтесь к разработчикам, они приветствую подобные инициативы!
На моем смартфоне Samsung A5 2017 пропал сканер QR-кода, который раньше находился в фирменном браузере Интернет. В результате мне сразу стали недоступны ссылки в объявлениях для туристов, в рекламе и много где еще. Устанавливать отдельное приложение для чтения только этого кода мне кажется глупым. Как отсканировать QR-код, если производитель не потрудился реализовать его в штатном браузере телефона — в этой статье.
Сканируем QR-код онлайн (работает на всех телефонах)
Подсовываем ему фотографию QR-кода или используем камеру. После расшифровки получаем ссылку.
Метод с сайтом работает и на компьютере.
Сканируем QR приложением Камера
Этот метод может не работать на старых моделях Samsung, включая мой телефон. Но работает с Xiaomi. Возможно, владельцы телефонов других марок найдут у себя в Камере такие настройки.
В Камере Сяоми нажмите кнопку Режимы.
Включите галочку распознавания QR-кодов.
Включив сканер, снимаем куар и получаем ссылку.
Ищем сканер в стороннем браузере
Если у вас установлен иной браузер, можете поискать сканер там. В Хроме такой опции нет, зато есть в браузере Opera Touch. Там нужная кнопка открывается в строке поиска.
Раскодировав ссылку, браузер сразу по ней проследует.
Есть встроенный считыватель и в приложении Яндекс (не путать с одноименным браузером).
Читайте также: