トップページへ戻る

■WEBカメラとVisual Basicで画像検査プログラムの作成 その2

WEBカメラの構想はおおまかではありますが見えてきました。 ルーペを利用した実験ページ
プログラム本体のほうをいろいろと考えてみると、多くの問題点が浮上してきました。
@マイクロソフトの DirectX SKD というのを使うと、直接WEBカメラを操作できるらしい
                       

   そのそも DirectX を使えるスキルは無いし、調べる時間も無い...
AWEBカメラの出力画像形式はJPGなのでBMPに変換しなければならない
                       

   フリーのソフトはありますが、1回ごとに変換するんじゃ使い勝手が悪くてしょうがない...
                       

   VBのプログラム内で自動的に変換する関数がありそうで無いような...
B2値化などの画像をコントロールするソースプログラムが公開されているのをいくつかストックしたけど全くわからない(死)
というわけで、いざ作り出してみると素人の私にはかなり厳しいものがありそうです...
どうしよう?


他の方法をいろいろと考えていたら、ありました!ありました!!
USB-IOという制御基盤を使用して、「USBカメラ カラー検査ソフト」を使えば、とりあえず形にはなりそうです。
   USB-IO は km2Net さんで1,500円で購入。もちろん自腹...
   USBカラー検査ソフトは、、、ダウンロード元は無くなってました。(2008.10月確認)


カラー検査ソフトを使う

試用版ということで無料でダウンロードできます。 (継続使用の場合は12,000円を支払わなければなりません)
その画面がコレ!

カラー検査ソフト  カラー検査ソフト
ELECOM UCAM-H1C30MBKを使用

基準となるデータ画像をモデル登録し、さっそく検査を開始してみました。 「OK」「NG」判定はちゃんとできました。優れものです、このソフト。文字が1文字無ければちゃんと「NG」判定してくれます。
動作確認一覧には掲載されてないのですが、
  ELECOM UCAM-H1C30MBK
  BUFFALO BWC-35H01
Logicool Qcam QVC-70HS STXで動作しました。
(但し全ての機種で320×240のみ、他の解像度では使えません)

誰かの役に立つはずなのでここに記載しておきます。
基本的には ビデオの画像入力形式がRGB24に対応していれば動く ということなのですが、やはり動作確認の取れていないWEBカメラでは心配でした。 特に一番期待しているLogicool Qcam QVC-70HS STXがRBG24に対応しているという情報がネット上のどこにも無く、 コレが動いたのが一番の収穫でした。
でも...でもなんですが、ウチは印刷屋です。この画像の中の文字の一部が出っ張ってたり欠けてたりするのを発見しなければなりません。 精度のレベルが全然足りません。む〜??? USBカラー検査ソフトはソースが公開されていません。そして連続使用の場合は12,000円を振り込まなくてはなりません。
少し使ってみて、だいたいの感じはつかみました。中身はどうなっているのが全くわかりませんが、 ターゲットとする形は見えました。USBカラー検査ソフトはここまでです。
別な方法を考えましょう。


VB6でWEBカメラを操作し基準画像(BMP形式)を取得する

第一関門です。これが出来なければ全てが始まりません。
WEBカメラ関連でソースが公開されているサンプルソフトをかたっぱしから集めます。 書籍もいろいろと調べます。必要なところをより合わせていけば、なんとか使えるものが出来るはずです。

こちら(パケさんの趣味の部屋) で公開されているUSBカメラコントロールのサンプルプログラムです。 WEBカメラから画像を取得しているだけなのですが、とてもシンプルなのでまずはコレを解析してみます。 画像取り込みボタンを押すと接続されたWEBカメラから画像を取り出してイメージBOXに表示します。 また画像はjpg形式でソフトと同一フォルダに保存されます。

USBCAMERAのVB画面  画像取得画面

TWAIN機能でUSBカメラをコントロールし画像を取り込むのでEZTW32.DLLを使用してます。
EZTW32.DLLはこちらからダウンロードできます。 ページ内の真ん中よりちょっと下です。
EZTW32.DLLのダウンロード
使い方は
TWAIN_SelectImageSource TWAINのドライバ(機器)の選択
TWAIN_AcquireToClipboard  データをクリップボードへコピー
TWAIN_AcquireToFilename  データをファイルとして保存
つまりクリップボードへ転送する場合は、データを格納する変数(例、Ret)をLong型で宣言して、 Ret = TWAIN_AcquireToClipboard(GethWnd, 0) とすればいいようです。
↓USBカメラコントロールのサンプルプログラムのソースがコレです。

Option Explicit
Private Mint_Twain As Integer 'Twain装置(カメラ)が使用可能か


Private Sub Command1_Click()
Dim i As Long
Dim lng_Ret As Long
Dim str_FileName As String

'画像を保存(固定のファイル名)
str_FileName = Format(Now(), "yymmdd_hhmmss") & ".jpg"
'USBカメラから画像を取り込む
lng_Ret = TWAIN_AcquireToFilename(Me.hWnd, "now.bmp")
'BMPをJPEGに変換(日付と時間のファイル名)
lng_Ret = BMPtoJPG(str_FileName, "now.bmp", 80, True)
'取り込み変換されたファイルを画面表示する
Me.Image1.Picture = LoadPicture(str_FileName)

End Sub


Private Sub Form_Load()
Mint_Twain = TWAIN_SelectImageSource(Me.hWnd) 'スキャナーを選択
End Sub

Command1_Click()
変数の宣言は i と lng_Ret が長整数型、 str_Filename が文字列で宣言されています。 Command1_Click()とは「画像取込」ボタンが押されたらどうするのかが記述されてます。赤文字部分を解析してみます。


@画像を保存
年月日と時間を組み合わせたファイル名で保存


AUSBカメラから画像を取得
lng_Retという変数に今USBカメラが取得している画像を代入します。


BBMP→JPG変換
画像形式を変換しています。imgctl.dllを使用してます。


C画像を表示
イメージピクチャーBOXに画像を表示します。

コードが少ないので解析と言えるほどのものではありません。VB初心者の私のスキルはこの程度です(汗)
まずこのソースコードの赤太文字を変更します。

'USBカメラから画像を取り込む
lng_Ret = TWAIN_AcquireToFilename(Me.hWnd, "now.bmp")
'取り込み変換されたファイルを画面表示する
Me.Image1.Picture = LoadPicture("now.bmp")

たった2行のプログラムになってしまいました!!  これで now.bmp というBMP画像がこのソフトと同一フォルダに保存され、かつイメージBOXにはそのBMPファイルが表示されます。
WEBカメラからBMP画像を取得するという目的はコレで達成しました。第一関門突破です!


上のプログラムを使って基準画像を検体画像を取得するフォームを作ってみました。 基準画像を検体画像を取得するフォーム
それがコレ。基準画像を取得し、検体画像を取得しているところです。 検体画像を取得するのにクリックが多すぎです。リアルタイムにプレビューしておいて、 検査ボタンを押すと自動で取得して合否判定するようにしないと、とても使えるソフトにはなりません。
これもダメでした (汗)


次のページ