12

画像から Java プログラムにバーコードを読み取る必要がある Java アプリケーションがあります。バーコードを取得できるzxingライブラリには非常に感銘を受けましたが、すべての画像ではありません (つまり、画質が少し悪い場合)。

私の質問は、バーコードを読み取るのに最も適した画像形式は何ですか? JPEGまたはPNG?現在、JPEG画像を試しています。

そして別の質問、画像からバーコードを取得するための最も信頼できる Java API/SDK は何ですか。有料版のAccusoftDataSymbolAtalaSoftj4lは既に試しました。そして、 Ron Cemer JavaBarのようないくつかのオープン ソースを調べました。それでも、バーコードの読み取りで正確な結果が得られる Java API/SDK を探しています。

Barcode Reader JAVA API/SDK に関するあなたの情報は、私にとって本当に役に立ちます。

4

6 に答える 6

6

@Tom Setzer のソリューションは、プロジェクトに多少の追加料金を支払うことを気にしない場合に最適です。ただし、そのようなソフトウェアを入手する予算がない場合でも、Tom の回答を聞くことをお勧めします。

結果を改善するためのオプションの 1 つは、エンジンに送信する前に画像を処理することです。グレー/カラーから白黒に変更する前に、画像を拡大してみてください。エンジンで提供されるものよりも優れた 2 値化 (グレーから白黒) も役立ちます。

彼は正しいですが、私はまだ ZXing を使用しています。バーコードを読み取ろうとする前に画像処理を行う場合にのみ、うまく機能します。

画像処理には OpenCV を使用しています。Linux と Windows の両方で機能する優れたネイティブ ライブラリであり、おそらく他のプラットフォームでも機能します (詳しくは調べていません)。

これが私のやり方です。

  1. 画像をグレースケールに変換します。
  2. バーコードのサイズを最大で高さ 4 倍、幅 8 倍に変更します。
  3. 17x17 ピクセルのサイズでガウスぼかしを適用します。
  4. 225 のしきい値と 255 の最大値でバイナリしきい値を適用します。

これらの手順に従うと、より良い結果が得られます。


資力:

于 2016-09-29T08:56:52.830 に答える
4

最近、バーコードの読み取りに有望な結果をもたらすこのソフトウェアzbarを見つけました。コマンドプロンプトからバーコードをデコードするオプションがあります。SDK や API ではないためです。そこで、java プログラムで画像からバーコードを読み取るトリックを行いました。

import java.io.*;

public class BarCodeReader {
public static void main(String args[]) 
{ 
    try 
    { 
        Process p=Runtime.getRuntime().exec("C:/Program Files/ZBar/bin/zbarimg  D:/jpeg/006.jpg"); 
        p.waitFor(); 
        BufferedReader reader=new BufferedReader(
            new InputStreamReader(p.getInputStream())
        ); 
        String line=reader.readLine(); 
        while(line!=null) 
        { 
            System.out.println(line); 
            line=reader.readLine(); 
        } 

    }
    catch(IOException e1) {} 
    catch(InterruptedException e2) {} 

    System.out.println("Done");

}
}

JAVA で画像からバーコードを読み取ろうとしている人にとって、これが役立つことを願っています。

注: Linux でも機能します。私はそれをテストしました。Linux 環境の場合は、このコマンドを実行するだけです。

sudo apt-get install zbar-tools

Javaプログラムでは、コードを次のように変更します。

Process p=Runtime.getRuntime().exec("zbarimg /opt/images/006.jpg");// your file path.

そして、それは非常にうまく機能します。

コマンドラインで実行できる他のバーコード読み取りSDKまたはAPIまたはソフトウェアに遭遇した場合は、回答を残してください.

于 2014-01-30T05:46:43.750 に答える
1

JPEG は非可逆圧縮であり、圧縮のレベル、画像の解像度、および画像の品質 (照明、コントラストなど) によっては、JPEG 圧縮によって導入されたアーティファクトがバーコードの読み取りを妨げる可能性があります。

PNG はロスレスです。ファイルが大きくなりますが、バーコード エンジンが読み取るための課題 (アーティファクト) が追加されることはありません。

バーコード エンジンの精度については、これは大きく異なります。特定のエンジンは、特定の種類のバーコード (Code 128 と QR コードなど) および画質の問題 (低解像度と低コントラスト) でより優れたパフォーマンスを発揮します。画像のソースを制御できないためにさまざまな画質の問題がある場合は、最高の結果を得るために商用エンジンを使用する必要があります。
結果を改善するためのオプションの 1 つは、エンジンに送信する前に画像を処理することです。グレー/カラーから白黒に変更する前に、画像を拡大してみてください。エンジンで提供されるものよりも優れた 2 値化 (グレーから白黒) も役立ちます。

完全な開示、私はバーコード SDK プロバイダーである Accusoft で働いています。

于 2015-11-23T17:59:02.583 に答える
0

JavaBar は、オープン ソースであり、良い評価を得ていると考えることができるもう 1 つのことです。

于 2013-11-09T10:10:14.230 に答える