C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[25]: JPEG画像からバーコードを読んで数字を取り出したい


(過去ログ 81 を表示中)

[トピック内 40 記事 (1 - 20 表示)]  << 0 | 1 >>

■47881 / inTopicNo.1)  JPEG画像からバーコードを読んで数字を取り出したい
  
□投稿者/ ヤーレン (1回)-(2010/03/17(Wed) 01:50:02)

分類:[C#] 

C#で開発をしている初心者です。
【OS】 Win XP SP3
【開発環境】VC# 2008 Express Edition
JPEG画像からバーコードを読んで数字を取り出したいと考えています。
C# バーコード jpg
で検索してみたのですが、参考になりそうなソースを見つけることができませんでした。
バーコードを生成することはできるらしいのですが、
画像から読むのにはどの辺りを参考にしたらいいか、まずはアドバイスお願いします。


引用返信 編集キー/
■47884 / inTopicNo.2)  Re[1]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ Azulean (537回)-(2010/03/17(Wed) 07:12:17)
まず、画像からバーコードを読むようなエンジンはそれだけで商品として売れるものだと思います。(性能によるかもしれませんが)
また、バーコードと一口に言っても複数の規格があります。

処理の流れとしてざっくりと書くとすれば、画像データからまずは白(背景)と黒(バーの色)の 2 値にしなければなりません。
そして、バーの太さ・間隔を企画に照らして、データに戻す(デコード)しなければなりません。

文章上では簡単に見えるかもしれませんが、入力が傾いていたり、鮮明な画像でなかったり、バーコードにかすれ・汚れがあったりなどを考慮する必要があるので、この「バーコードを読み取る」という行為で相当な時間がかかると思います。
場合によってはそういったエンジンを調達できないかということも検討するべきでしょう。
引用返信 編集キー/
■47885 / inTopicNo.3)  Re[2]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ やじゅ (1559回)-(2010/03/17(Wed) 09:52:20)
やじゅ さんの Web サイト
>JPEG画像からバーコードを読んで数字を取り出したいと考えています。

Code39などのバーコードであれば英数字が読めればいいので、
OCRエンジンを使ってみるとかですね。

Googleがオープンソースとして公開した「Tesseract」がOCRエンジン
http://sourceforge.net/projects/tesseract-ocr/
Google製エンジンを搭載したフリーの欧文OCRソフト「Softi FreeOCR」v1.5
http://www.forest.impress.co.jp/article/2007/07/30/softifreeocr.html

"Microsoft Office Document Imaging *.* Type Library" を使うという方法があります。
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200805/08050013.txt
C#で文字認識を行う
http://tmp.junkbox.info/e48.html
引用返信 編集キー/
■47886 / inTopicNo.4)  Re[3]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ みきぬ (829回)-(2010/03/17(Wed) 09:58:59)
> Code39などのバーコードであれば英数字が読めればいいので、

それはバーコードを読んではないと思うんだけど…ありなの?
引用返信 編集キー/
■47888 / inTopicNo.5)  Re[1]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ .SHO (1220回)-(2010/03/17(Wed) 10:25:02)
No47881 (ヤーレン さん) に返信

> JPEG画像からバーコードを読んで数字を取り出したいと考えています。
> C# バーコード jpg

C#で読み取るツールを探しているなら話は別ですが
バーコードの読み取りアルゴルリズム自体は C# や jpg とは関係ないので
わざわざ検索範囲を狭めず、素直に「バーコード」で検索した方が良いでしょう。

かなり昔ですが、自分も自作したことがありますが、読み取り自体は
それほど難しくないです。

ただ、jpg だと白と黒の2値にするのが少しだけ面倒かも?
まぁ、スレッショルドかけて、どちらかに倒すだけかも知れないけど
雑音は入るでしょうね。
引用返信 編集キー/
■47889 / inTopicNo.6)  Re[2]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ ヤーレン (2回)-(2010/03/17(Wed) 10:33:13)
Azuleanさん、ありがとうございます。
おっしゃるとおり、商品として売れるかもしれません。
バーコードに複数の種類があるのはそのとおりですね。
今回は、書籍のバーコードを想定しています。

画像データを切り出して2値にするのはできそうです(と書いたあとでコメントをいただいたのを見たら、めんどうそうかも…)。
そのあとのデコードがむずかしそうですね。
おっしゃるとおり、傾きやかすれなどの補正処理もたいへんなので、エンジンの調達を考えています。
フリーであるとよいのですが、dllでもexeでも(ひょっとして有料でも)、使い勝手がよければありかなと思っています。

やじゅさん、ありがとうございます。
バーコードではないかもしれませんが、今回は書籍のバーコードなので、たしかにOCRもありかもと思います。
調べてみたところ、C#で文字認識を行う方法が使えそうな気がしました。
ソースもC#のがあったみたいですし。
方向が見えてきました。この方法ですこしやってみます。
ありがとうございます。

みきぬさん、今回はありかもしれません。

.SHOさん、ありがとうございます。
なるほど。おっしゃるとおり、C#から結果だけを得られればよいので、バーコードで検索するのもありですね。
2値にするのはめんどうですか。えっ。なんかメソッドひとつでできそうな気がしていたんだけど、甘いか…。
C#のソースとかって、もし残っていたら見せていただけないでしょうか。

引用返信 編集キー/
■47890 / inTopicNo.7)  Re[3]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ .SHO (1221回)-(2010/03/17(Wed) 10:48:52)
No47889 (ヤーレン さん) に返信

> 2値にするのはめんどうですか。えっ。なんかメソッドひとつでできそうな気がしていたんだけど、甘いか…。

いや、やってみないとわからんです。もしかしたら簡単かも^^;
バーコードなんてそんなに精度必要ないし。
(コンビニのバイトのおねぇ〜ちゃんが適当に扱っても読めるぐらいじゃなきゃ
使い物にならないしねぇ。)

そういう意味では、OCRで数値読むなんてするより、バーコード読んだ方がいいです。
って、そのためにバーコードは作られたわけだし…
数値はそれを人間が読みやすいようにしてるだけですよね。

> C#のソースとかって、もし残っていたら見せていただけないでしょうか。

C#が存在しない大昔にC言語で作ったのでC#のソースはないです。ごめんなさい。
つか、Cのソースも残ってないけど…OSはMS-DOSだし...
引用返信 編集キー/
■47892 / inTopicNo.8)  Re[3]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ みきぬ (830回)-(2010/03/17(Wed) 15:08:36)
No47889 (ヤーレン さん) に返信
> 今回は、書籍のバーコードを想定しています。
>
その書籍のバーコードを、どうやってjpg画像にしているのかしら。

いや、いっそUSBバーコードリーダーを買ってきて使ったほうが手っ取り早くないかなーと思っただけなんだけどね。
引用返信 編集キー/
■47895 / inTopicNo.9)  Re[4]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ ヤーレン (4回)-(2010/03/17(Wed) 15:56:43)
現状報告です。
あまりうまくいってないです。
(1)
Microsoft Office Document Imaging 11.*/12.* Type Library
MDIVWCTL.DLLを使えば、文字認識できる、ということですが、開発用のマシンにOfficeが入っていなくて、Officeの入っているマシンには、逆に開発環境がないという状況。
OfficeのインストールCDが見当たらず、見つかったのはアップデート版だけなのでインストールできず。
とりあえずテストでMDIVWCTL.DLLを使ってみたものの、インストールしないとだめなんですねこれは。
レジストリ登録もできず、ここまでで無駄な数時間。
コンパイルしたexeをOfficeの入ったマシンで実行すれば実行できることは確認できたのですが、開発できないのでは話にならん…。
ってことで、MDIVWCTL.DLLは断念して、別の方策を探すことに。
あるいはインストールCDを探すか。

(2)
OCRでなく、やっぱりバーコードにトライしようかと思ったら、ふと
http://appsv.ocrgrid.org/nhocr/index-j.html
が目につきました。
ここにJPEGを投げれば、テキストで文字を手に入れられることが判明。テストで試したところうまくいきました。
ってことは、このWebAPIを使うほうがいいかも、と思いました。
ここまででだいぶ息切れしてきたところです。

.SHOさん。
なるほど。たしかに、その書籍のバーコードですが、自分でスキャンしています。
で、バーコードリーダーを使うのもありかなと思って、ふと考えてみると、たしかにバーコードを最初は読もうと思って、バーコードリーダーを購入して所有しているんです。
ところが、これまた開発マシン兼スキャンマシンとの相性が悪く、USBで直結しているのに動かないんです…。
それで、バーコードリーダーはあきらめて、スキャン画像から読もうか、という感じで現在に至っています。

引用返信 編集キー/
■47896 / inTopicNo.10)  Re[5]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ .SHO (1222回)-(2010/03/17(Wed) 16:14:05)
No47895 (ヤーレン さん) に返信

> で、バーコードリーダーを使うのもありかなと思って、ふと考えてみると、たしかにバーコードを最初は読もうと思って、バーコードリーダーを購入して所有しているんです。
> ところが、これまた開発マシン兼スキャンマシンとの相性が悪く、USBで直結しているのに動かないんです…。

それを動くようにするのが、最も美しい解決策かと…
まぁ、どーしても動かなかったら仕方ないけど。
引用返信 編集キー/
■47898 / inTopicNo.11)  Re[5]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ れい (885回)-(2010/03/17(Wed) 16:36:03)
No47895 (ヤーレン さん) に返信
> で、バーコードリーダーを使うのもありかなと思って、ふと考えてみると、たしかにバーコードを最初は読もうと思って、バーコードリーダーを購入して所有しているんです。

それが正解でしょう。

> ところが、これまた開発マシン兼スキャンマシンとの相性が悪く、USBで直結しているのに動かないんです…。
> それで、バーコードリーダーはあきらめて、スキャン画像から読もうか、という感じで現在に至っています。

ならバーコードリーダーを変えるべきかと。

ISBNのバーコードなら1次元ですし、
元画像がきれいならそれほどむずかしくありません。

適当に2値化して、ライン切り出しして、統計処理+デコード、
というような感じで、ある程度実用的なものができます。

初めから機械認識を前提にして作られてますので、
適当につくってもその辺のOCRよりは遥かに精度よく読めるものが作れます。

まともなUSBバーコードリーダーなら数千円でさらに上を行くわけですが。

ポイントはバー幅の計算ですね。
フーリエ変換してしまうとか、
ガイドバーの幅から推測するとか、
いろいろありますが…

連続ピクセルを数えてごにょごにょするだけでも。

文献とかサイトとかを示せればいいのですが、
適当に作ってもだいたい動くので、私は知りません。


引用返信 編集キー/
■47899 / inTopicNo.12)  Re[5]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ やじゅ (1560回)-(2010/03/17(Wed) 16:38:09)
やじゅ さんの Web サイト
No47895 (ヤーレン さん) に返信
> 現状報告です。
> あまりうまくいってないです。
> レジストリ登録もできず、ここまでで無駄な数時間。

おー、申し訳ないです、OCRは邪道でしたね。
おわびに別方法を提案

Webカメラ(USBカメラ)で本のバーコード読み取り
http://mhsodai.kazelog.jp/chalog/2009/11/webusb-96dd.html

引用返信 編集キー/
■47900 / inTopicNo.13)  Re[6]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ ヤーレン (5回)-(2010/03/17(Wed) 16:55:46)
.SHOさん。
コメントありがとうございます。
すでにC#の質問というよりは雑談になってる気もします。
ま、それはそれとして、おっしゃるとおりで、バーコードリーダーが動けばベストなんですけど、複数のポートに直結してだめとなると、たぶんほかに考えられるのは、電圧が足りてないことで、するとUSBハブを外づけするとかとなって、大掛かりになっていくわりに、あまり効果を期待できないかな、という感じです。
マシンもバーコードも購入して半年程度で、比較的新しいので、マシンのリプレースは現状ではあまり考えられないとなると、やっぱり方針としては、
(1)http://appsv.ocrgrid.org/nhocr/index-j.html
(2)バーコードをC#で自力で読む。
(3)OfficeのOCRを使う。
って順番で可能性がありそうかなと思っています。

れいさん、ありがとうございます。
バーコードリーダーのリプレースですね。ま、そんなに高いものではないけど、動かない可能性が高そうな状況で購入するのは気乗りしないです。
ちょっと根気が切れてきたので、今日のところは断念気味です。
統計処理+デコードというのはまだぜんぜんやったことがないので…。
あらためて集中力のあるときにもう一度トライしてみたいです。

やじゅさん。いえいえ、勉強にはなったんですが、結果としてうまく成果に結びつかず。非力で申しわけないです。いろいろ準備不足を痛感してます。
で、またおもしろいアイデアを。
USBカメラもそのうちなにかしてみようと思っています。
これまたつい先ごろUSBカメラを購入して、眺めているところです(まだなにもできていないんです)。
眺めているというのは、C#でUSBカメラというページがあったんだけど、
http://mobiquitous.com/programming/usbcamera.html
.NET1.1用なので、動かないみたいで。
これもペンディングになって久しいです。
このリンク先、おもしろそうと思ったら、C++でした…。うむむ。

引用返信 編集キー/
■47903 / inTopicNo.14)  Re[5]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ 渋木宏明(ひどり) (1295回)-(2010/03/17(Wed) 17:26:55)
渋木宏明(ひどり) さんの Web サイト
> ところが、これまた開発マシン兼スキャンマシンとの相性が悪く、USBで直結しているのに動かないんです…。

その環境を改善するのが先決な気が (^^;
引用返信 編集キー/
■47912 / inTopicNo.15)  Re[6]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ 774RR (489回)-(2010/03/17(Wed) 18:53:44)
雑談ついでに

> USBハブを外づけするとかとなって、大掛かりになっていくわりに
逆だと思うぞ。 100% の信頼のおけない機器はPC本体を壊す可能性があるので、
セルフパワーHUBを身代わり防壁にするのが当然の保護措置だと思うのだが・・・

まあなんにせよ環境改善が先っぽい。
引用返信 編集キー/
■47923 / inTopicNo.16)  Re[7]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ ヤーレン (6回)-(2010/03/17(Wed) 23:26:52)
再開しました。
(1)http://appsv.ocrgrid.org/nhocr/index-j.html
にjpegを送信して、答えを取得しようとしています。

まず
http://www.atmarkit.co.jp/fdotnet/dotnettips/860controlwb/controlwb.html
を参考にして、このページを解析すると、

<form enctype="multipart/form-data" action="/cgi-bin/weocr/nhocr.cgi" method="POST">
<input name="userfile" type="file" size="30"> &nbsp
<input type="submit" value="認識実行"><br>

というところにファイル名をセットして、認識実行をすればよいと考えました。

HtmlElementCollection HE = webBrowser.Document.All;
HtmlElementCollection forms = HE.GetElementsByName("userfile");
forms[0].InnerText = "ocrtest.jpg";
forms[0].InvokeMember("submit");

としてみました。
すると、
forms[0].InnerText = "ocrtest.jpg";
の行で、
NotSubbortedExceptionはハンドルされませんでした。
プロパティはこの型のHtmlElement上でサポートされていません。
とエラーになります。
これはどう対応したらよいのでしょう?
アドバイスよろしくお願いします。

引用返信 編集キー/
■47934 / inTopicNo.17)  Re[8]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ .SHO (1223回)-(2010/03/18(Thu) 07:55:46)
No47923 (ヤーレン さん) に返信

なぜ、最も邪道な方法を選択するのでしょう?

バーコードをスキャンして、(たぶん)その画像を加工して
バーコードの数値の jpg 画像を作成し、ウェブ上のOCRソフトに
それを与えて数値を取得する手間を考えたら、始めからアプリに対して
人間がバーコードに書かれた数値を入力するI/Fにした方が
よっぽど簡単かつ確実だと思うのですが。

引用返信 編集キー/
■47936 / inTopicNo.18)  Re[9]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ みきぬ (832回)-(2010/03/18(Thu) 09:34:44)
> 人間がバーコードに書かれた数値を入力するI/Fにした方が

バーコードリーダーが使えれば、その手間すらいらないんだよね。
読んだバーコードが文字として入力されるから。
引用返信 編集キー/
■47939 / inTopicNo.19)  Re[10]: JPEG画像からバーコードを読んで数字を取り出したい
□投稿者/ .SHO (1224回)-(2010/03/18(Thu) 09:55:41)
> バーコードリーダーが使えれば、その手間すらいらないんだよね。
> 読んだバーコードが文字として入力されるから。

それが、最も美しい解決策だと思います。
loop...

引用返信 編集キー/
■47941 / inTopicNo.20)  Re[11]: JPEG画像からバーコードを読んで数字を取り出したい
 
□投稿者/ 774RR (490回)-(2010/03/18(Thu) 10:12:07)
美しい、かつ安価な解決だと思う。

ハードウェアに投資し、ソフト自作するコストを抑えるのと
ハードウェアには投資せず、ソフト自作するコストをかけるのと、
たぶん前者のほうが圧倒的に安価(お給金だけでなく開発にかかる時間的にも)
掲示板でこんなやり取りしている間にも人件費がかかっている。
無駄な検討している暇があったら通販サイトでポチっと・・・
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -