Считывание штрих-кода с помощью изображения, сделанного с помощью камеры мобильного телефона
Как мы делаем программное чтение штрих-кода, который захватывается с помощью камеры мобильного телефона? Например, как это сделать с помощью iPhone или Android или Java ME? Нам нужно отдельное оборудование для чтения штрих-кода или мы можем манипулировать изображениями?
6 ответов
Google сделал это невероятно просто с их "Зебре" библиотеки. Они поддерживают сканирование с помощью изображений на следующих платформах:
- в J2SE
- Android
и другие портировали кому:
- для J2ME
- используется CSharp
- CPP
- Rim
- iPhone
- ошибка
Как уже упоминалось, на Android вы также можете использовать намерение чтобы вызвать считыватель штрих-кодов с чем-то вроде:
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
}
}
}
штрихкоды можно прочитать через анализ взятый от камер телефона.
хорошо известное осложнение заключается в том, что камеры с фиксированной фокусировкой (например, на старых айфонах 2G/3G и некоторых андроидах) не могут принимать снимки в фокусе на короткие расстояния. Для борьбы с этим, особое "deconvoluting" алгоритмы должны быть использованы - и в последний раз я проверил, это не была часть по зебре.
некоторые реализовали решения - я знаю о следующих приложениях для iPhone, которые могут читать UPCs с камерой с фиксированной фокусировкой: pic2shop (Benoit Maison / Vision Smarts), RedLaser (Occipital) и ShopSavvy (Big в Японии) - проверьте их, и я думаю, что все они имеют доступные SDK для заинтересованных сторон.
для Android это очень легко. Просто используйте услугу, предоставляемую приложением сканера штрих-кодов (dependancy). Затем приложение сканер штрих-кода будет обрабатывать все части сканирования и просто вернет вам код.
Я думаю, что подобные решения доступны для других платформ, но в Android это еще проще из-за его архитектуры намерения.
Я бы рекомендовал выбрать решение, которое также декодирует штрих-коды в размытых изображениях. Есть много недорогих телефонов Android, которые имеют только фиксированные камеры фокусировки и требуют более сложных решений для обработки изображений, чем двоичный порог, который предлагают программные решения, перечисленные выше. Примеры таких более продвинутых решений включают redlaser или SCANDIT сканер штрих-кода SDK.
SCANDIT SDK очень легко интегрировать и поставляется с бесплатное издание сообщества. Существует также API продукта это делает его простым для преобразования номеров штрих-кодов в названия продуктов.
отказ от ответственности: я один из соучредителей Scandit.
очевидно, что можно прочитать штрих-код из его изображения. Вероятно, вам нужно подумать о таких проблемах, как
- ориентация; возможно, фотография не является прямой, поэтому полосы не являются вертикальными. Кроме того, он может быть перевернут...
- фокус; что делать, если снимок размыт? Вероятно, есть предел, когда становится невозможным безопасно интерпретировать его.
- обрезано; что делать, если кадр плохой, поэтому весь код даже не находится в изображение?
есть много существующих проектов и продуктов, которые решают это ... вот один, например. Некоторые решения, по-видимому, не очень чувствительны к точкам, подобным приведенным выше, но утверждают, что могут находить и распознавать штрих-коды независимо от ориентации и местоположения на изображении, например.
просто для обновления всех новичков, ищущих ответ на этот вопрос, Google now предлагает API Обнаружения Штрих-Кодов через сервисы Google Play для упрощения сканирования штрих-кода с помощью камеры телефона. Больше не нужно зависеть от сторонних API.