Чтение штрих-кода с использованием снимка с использованием камеры мобильного телефона

Как мы делаем программное считывание штрих-кода, который фиксируется с помощью камеры мобильного телефона? Например, как это сделать с помощью iPhone или Android или Java ME? Нужно ли нам использовать отдельное оборудование для чтения штрих-кода или мы можем делать манипуляции с изображениями?

Ответ 1

Google сделал этот НЕВЕРОЯТНО простой со своими библиотеками Intent для вызова Barcode Reader с чем-то вроде:

public Button.OnClickListener mScan = new Button.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "ONE_D_MODE");
        startActivityForResult(intent, 0);
    }
};

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            // Handle successful scan
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
}

Ответ 2

Штрих-коды можно прочитать с помощью анализа, сделанного с телефонных камер.

Известное осложнение заключается в том, что камеры с фиксированным фокусом (например, на старых iPhone 2G/3G и некоторые андроиды) не могут принимать фокусные снимки с фокусом на короткие расстояния. Чтобы противостоять этому, необходимо использовать специальные алгоритмы "деконволюции" - и в последний раз я проверял, что это не является частью перехода Zebra.

Некоторые из них внедрили решения - я знаю о следующих приложениях для iPhone, которые могут читать UPC с камерой с фиксированным фокусом: pic2shop (Benoit Maison/Vision Smarts), RedLaser (Затылочный) и ShopSavvy (Большой в Японии) - проверьте их и я думаю, что у всех из них есть SDK для заинтересованных сторон.

Ответ 3

Для Android это очень просто. Просто используйте сервис, предоставляемый приложением сканера штрих-кода (зависимость). Затем приложение Barcode Scanner будет обрабатывать всю часть сканирования и просто вернет вам код.

Я думаю, что подобные решения доступны для других платформ, но в Android это еще проще благодаря своей архитектуре Intent.

Ответ 4

Я бы рекомендовал выбрать решение, которое также декодирует штрих-коды в размытых изображениях. Существует множество недорогих телефонов Android, в которых есть только фиксированные фокус-камеры и для которых требуются более сложные решения для обработки изображений, чем двоичные пороговые значения, предлагаемые перечисленными выше программными решениями. Примеры таких более продвинутых решений включают redlaser или Сканер штрих-кода Scandit.

Scandit SDK очень легко интегрируется и поставляется с бесплатным изданием сообщества. Существует также API-интерфейс продукта, который упрощает преобразование номеров штрих-кодов в названия продуктов.

Отказ от ответственности: Я являюсь одним из соучредителей Scandit.

Ответ 5

Очевидно, что можно прочитать штрих-код с его изображения. Вам, вероятно, нужно подумать о таких проблемах, как

  • Ориентация; возможно, фотография не прямолинейна, поэтому полосы не вертикальны. Кроме того, это может быть перевернуто...
  • Фокус; что, если выстрел размыт? Вероятно, существует предел, в котором невозможно безопасно его интерпретировать.
  • Обрезанные; что, если кадрирование плохо, поэтому весь код даже не на изображении?

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

Ответ 6

Просто для обновления для всех новичков, которые ищут ответ на этот вопрос, Google теперь предлагает Barcode Detection Apis через Google Play Services для упрощения сканирование штрих-кода с помощью камеры телефона. Больше не нужно зависеть от стороннего Apis.