Visual Basic 6.0 (VB6) 程式語言案例學習 (11. 生產線拍照程式)
Visual Basic 6.0 (VB6) 程式語言案例學習 (11. 生產線拍照程式)¶
11.1 問題¶
這是一個公司的需求,現在一般而言都是透過監視系統來紀錄產線組裝流程,但其實可以更節省成本一些,採用網路攝影機(Web Camera)來替代高成本的監視器,就可以達到紀錄產線的目的。監視系統與網路攝影機的差別在於監視系統必須透過該公司的SDK開發,才能達到拍照記錄的功能。而網路攝影機已經有公開原始碼可以應用,若是微軟的作業系統,就可以透過VFW來製作拍照或者是錄影程式。倘若生產線單純的話,其實透過網路攝影機就可以達到節省成本及相同功效的成果。而網路攝影機現在已有到Mega Pixel等級,拍照的結果可以說是非常清晰且清楚。
11.2 需求¶
表格 11‑1 「生產線拍照程式」系統目的分析表
版本:1.0 | 要做什麼 | 不要做什麼(不要做不代表不會做) |
---|---|---|
能做什麼 | (第一格:必要項目) | (第二格:次要項目) |
要能夠連接網路攝影機。 | 可將拍照記錄存至資料庫中。 | |
要能夠拍照存檔。 | ||
存檔格式可以選擇.BMP或是.JPG。 | ||
檔名有日期格式選擇。 | ||
檔名有流水號格時選擇。 | ||
檔名有自定關鍵字選擇。 | ||
流水號可歸零。 | ||
不能做什麼(不能做代表不需要做) | (第三格:不必要項目) | (第四格:不需要項目) |
可指定存檔目錄。 | 可以連接多台攝影機的管理系統。 |
表格 10‑2 「生產線拍照程式」系統目標分析表
版本: | 重要 | 不重要 |
---|---|---|
優先 | (重) | (急) |
要能夠連接網路攝影機。 | 存檔格式可以選擇.BMP或是.JPG。 | |
要能夠拍照存檔。 | 檔名有日期格式選擇。 | |
檔名有流水號格時選擇。 | ||
檔名有自定關鍵字選擇。 | ||
不急迫 | (輕) | (緩) |
流水號可歸零。 | 無。 |
表格 10‑3 「生產線拍照程式」系統規格表
規格項目 | 規格內容 | 備註 |
---|---|---|
攝影拍照 | 要能夠連接網路攝影機。 | … |
要能夠拍照存檔。 | ||
檔名格式 | 存檔格式可以選擇.BMP或是.JPG。 | … |
檔名有日期格式選擇。 | ||
檔名有流水號格時選擇。 | ||
檔名有自定關鍵字選擇。 | ||
流水號可歸零。 |
11.3 特色¶
透過小而巧的程式,簡單的操作,就可以做到生產線拍照紀錄。
11.4 使用工具¶
語言 | 軟體 | 硬體 |
---|---|---|
MS Visual Basic | MS Visual Basic 6.0、JPeg32.dll | 支援RGB的Web Camera |
11.5 系統架構¶
系統架構起來相當容易,首先要先連結網路攝影機,並且透過VFW API的功能將照片儲存起來,而中間的過程就是檔名的命名規則。因此重點只有兩個,一個是網路攝影機的控制,其次是檔名的命名。而網路攝影機的控制在微軟的網站上已有範例說明,因此讀者可以參考本光碟的原始碼,或者到微軟網站上找到完整的原始碼。檔名命名的設計就等於是字串的相加,依照由左至右的邏輯順序,就可以簡單的完成命名。由於提供讓使用者自訂關鍵字,因此要遵守檔案命名規則,不可使用一些特殊符號,所以要過濾掉特殊符號的使用。
11.6 程式實作¶
11.6.1 vbSkinner元件安裝¶
Step 1:如圖 11-1,連線到 http://www.visual-basic.com.ar/ 。此網站已經關閉,並且該程式無法安裝在 Windows 10 之後的版本,可以忽略這一段,用 Visual Basic 6 內建的元件即可。
圖 11‑1 http://www.visual-basic.com.ar/ 網站
Step 2:如圖11-2,點選Download,接著點選Download setup program of vbSkinner Free.。
圖 11‑2 Download setup program of vbSkinner Free.
Step 3:如圖 11-3,下載 vbSkinner。
圖 11‑3 下載vbSkinner
Step 4:如圖 11-4,安裝vbSkinner。
圖 11‑4 安裝 vbSkinner
Step 5:如圖 11-5,點選Install。
圖 11‑5 Install
11.6.2 引用 vbSkinner 元件¶
Step 1:如圖 11-6,點選專案,點選設定使用元件。
圖 11‑6 引用元件
Step 2:如圖 11-7,勾選 vbSkinner Free 2 for VB6。
圖 11‑7 vbSkinner Free 2 for VB6
Step 3:如圖 11-8,確認出現 SmartMenuXP、Skinner。
圖 11‑8 SmartMenuXP、Skinner
11.6.3 特殊字元過濾指令¶
'使用這一行指令就可以過濾掉不正確的特殊字元 Text1.Text = Replace(Replace(Replace(Replace(Replace(Replace(Text1.Text, ";", ""), "\", ""), "/", ""), "|", ""), "?", ""), "*", "")
11.6.4 設計產線拍照程式¶
'初始化攝影機 Private Sub sCamera_Init() '檢查是否已經在使用攝影機 If hCapWnd <> 0 Then Call capDriverDisconnect(hCapWnd) Call DestroyWindow(hCapWnd) End If '設定圖片框的Handle p_hwnd = picCW_Monitor.hwnd p_hdc = picCW_Monitor.hdc '設定訊息字串變數 Dim strInfo As String '設定下一步執行開關變數 Dim blnNextStep As Boolean '預設檢查下一步 blnNextStep = True '檢查是否有音效卡 If SoundCardAvailable = True Then strMessage = "音效裝置正確." & vbCrLf & strMessage Else MsgBox "音效裝置錯誤.", vbOKOnly, "警告" blnNextStep = False End If '確認 Camera Driver If blnNextStep = True Then If sCheckCapDrivers() > 0 Then hCapWnd = capCreateCaptureWindowA("Camera", _ WS_CHILD Or WS_VISIBLE, _ 0, 0, 640, 480, _ frmMM.picCW_Monitor.hwnd, 0) strMessage = "本機攝影裝置正確." & vbCrLf & strMessage Else MsgBox "本機攝影裝置錯誤.", vbOKOnly, "警告" blnNextStep = False End If End If '建立擷取視窗 If blnNextStep = True Then If hCapWnd > 0 Then strMessage = "建立擷取視窗正確." & vbCrLf & strMessage Else MsgBox "建立擷取視窗失敗.", vbOKOnly, "警告" blnNextStep = False End If End If '連結 Camera Driver If blnNextStep = True Then If ConnectCapDriver(hCapWnd, 0, strInfo) = True Then strMessage = strInfo & vbCrLf & vbCrLf & strMessage strMessage = "連結攝影裝置正確." & vbCrLf & strMessage Else MsgBox "連結攝影裝置錯誤.", vbOKOnly, "警告" blnNextStep = False End If End If '設定 CaptureParams If blnNextStep = True Then If fSetCaptureParams() = True Then strMessage = "設定擷取參數成功." & vbCrLf & strMessage Else MsgBox "設定擷取參數失敗.", vbOKOnly, "警告" blnNextStep = False End If End If
圖 11‑9
11.7 修改重點¶
主要在於啟用網路攝影機之後,請記得在程式結束前要先中斷網路攝影機的連結,否則會造成程式的當機。其實一般產線作業就是要紀錄產品條碼的張貼,或者是關鍵動作的紀錄,因此若能修改成與資料庫連結,這會是相當好的一件事情,每張拍攝下來的照片,若能儲存在自訂的目錄下,歸檔處理,並且可由資料庫調閱歷史紀錄,這對於產線要追蹤管制有一定的助益。當然使用網路攝影機時,要注意解析度,解析度若太低,是無法將條碼拍攝清晰。
11.8 結論¶
首先感謝Ray Mercer以及Microsoft的範例原始碼,讓我們得已由Web Camera取得影像。其實若想要做的更多一些,可以參考筆者的另外一本著作,數位影像處理技術手冊。內有對數位影像處理做更多的研究,並且保留本書開放的原則,所有原始碼均公開,並包含可執行檔,並且採用直譯式的語言所撰寫,也就是Visual Basic 6.0,可單步執行觀察演算法的變化,內容有包括人臉追蹤、手寫辨識、…、等等。
Lai Tai-Yu (賴岱佑)