使用Python和OpenMV讀取條形碼
在今天的文章中,將會介紹OpenMV,以及他們的高階IDE,甚至會教你如何建立自己的條形碼掃描系統。
使用Python和OpenMV讀取條形碼
圖1:OpenMV可以在許多型別的程式碼中讀取二維碼
條形碼是計算機將一個專案與資料庫關聯起來的一種簡單方法。因此,必須正確解碼條形碼,以便更新資料庫。
典型的條形碼閱讀器使用光電池來“檢視”程式碼。如果想了解更多可以看看Chris Woodford的文章:條形碼和條形碼掃描器( http://www.explainthatstuff.com/barcodescanners.html )
考慮到當今時代相機的重要性,我們可以使用影象處理來檢測和解碼條形碼。
在PyImageSearch上的一篇文章中,演示瞭如何用Python和OpenCV檢測條形碼。( https://www.pyimagesearch.com/2014/11/24/detecting-barcodes-images-python-opencv/ )
檢測是一個難題,另一件是將條形碼解碼成有用的字串。不幸的是,OpenCV不包含內建的條形碼檢測+閱讀功能…
但有一些流行的庫條形碼檢測,其中一個是ZBar。使用ZBar和其他類似的條形碼閱讀庫是完成任務的一種方法。另一種選擇是使用嵌入式工具和庫,比如OpenMV。
事實上,OpenMV使得檢測和閱讀條形碼變得非常容易:
構建自己的條形碼掃描裝置。
在裝配線上建立自動化零件檢驗系統。
利用OpenMV在一個感興趣專案中幫助你掃描和組織車間的元件和外部裝置。
使用OpenMV教中學或高中生關於嵌入式程式設計的知識。
用OpenMV和Python進行條形碼檢測和解碼
安裝OpenMV IDE後啟動它。我們將在OpenMV IDE中完成所有的編碼工作。
讓我們首先建立一個名為openmv_barcode.py 的檔案。
在第2-4行,我們匯入所需的MicroPython/OpenMV包。
如果你想使用LCD shield,可以在第9行匯入需要的lcd包。
接下來,讓我們設定攝像機感測器:
第12-29行的設定不需要解釋,請閱讀程式碼和註釋。
我想指出的是, LCD需要一個符合螢幕的解析度。(sensor.QQVGA2 )。
注意:我試著弄清楚如何使用全解析度,然後製作一個適合於LCD的縮放影象,但是沒有成功。正因為如此,如果你選擇使用LCD,你就要嘗試解碼低解析度的條形碼。LCD仍然是一個很好的除錯工具,我想把它包括進去,這樣你就可以很容易的使用它。
我還想指出第27行。在“hello world”示例中,你將看到sensor.skip_frames的一個關鍵字引數time=2000。在此上下文中不支援關鍵字引數,所以一定要使用第27行所示的語法(尤其是通過“hello world”執行時)。
接下來,讓我們來執行初始化:
如果你使用的是LCD,需要取消第33行。
第36行初始化了FPS計算的計時器。
從這裡我們將建立(1)查詢表和(2)確定條形碼型別的方便(convenience function)函式:
正如在第39行中看到的,在這裡我定義了一個barcode_type字典,OpenMV可以檢測和解碼很多不同的條形碼樣式。
第57-63行定義了獲取條形碼型別的方便函式,而不會引起Python金鑰異常(OpenMV不能很好地處理異常)。
我們將從開始一個while迴圈開始獲取和處理幀:
第一步是為FPS計數器計時(第68行)。
在第71行獲取sensor.snapshot框架。
我們有一個影象,讓我們看看能做些什麼
我們在這裡找到標準的非QR碼。我們所需要做的就是呼叫img.find_barcodes (封裝了所有條形碼檢測+讀取功能)並迴圈顯示結果(第74行)。
鑑於檢測到的條形碼,我們可以:
圍繞檢測到的條形碼繪製邊框矩形(第76行)。
輸出型別,質量和有效載荷(第79-82行)。
在螢幕上繪製字串(第85行)。根據文件目前沒有辦法用較大的字型繪製字串。
文件地址:http://docs.openmv.io/library/omv.image.html?highlight=draw_string#image.image.draw_string
QR碼解碼以類似的方式完成:
此迴圈模仿標準條形碼迴圈,因此請務必檢視詳細資訊。
在迴圈之外,如果使用LCD,你需要在其上進行顯示(第100行)。
最後,在第103行,我們可以在終端上輕鬆輸出FPS(每秒幀數)。
OpenMV條形碼解碼結果
圖3:OpenMV團隊為計算機視覺開發設計了一個很棒的IDE。這是在第一次開啟IDE並載入程式時所看到的。
首先,通過USB將OpenMV攝像頭連線到電腦。
然後啟動IDE,如圖3所示。
從那裡,點選左下角的連線按鈕。
IDE可能會提示更新韌體(通過點選按鈕並等待大約3-5分鐘)。
當你準備好在編輯器中載入程式時,請點選左下方的綠色播放/程式按鈕。這個按鈕將用你的程式碼設定OpenMV。
MicroPython程式碼需要大約45-90秒才能編譯成機器程式碼並在處理器上快閃記憶體。
不久之後,如果輸出到終端上,你將看到諸如FPS或條形碼資訊等資料 – 這是正常工作所需要的。你還會在右上方的取景器中看到來自相機感測器的實時檢視。
現在我們來試一下條形碼吧!
以下是我們正在處理的內容:
圖4:使用OpenMV攝像機測試樣例條形碼。包括QR, CODE128, CODE93, CODE39和DATABAR條形碼影象。
可以從IDE的內建終端中檢視結果:
每段程式碼和終端的截圖如下:
圖5:通過連結到PyImageSearch主頁掃描QR碼。
圖6:掃描包含“https://openmv.io”有效載荷的QR碼 – OpenMV主頁。
圖7:這個二維碼包含了一個有效載荷,可以引導你使用Python圖書資訊頁面進行計算機視覺的深度學習。
圖8:一個代號為“guru”的CODE128條形碼由OpenMV解碼。
圖9:OpenMV可以解碼CODE93條形碼,例如具有“OpenMV”有效載荷的條形碼。
圖10:CODE39條形碼很容易被OpenMV解碼。這裡的有效載荷是“DL4CV”。
圖11:OpenMV可以解碼固定寬度且只包含數字的DATABAR程式碼。我在此條形碼中編碼了“2018”,但正如你所看到的,OpenMV相機實際上可以讀取16個字元。
最後是IDE的實際情況。 注意它如何讀取多個程式碼,在條形碼周圍繪製邊框,幷包含顏色直方圖的。
圖12:OpenMV正在檢測條形碼並將結果列印到IDE。正如你所看到的,左下方有一個滾動資料的終端。IDE的右上角還有一個實時檢視攝像頭視訊,右下角是顏色直方圖。
IDE非常適合除錯。但是,對於可部署專案,你不應該使用IDE。你可以通過I2C,SPI或WiFi將條形碼有效載荷傳送給執行器,以便在資料庫中進行處理。
這裡是LCD的實際操作:
圖13:OpenMV彩色LCD遮蔽為OpenMV提供了一個很好的取景器。
總結
在這篇文章中,我們使用OpenMV來執行條形碼解碼。
旨在成為“機器視覺的開源硬體”,OpenMV cam是嵌入式的(無作業系統),並可通過多種可用 shields進行擴充套件。它也非常易於使用。你可以使用MicroPython在OpenMV上編寫程式碼。
但是,瞭解OpenMV不執行OpenCV很重要,處理器根本無法處理它。 也就是說,內建了許多類似於OpenCV的功能。使用OpenMV IDE,你可以將自己的計算機視覺應用程式組合在一起。
在本公眾號「七月線上實驗室」回覆以下關鍵詞獲取AI乾貨
PPT--《1天搞懂深度學習》資料
小抄--機器學習常用庫小抄表
題庫-- 人工智慧面試題庫
資料集--人工智慧各行業資料彙總
思維導圖--Python學習必備思維導圖電子版
量化交易--量化投資程式設計課程與資料
相關文章
- 用OpenCV和Python識別二維碼和條形碼OpenCVPython
- Python 在PDF中新增條形碼、二維碼Python
- Python使用Argparse讀取命令引數Python
- python使用cv2讀取影像Python
- Python中CSV讀取和轉換Python
- iOS 生成二維碼/條形碼iOS
- 支援 PoE 的條碼讀取器 SR-750 系列
- Python 生成條形碼、二維碼 (Code 128、EAN-13、QR code等)Python
- iBarcoder for Mac條形碼生成工具Mac
- Python-使用openpyxl讀取excel內容PythonExcel
- python 使用字典讀取CSV檔案Python
- python檔案建立、讀取和寫入Python
- iOS 掃描二維碼/條形碼iOS
- 2 個簡單的 python 指令碼,連線 MySQL 和讀取 ExcelPython指令碼MySqlExcel
- Mac條形碼生成工具——iBarcoder for MacMac
- Java新增條形碼到PDF表格Java
- Laravel 原始碼閱讀指南 -- 載入和讀取 ENV 配置Laravel原始碼
- python 讀取PDF表格Python
- Python讀取Excel表格PythonExcel
- 匹配商品條形碼正規表示式程式碼
- 使用Python讀取PlantUML匯出的XMI檔案Python
- 如何使用程式碼建立和讀取 SAP CRM 訂單的 Text 資料
- 使用python的netCDF4庫讀取.nc檔案 和 建立.nc檔案Python
- 使用canvas繪製圓形進度條Canvas
- 讀取檔案大小-列印進度條
- python程式碼讀取遠端檔案的方法--paramikoPython
- Python中檔案讀取與儲存程式碼示例Python
- app直播系統原始碼,點選生成條形碼APP原始碼
- python獲取zabbix監控項圖形Python
- 如何使用Python和Plotly繪製3D圖形Python3D
- python資料視覺化-matplotlib入門(4)-條形圖和直方圖Python視覺化直方圖
- 如何使用Python讀取文字檔案並回答問題?Python
- Python Matplotlib繪製條形圖的全過程Python
- 一維條形碼攻擊技術(Badbarcode)
- 條形碼生成原理介紹及簡介
- 前端實現生成條形碼並下載前端
- python讀取大檔案Python
- python對Excel的讀取PythonExcel