DOBON.NETプログラミング道掲示板

■34243 / 親記事)  Code128でバーコードが読み取れない
  
□投稿者/ ぴょん 一般人(8回)-(2019/04/30(Tue) 12:59:08)
  • アイコン環境/言語:[VB.NET] 
    分類:[.NET] 

    2019/04/30(Tue) 14:07:30 編集(投稿者)
    2019/04/30(Tue) 14:06:30 編集(投稿者)
    2019/04/30(Tue) 14:05:47 編集(投稿者)
    2019/04/30(Tue) 14:05:30 編集(投稿者)
    
    Zxing.NetのCode128でバーコードを作成し、
    ハンディターミナルで読み取りをしています。
    4桁や15桁のバーコードはすぐに値を検知するのですが、
    40桁のバーコードはなかなか検知してくれません。
    以下、ソースを書きました。
    何か問題点があれば、ご教示願います。
    
    
    --------------------------------------------------------------------------
    Dim img As New Bitmap(2200, 1000, Imaging.PixelFormat.Format24bppRgb)
    
    Using g = Graphics.FromImage(img)
    
      Dim writer As New ZXing.BarcodeWriter
    
      'バーコードの種類
      writer.Format = ZXing.BarcodeFormat.CODE_128
    
      'マージン
      writer.Options.Margin = 1
    
      '文字コード
      writer.Options.Hints(ZXing.EncodeHintType.CHARACTER_SET) = "Shift_JIS"
        
      writer.Options.PureBarcode = blnPureBarcode
    
      'エラー訂正レベル
      writer.Options.Hints(ZXing.EncodeHintType.ERROR_CORRECTION) =
                                  ZXing.QrCode.Internal.ErrorCorrectionLevel.L
    
      '作成
      dim btmp as Bitmap = 
                  writer.Write("1234567890ABCDEFGHIJ1234567890ABCDEFGHIJ")
    
      g.DrawImage(btmp, 1080, 560, 310, 110)
    End Using
    --------------------------------------------------------------------------
    
    
    又、作成したバーコードも添付します。
    幅を広げれば少しは読み取れるようになるのですが、
    幅は変えずにバーコードの太さを変える方法等あれば。
    

415×59 => 250×35
イメージ
1556596748.png
/3KB
マルチポストを報告
違反を報告
引用返信 削除キー/
■34245 / ResNo.1)  Re[1]: Code128でバーコードが読み取れない
□投稿者/ Azulean 大御所(508回)-(2019/04/30(Tue) 17:04:30)
  • アイコンNo34243に返信(ぴょんさんの記事)
    > 幅を広げれば少しは読み取れるようになるのですが、
    > 幅は変えずにバーコードの太さを変える方法等あれば。

    CODE128 は 4 段階のバーの太さがあるため、かなり高解像度なプリンターでないといけないらしいです。
    このため、幅を勝手に縮めてバーの解像度を落とすようなことをすると、読み取れなくなることは避けられないのでは?と思います。
    どれくらいまで読み取れるかは、バーコードリーダー側の読み取り精度に依存し、リーダーによっては読めないと言うことがあり得ます。

    このため、コードでなんとかする領域ではなく、諦めるか、リーダー側をより高精度なものに置き換えるか、CODE128 をやめるかということになりそうです。
違反を報告
引用返信 削除キー/
■34246 / ResNo.2)  Re[2]: Code128でバーコードが読み取れない
□投稿者/ ぴょん 一般人(1回)-(2019/04/30(Tue) 18:41:42)
  • アイコン2019/04/30(Tue) 18:42:21 編集(投稿者)
    2019/04/30(Tue) 18:42:15 編集(投稿者)
    2019/04/30(Tue) 18:42:06 編集(投稿者)

    ご回答ありがとうございます。
    以下、的外れな記述であれば申し訳ありません。

    > このため、幅を勝手に縮めてバーの解像度を落とすようなことをすると、
    > 読み取れなくなることは避けられないのでは?と思います。

    幅に上限は無かった為、ハンディで読み取れる事を最優先で調べていました。

    g.DrawImage(btmp, 1080, 560, 310, 110)

    g.DrawImage(btmp, 1080, 560, 410, 110)

    パラメータを310 → 410に変更したら、
    何となく読み取れる回数が増えた気がしました。


違反を報告
引用返信 削除キー/
■34247 / ResNo.3)  Re[3]: Code128でバーコードが読み取れない
□投稿者/ Azulean 大御所(509回)-(2019/04/30(Tue) 19:07:34)
  • アイコンNo34246に返信(ぴょんさんの記事)
    > 幅に上限は無かった為、ハンディで読み取れる事を最優先で調べていました。
    (略)
    > パラメータを310 → 410に変更したら、
    > 何となく読み取れる回数が増えた気がしました。

    ディスプレイに表示するならディスプレイのピクセル密度、紙に印刷しているならプリンターの解像度にも左右されるでしょう。
    そのため、この数値でならうまくいったという試行錯誤で結論を決めることは、危ないかもしれません。
    (表示環境・読み取り端末など、環境依存した結果になる。CODE128 の最小幅の規格から逆算して、十分な解像度を保つ必要がある…と思われる)

    自分の環境でしか使わないのであれば、自分で試してうまくいく範囲で良いと思います。
    汎用的なプログラムを作っているのか、自分専用のプログラムを作っているのか、どちらなのでしょうか?


    -----
    (参考)バーコードの品質に関して言及しているサイトのいくつか
    https://www.a-poc.co.jp/howto/howto_NG_barcode.html
    http://www.ainix.co.jp/howto_autoid/barcode_symbol/16.html
    「モジュール幅(X)はUSS-CODE128の規格によると0.191mmです。」
違反を報告
引用返信 削除キー/
■34248 / ResNo.4)  Re[4]: Code128でバーコードが読み取れない
□投稿者/ ぴょん 一般人(9回)-(2019/04/30(Tue) 23:39:39)
  • アイコンご回答ありがとうございます。
    説明不足で申し訳ありません。

    > 汎用的なプログラムを作っているのか、自分専用のプログラムを
    > 作っているのか、どちらなのでしょうか?

    客先に納品予定で、RFIDタグにバーコードを出力する
    プログラムを作成しています。
    旧システムから出力されるバーコードもcode128を使用していた為、
    ほぼ同じ幅・長さで40桁のバーコードを作成したところ、
    ハンディでなかなか読み取れませんでした。
    (旧システムはすぐに読み取れる事ができて、線も太いです)

    そこで幅や長さを度外視して、まずは確実にハンディで読み取れるように
    手探りで設定を変更していました。



違反を報告
引用返信 削除キー/
■34250 / ResNo.5)  Re[5]: Code128でバーコードが読み取れない
□投稿者/ Azulean 大御所(510回)-(2019/05/01(Wed) 00:42:22)
  • アイコンNo34248に返信(ぴょんさんの記事)
    > 客先に納品予定で、RFIDタグにバーコードを出力する
    > プログラムを作成しています。

    RFID タグにバーコードを出力する…という表現では具体像が見えづらいのですが、シールプリンターか何かですか?
    それとも普通のインクジェットプリンターで専用のシール台紙に印刷しているのですか?

    印刷であれば、プリンターの解像度、印刷するための処理の作り方に左右されると思います。(今掲載されていないコードの範囲も影響しうる)

    > そこで幅や長さを度外視して、まずは確実にハンディで読み取れるように
    > 手探りで設定を変更していました。

    Bitmap や DrawImage あたりを触るだけでは解決市内可能性もあります。
    自分が扱っている画像の解像度(DPI)は何で、プリンターなどの出力に流す際にその DPI(解像度)はどうなるのかをきちんと把握して、元画像のあるべき姿を決めにかからないといけないと思われます。
違反を報告
引用返信 削除キー/
■34251 / ResNo.6)  Re[6]: Code128でバーコードが読み取れない
□投稿者/ ぴょん 一般人(10回)-(2019/05/01(Wed) 10:09:01)
  • アイコン2019/05/01(Wed) 10:21:06 編集(投稿者)
    2019/05/01(Wed) 10:17:02 編集(投稿者)
    2019/05/01(Wed) 10:10:48 編集(投稿者)

    ご回答ありがとうございます。
    ソースに問題があると思い込んでいました。

    > シールプリンターか何かですか?
    > それとも普通のインクジェットプリンターで専用のシール台紙に
    > 印刷しているのですか?

    リコーのRFID出力プリンタに、バーコードを出力しています。

    https://industry.ricoh.com/rfid/printer/prkl.html

    印刷する用紙は、以下のRFIDタグを使用しています。

    https://industry.ricoh.com/rfid/recoview/about/


    バーコード等のデザインを印刷する場合、
    [34243]でコーディングしたbmpを8ビットのグレースケールにし、
    バイト配列に変換したデータを、
    プリンタ側に渡す仕様になっていました。





違反を報告
引用返信 削除キー/
■34252 / ResNo.7)  Re[7]: Code128でバーコードが読み取れない
□投稿者/ Azulean 大御所(511回)-(2019/05/02(Thu) 09:16:34)
  • アイコン2019/05/02(Thu) 09:22:40 編集(投稿者)

    No34251に返信(ぴょんさんの記事)
    > ソースに問題があると思い込んでいました。

    ソースコードの問題である可能性は、否定できません。
    ただし、今抜粋されている範囲内に問題があるかどうかはわかりません。

    添付されている画像を見る限り、縮小時に補間がかかっていて、中間色が出ているようなので、これは読み取りに影響を与えると思われます。
    Graphics.InterpolationMode へ NearestNeighbor を指定すればマシになるかどうか。

    また、BarcodeWriter には Options があるらしいので、そこでサイズを指定する方法に切り換えるという道もあるかもしれません。(後から縮小するよりもまっとうなやり方だと思います)
    参考:https://office-fun.com/tech-memo-zxingnet-1d-barcode/


    > リコーのRFID出力プリンタに、バーコードを出力しています。

    ニッチな用途なので、これに特有の問題であれば、第三者には助言できないと思います。
    基本的には質問者さんの自助努力で頑張るしかないです…。
違反を報告
引用返信 削除キー/
■34255 / ResNo.8)  Re[8]: Code128でバーコードが読み取れない
□投稿者/ ぴょん 一般人(11回)-(2019/05/07(Tue) 11:02:53)
  • アイコンご回答ありがとうございます。
    返信が遅くなり、申し訳ありません。

    > Graphics.InterpolationMode へ NearestNeighbor を指定すれば
    > マシになるかどうか。
    InterpolationModeプロパティをいろいろ試したところ、
    高品質双三次補間がハンディで一番検知しやすかったです。

    Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic


    > また、BarcodeWriter には Options があるらしいので、
    > そこでサイズを指定する方法に切り換えるという道もあるかもしれません。
    サイズ指定も以下に修正しましので、
    作業を進めていきたいと思います。

    --------------------------------------------------------------------------
    'サイズ指定
    writer.Options.Width = 310 '幅
    writer.Options.Heigth = 110 '高さ

    '作成
    dim btmp as Bitmap =
    writer.Write("1234567890ABCDEFGHIJ1234567890ABCDEFGHIJ")

    g.DrawImage(btmp, 1080, 560)
    ''g.DrawImage(btmp, 1080, 560, 310, 110)
    --------------------------------------------------------------------------

解決み!
違反を報告
引用返信 削除キー/



スレッド内ページ移動 / << 0 >>

このスレッドに書きこむ

Mode/  Pass/


- Child Tree -