Как написать программу сканер

Привет! Меня зовут Сергей, я Flutter-разработчик SimbirSoft. В этой статье хочу поделиться интересным платформоспецифичным кейсом для мобильных устройств и ТСД . Нам с командой удалось сократить затраты на разработку и ускорить процесс ввода данных в 2 раза.

Клиент располагает крупными товарными складами, на которых сотрудники используют сканеры 1-D/2-D кодов — это смартфоны на iOS, Android, а также терминалы сбора данных с установленным Flutter-приложением для сборки заказов. Нашей задачей стало обновить плагин сканера, не привлекая отдельные команды для разных платформ.

Очевидно, что данная функциональность сильно полагается на платформу, и Flutter из коробки не умеет работать с ТСД. Как мы решили эту задачу, расскажу по порядку, а в конце поделюсь результатами тестов и ссылкой на исходный код. Спойлер: по сравнению с ручным вводом штрихкодов скорость выросла в 13,4 раза, а с предыдущей версией сканера в 2 раза.

Подобный кейс применим везде, где требуется сканировать 1-D/2-D коды в большом количестве. Поэтому материал будет полезен разработчикам кроссплатформенных приложений для решения подобных задач, а также их заказчикам.

Как написать СКАНЕР портов на Python ?

Вводные данные

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

Для этого сотрудник использует специальное мобильное приложение на Android и iOS со сканером, написанным на Flutter. Сканер не работает в режиме потока, а вызывается по запросу, и каждое отдельное сканирование занимает 2 секунды (это в идеальном случае). Кажется, что немного, но за весь день приходится обрабатывать тысячи таких кодов.

Владелец склада планирует расширение бизнеса, он хотел бы отправлять больше заказов и тратить на распознавание штрихкодов меньше времени. Еще для части работников он решает приобрести ТСД (терминал сбора данных) под управлением Android.

Работа со сканером в Java (ввод и вывод данных)

Scanner Vertex Academy

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

  1. Когда мы путешествуем, в аэропорту наш багаж пропускают через ленту со сканером. Вот она была наша сумка на входе. Просканировал сканер сумку и работник аэропорта четко знает что ж мы там такое везём в ней.
  2. Точно также работает сканнер в магазинах. Вот был штрих-код на входе, отсканировал штрих-код продавец и теперь всё-всё знает о продукте, который числится под этим штрих-кодом.
Читайте также:
Характеристика на ученика 2 класса по адаптированной программе

Чем то схожие задачи есть и в мире программирования на Java. Например, часто необходимо выполнить такие задачи:

  • Пользователь ввёл в консоли какое-то число. А программа должна считать с консоли, какое же число ввёл пользователь.
  • Пользователь ввёл в консоли какое-то слово. А программа должна считать с консоли, какое же слово ввёл пользователь.

Для решения таких задач в Java используется сканер (от англ. Scanner). Запомните: если что-то ввели в консоли, а нам надо считать что же именно ввели — используем сканер.

Как создать приложение для считывания штрих-кода на андроид

Итак, рассмотрим несколько примеров кода, после которых Вы:

  1. Поймёте на практике как работает сканер. Всего в статье будет 6 примеров кода. Рекомендуем все примеры кода запускать на своём компьютере и на практике изучать как это работает.
  2. Освоите 4 метода сканера:

Методы — это, грубо говоря, действия , которые может выполнять Scanner. На самом деле методов у сканера намного больше. Но на данном этапе Вам будет достаточно этих 4 методов. Ну что, поехали.

Пример №1 — с методом nextInt ()

Допустим, мы хотим, чтоб пользователь ввёл в консоль любое целое число от 1 до 10 , а программа вывела ему ответ, какое именно число он ввёл.

Поскольку нам необходимо как бы «сосканировать», какое число ввёл пользователь, всё логично — нам понадобится сканер. Ниже приводим решение и комментарии к решению.

Решение:

import java . util . Scanner ; // импорт сканера
class Test <
public static void main ( String args [ ] ) <
System . out . print ( «Введите любое целое число от 1 до 10: » ) ;
Scanner scan = new Scanner ( System . in ) ;
int number = scan . nextInt ( ) ;
System . out . println ( «Вы ввели число » + number ) ;

Читайте также:
Программа определяет сколько лет

Если Вы попробуете запустить этот код на своём компьютере, то в консоли Вы увидите следующее:

Введите любое целое число от 1 до 10:

Затем, если Вы, например, введёте число 5, то в консоли будет следующее:

Введите любое целое число от 1 до 10: 5
Вы ввели число 5

Комментарии:

В статье «Что такое библиотека Java?» мы с Вами разобрались, что в Java есть огромная библиотека протестированного кода — это уже готовые решения ко многим задачам, которые стоят перед программистами в их ежедневной работе . Также мы говорили о различных пакетах, классах и методах. Так вот, сейчас мы будем с Вами работать с пакетом java.util. В этом пакете есть класс Scanner. И у него есть методы (действия), которые позволяют работать с вводом и выводом информации в консоль.

Сканер в Java

Но чтобы мы смогли использовать в нашем коде класс Scanner, нам необходимо сделать 3 шага.

Шаг №1 — обязательно прописать вот такую строчку в коде

Источник: vertex-academy.com

Сканер документов на основе технологии машинного зрения

Computer Vision

В последнее время, когда я работал с OpenCV, мне пришла в голову идея написать фреймворк для преобразования изображений. Такое приложение будет полезно каждый день и с ним будет просто работать. Потом как-то меня попросили оцифровать чек за топливо как основание для оформления претензии.

Я делал такое и раньше, брал для этого одно из множества приложений, которые можно скачать с Playstore, но в этот раз у меня в голове поселился вопрос “почему я не делаю это своими силами?”. Ведь в целом, это всего лишь захват области документа с фотографии или изображения. Ну и ну!

Я сразу же увидел идею для нового проекта: сделать свой собственный сканер документов. И раз в OpenCV есть все эти функции по обработке изображений, то я решил взять его в качестве инструмента. Так я и приступил к созданию своего собственного сканера документов при помощи машинного зрения, OpenCV и Python.

Читайте также:
Как удалить страницу в программе word

Давайте перейдём к делу без долгих предисловий. Для начала я составил список основных этапов обработки. Вот они:

  1. “Прочитать” фотографию или изображение: если размеры изображения большие, вы можете выбрать уменьшить его в масштабе, чтобы обработать быстро или же изменить размер прямо в текущем окне.
  2. Идентифицировать границы: чтобы сделать это, нам может понадобиться конвертировать изображение в серое для уменьшения цветового шума. Чтобы убрать любой высокочастотный шум, мы слегка размоем изображение. Это поможет дальше определить контуры.
  3. Найти границы документа в изображении: это выявит нужную нам область в изображении. На этом этапе мы сможем увидеть контур своего документа.
  4. Идентифицировать и получить границы документа: в этой части больше всего программирования, а мы будем соотносить каждую пару координат с ближайшим углом и рассчитаем размеры документа.
  5. Применить перспективное преобразование: чтобы получить полную картинку сверху донизу, так сказать, обзор документа “с высоты птичьего полёта”, мы будем переводить полученную интересующую нас область в нужную перспективу.
  6. Финальные шаги: мы подготовим изображение к итоговому выводу для пользователя. Этого шага может и не быть, вам решать, как вы хотите видеть свой документ. А может вы выберете применить любое преобразование, как, например, черно-белое или увеличение контраста.

Давайте перейдём к практике по каждому пункту. Я добавил куски кода и снэпшоты изображений в ходе обработки, чтобы проиллюстрировать то, что происходит с документом в процессе. Программирую в этом случае на Python.

Шаг 1: чтение фотографии или изображения

# импортирование необходимых библиотек import numpy as np import cv2 import imutils # параметр для сканируемого изображения args_image = “fuel_bill_to_scan.jpg” # прочитать изображение image = cv2.imread(args_image) orig = image.copy() # показать исходное изображение cv2.imshow(“Original Image”, image) cv2.waitKey(0) # press 0 to close all cv2 windows cv2.destroyAllWindows()

Первый шаг. В нём мы импортируем необходимые библиотеки и определяем аргумент исходного изображения со ссылкой на место, где оно лежит, чтобы отсканировать его и обработать. После этого мы читаем изображение при помощи функции imread OpenCV и делаем бэкап-копию на случай, если оно понадобится позже.

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru