【QRコード読取】WebカメラでQRコード読取CSV出力アプリ_OpenCV_ZXing使用

C#.NET

【QRコード読取】WebカメラでQRコード読取CSV出力アプリ_OpenCV_ZXing使用

QRコード読取&CSV出力のアプリ開発

今回は、QRコードをWebカメラで読取⇒読み取ったデータをCSV出力するアプリ(C#.Net開発)を作ってみました。

非同期で繰り返し何度でもQRコードを読み取れる仕様です。

簡単にデータフロー図を書きました。

flow

QRコードをWebカメラで読み取り、CSVファイル出力する流れになります。

画像処理ライブラリOpenCVSharpを使ってみた

 スポンサードリンク

OpenCVとは、画像処理・画像解析および機械学習等の機能を持つC/C++、Java、Python、MATLAB用ライブラリです。

今回は、VisualStudioで開発したので、NugetからOpenCVをダウンロードしました。

openCV_get

プロジェクト>>NuGetパッケージの管理をクリック。

OpenCVsharp_download

検索欄に「OpenCVSharp」と入力して検索します。今回は、「OpenCvSharp4」という、赤枠で囲ったライブラリをインストールしました。

スポンサードリンク

QRコード読取にライブラリZXingを使ってみた

ZXingとは、オープンソースの1D/2Dバーコード読み取りライブラリ。(こちらに画像アップデートで二次元コード読取できるサイトがあります。)

ZXingもOpenCVSharpと同様にNugetパッケージからインストールできます。

今回は、C#.Net開発なので、ZXing.Netライブラリをインストールします。

ZXing_get

WindowsFormでの画面デザイン

画面のデザインの説明をしていきます。

分かりやすい様にキャプチャ画面にコントロール部品の配置を書いてみました。

GroupBox(pictureGroupBox)の中にPictureBox(qr_pictureBox)を設置し、その中にPictureBox(show_pictureBox)を設置しています。

PictureBox(qr_pictureBox)は、Webカメラの映像を映す為のもので、PictureBox(show_pictureBox)は、QRコードを読み取った際にOKマークを

表示する為のPictureBoxなので、無くても問題ないです。

その他に、RichTextBoxBox(barcodeFormatBox)は、二次元コードのフォーマット名を表示させるデバッグ用途で設置しました。

RichTextBoxBox(readResultBox)は、QRコードのデータ中身を表示させる用です。

TextBoxBox(resultOKtextBox)は、読取OKの文字列を表示用で設置しました。

肝心なのは、pictureBoxですね。その他は、おまけみたいなものですので、実際に試す方がいれば、その辺は工夫して下さい。

designer

これにコンポーネントのbackgroundWorker1とbackgroundWorker2を追加しています。

ソースコード全容

では、ソースコードを載せていきます。一気に全ソース載せましたので、ご自由にコピペして実際に動作させてみて下さい。

綺麗で、見やすいコードを書けるほどのスキルはもっていませんので、冗長なコードかもしれません。ご了承下さい。

backgroundWorkerを活用して、OpenCVのVideoCaptureとMatを使用してWebカメラの映像を繰り返しキャプチャして読み込ませて、

QRコードがキャプチャされたら、ZXingのBarcodeReaderでデコード処理してQRコードを読み取ります。

読み取ったデータを画面表示させ、CSV出力を内部処理する。

この流れをアプリが起動している間、ずっと繰り返すようなソースコードになっています。

動作結果画面

 

テストとして、文字列が「QRコード,TEST,読取,Extra-Lab,2019,05,15」というデータが入ったQRコードを用意して読み取ります。

実際にQRコードを読み取った際の画面の表示は次のようになります。

result

CSV出力結果

QRコードのデータ内容をカンマ区切りでlist化してcsvファイルを作成する仕様にしてる。

csv_result

CSVを開くと、下図のようにQRコードから読み取ったデータが入っています。

csv_data

スポンサードリンク

 

振り返って

今回、画像処理や、二次元コード処理などの知識が全くない状態からググって調べながら自分なりにアプリを開発しました。

OpenCVやZXingのライブラリを利用して、ここまでのアプリが出来て、自分なりに満足しています。

最近では、QRコード決済など、二次元コードや画像処理技術が活用される場面が多くなってきていますね。

この記事を見て参考になった方がいれば、幸いです。