最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python實現(xiàn)條形碼圖片識別程序

 更新時間:2023年09月08日 14:24:11   作者:TiAmo?zhang  
這篇文章主要為大家詳細介紹了如何基于Python實現(xiàn)一個簡單的條形碼圖片識別程序,可以視頻圖片中的條形碼,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下

本系列推文案例中,建議Python采用3.10及以上版本,NumPy采用1.22.3及以上版本,Matplotlib采用3.5.1及以上版本,Pandas采用1.4.2及以上版本。Python從3.10這個版本開始,標(biāo)準發(fā)行版本中自帶的IDLE交互式環(huán)境中輸入提示符>>>單獨放在左側(cè),不能隨輸入語句一起復(fù)制。為了清晰區(qū)分實例在交互環(huán)境中的輸入和輸出,本系列推文在每個輸入語句的開頭依然保留輸入提示符>>>。

01、應(yīng)用實例背景

有位朋友開了一家淘寶商店,每天都會發(fā)出很多快遞,并拍照記錄,于是就有很多快遞單的圖片。每晚有個重復(fù)性的工作,就是把圖片一張張打開,摘錄其中條形碼的編號,將其保存在Excel中,并把圖片的名稱改為“條形碼編號.jpg”保存,如圖1所示。

圖1 快遞單條形碼識別

這位朋友的生意越來越好,所以這個工作量就變得越來越大(每天可能有幾百張圖片需要識別)。他希望開發(fā)一個能自動識別條形碼并修改文件名的應(yīng)用程序。

圖片都是jpg格式的,但快遞單因為源自不同的快遞公司,所以樣子千奇百怪。拍照片的人也不同,所以拍出的照片不一定工整。唯一可以確定的是,每張照片都有條形碼,且有良好的清晰度。

02、條形碼識別程序

該應(yīng)用的難點在于條形碼識別,若從頭開發(fā),則工作量太大。我們找到了可以識別條形碼和二維碼的開源軟件zbar(http://zbar.sourceforge.net/,大家當(dāng)然也可以選擇其他軟件)。下載、安裝后,就可以打開命令行,在軟件安裝目錄的bin下輸入zbarimg -h,得到如下結(jié)果:

C: work Python barcodes ZBar bin>zbarimg -h
usage: zbarimgoptions] <image >...
scan and decode bar codes from one or more image files
options:
h--help  display this help text
--version  display version information and exit
-q,-- quiet   minimal output,only print decoded symbol data
-V,--verbose   increase debug output level
-- verbose=N    set specific debug output level
-d,-- display  enable display of following images to the screen
-D,--nodisplay disable display of following images (default)
--xml,--nodisplay enable/disable XML output format-- noxm]
-- raw  output decoded symbol data without symbology prefix
--S  < CONFIG>=< VALUE >], 
-set < CONFIG>=< VALUE >],
set  decoder/scanner < CONFIG> to < VALUE> (or 1)

這就說明安裝成功了。用手機拍下一本書的ISBN條形碼,如圖2所示,保存為isbn.jpg。

圖2 ISBN條形碼的圖片

在操作系統(tǒng)的命令行窗口中運行以下代碼,即可成功識別出圖2所示的條形碼所對應(yīng)的ISBN編號。

EAN-13:9780521865715
C: work Python barcodes ZBar bin>zbarimg isbn.jpg
scanned 1 barcode symbols from 1 images

識別的關(guān)鍵問題解決了,接著就可以編寫GUI界面了,然后通過調(diào)用zbar來解決問題。

03、界面設(shè)計

前期工作準備完畢后,就是正式的軟件設(shè)計編碼了。構(gòu)思GUI,有以下要求。

(1) 有一個“打開”按鈕,可以選擇需要識別的圖片;一個導(dǎo)出數(shù)據(jù)按鈕。

(2) 數(shù)據(jù)展示窗口,可以以表格的形式呈現(xiàn)。

(3) 一個多行文本框,用于輸出一些調(diào)試數(shù)據(jù),如錯誤反饋、無法識別等信息。

利用wxFormBuilder來設(shè)計GUI。在如圖3所示的GUI設(shè)計界面中,先創(chuàng)建一個Frame窗口。添加一個垂直的BoxSizer,加入一個ToolBar工具條和一個1行2列的GridSizer。在ToolBar工具條中,添加兩個Tool按鈕,選擇合適的圖標(biāo)(source選Load From Art Provider,id選wxART_FILE_OPEN和wxART_FILE_SAVE)。在界面的左下部添加一個DataViewListCtrl用于顯示數(shù)據(jù),右下部添加一個TextCtrl用于輸出調(diào)試信息。軟件運行結(jié)果如圖4所示。

圖3 設(shè)計軟件界面

圖4 軟件運行結(jié)果

04、完整代碼

程序保存在barcodes.py文件中,全部代碼如下:

#-*- coding:utf-8 -*
import wx
import wx.xrc
import wx.dataview
import os
import csv
from datetime import datetime
class MyFramel (wx.Frame):
definit (self,parent) :
wx.Frame.__init__(self,parent,id= wx.ID_ANY,title= u"條形碼識別程序"pos = wx.DefaultPosition,size = wx.Size866,302)style = WX.DEFAULT FRAME STYLEWX.TAB TRAVERSAL)self.SetSizeHints(wx.DefaultSize,wx.DefaultSize)bSizer5 = wx.BoxSizer(wx.VERTICAL)self.m toolBar2 = wx,ToolBar(self,WX.ID ANY,wx,DefaultPosition,wx.DefaultSize,wX.TB HORIZONTAL)self.m_open = self.m toolBar2.AddTool(wx.ID ANY,u"打開”
wx.ArtProvider.GetBitmap(wx.ART FILE OPEN
WX.ART TOOLBAR),wx.NullBitmap,wX.ITEM NORMAL,
wx.EmptyString,wx.EmptyString,None)
self.m_export = self.m toolBar2.AddTool(wx.ID ANY,u"導(dǎo)出”wX.ArtProvider.GetBitmap(wx.ART FILE SAVEWX.ART TOOLBAR),wX.NullBitmap,wX.ITEM NORMALwx.EmptyString,wx.EmptyString,None)self.m toolBar2.Realize()bSizer5.Add(self.m toolBar2,0,WX.EXPAND,5)gSizer1 = wx.GridSizer(1,2,0,0)self.m dvc = wx.dataview.DataViewListCtrl(self,wx.ID ANY
wx.DefaultPosition,wx.DefaultSize,
wx.dataview.DV MULTIPLE wx.dataview.DV ROW LINES)
qSizer1.Add(self.m dvc,0,wx.EXPAND,5)self.m out = wx.TextCtrl(self,wX.ID ANY,wx.EmptyString,
wx.DefaultPosition,wx.DefaultSize,
WX.TE MULTILINE)
0,WX.EXPAND,5)gSizer1.Add(self.m out,bSizer5.Add(gSizer1,1,WX.EXPAND,5)
self.SetSizer(bSizer5)
self.Layout(
self.Centre(wx.BOTH)
# Connect Events
self.Bind(wx.EVT_TOOL,self.openimgs,id = self.m open.GetId())self.Bind(wx.EVT TOOL,self.export2csv,id= self.m export.GetId())#Mycode
self.m dvc.AppendTextColumn(u'日期
self.m dvc.AppendTextColumn(u'條形碼',width = 120)self.m_dvc.AppendTextColumn(u'文件地址 width = 400)
del (self):def
pass
#Virtual event handlersdef openimgs(self,event)dlg = wx.FileDialog(
self,message =“Choose some images"
defaultDir = os.getcwd()
defaultFile =n
wildcard=wildcard
style = Wx.FD OPENWX.FD MULTIPLE WX.FD CHANGE DIR
if dlq.ShowModal() == wx.ID OK:
self.m out.WriteText( Recognizing!n')paths = dlg.GetPaths()
for path in paths:
tmp = os.popen%s -- raw %s'%(cmd,path)).readlines()barN
while barNum == and i< len(tmp)barNum = tmp[i].strip()
i +=1
if barNum == .
self.m out.WriteText('% s recognize fails! n'% path)continuenewname ='%sss' (os.path.dirname(path),barNum,os.path.splitext(path)[ -1:][0])
try:
os.rename(path,newname)item = [datetime.now().strftime('%Y-%m-%d'),s” barNum,newname]self.m dvc.AppendItem( item)
csvdata.append( item)
self.m out.WriteText( %s Recognize Done! n'% barNumexcept Exception as e:self.m out.WriteText(  %s rename fails! n' path)self.m out.WriteText(str(e))
dlg.Destroy()
def export2csv(self,event):
dlg = wx.FileDialog(self,message ="Save file as ...",defaultDir = os.getcwd()defaultFile=wildcard = wildcard2,style = wx.FD SAVE
dlg.SetFilterIndex(2)
if dlg.ShowModal() == wX.ID OK:
self.m out.WriteText(Exporting! n')path = dlg.GetPath()
try:with open(path,w',newline =) as csvfile:writer = csv.writer(csvfile,dialect =excel',quoting = csV.OUOTE ALL)for row in csvdata:writer.writerow(row)
self.m out.WriteText( s Export Done! n' path)except Exception as e:
self.m out.WriteText(str(e))
dlg.Destroy()
wildcard = "Pictures ( *.jpg,*.png)*.jpg;*.png All files (*.*)*.*"
wildcard2 ="CSV files (*.csv) *.csv"
cmd = os.path.realpath('Zbar/bin/zbarimq.exe')
csvdata = []
app= wX.App()
win = MyFramel(None)
win.Show()
app.MainLoop()

說明: 由于以上代碼中的某些行過長,所以在代碼的前端加上了數(shù)字表示行號。

注意事項:

(1) zbar軟件安裝在上述程序的當(dāng)前目錄下,可以通過Zbar\bin\zbarimg.exe運行。

(2) 目錄中有中文可能會出錯。

(3) 用FileDialog打開文件時會改變當(dāng)前目錄,所以在最初就要保存zbar命令的絕對路徑。

(4) 由于條形碼有以0開頭的數(shù)字,用Excel打開時會自動省略,所以在數(shù)字前加了一個“'”符號。

以上就是基于Python實現(xiàn)條形碼圖片識別程序的詳細內(nèi)容,更多關(guān)于Python條形碼識別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python檢測兩個文本文件相似性的三種方法

    Python檢測兩個文本文件相似性的三種方法

    檢測兩個文本文件的相似性是一個常見的任務(wù),可以用于文本去重、抄襲檢測等場景,Python 提供了多種方法來實現(xiàn)這一功能,x下面小編就來簡單介紹一下吧
    2025-03-03
  • Python繪制的愛心樹與表白代碼(完整代碼)

    Python繪制的愛心樹與表白代碼(完整代碼)

    這篇文章主要介紹了Python繪制的愛心樹與表白代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 如何使用Python?Matplotlib繪制條形圖

    如何使用Python?Matplotlib繪制條形圖

    當(dāng)我們使用plot方法繪圖時,默認繪制的是折線圖,下面這篇文章主要給大家介紹了關(guān)于如何使用Python?Matplotlib繪制條形圖的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Python常用的日期時間處理方法示例

    Python常用的日期時間處理方法示例

    這篇文章主要介紹了Python常用的日期時間處理方法示例,本文直接給出實現(xiàn)代碼,包含如給定日期向后N天的日期、昨天、今天、將字符串轉(zhuǎn)換成datetime類型等方法,需要的朋友可以參考下
    2015-02-02
  • python super的使用方法及實例詳解

    python super的使用方法及實例詳解

    這篇文章主要介紹了python super的使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python抓取并保存html頁面時亂碼問題的解決方法

    python抓取并保存html頁面時亂碼問題的解決方法

    這篇文章主要介紹了python抓取并保存html頁面時亂碼問題的解決方法,結(jié)合實例形式分析了Python頁面抓取過程中亂碼出現(xiàn)的原因與相應(yīng)的解決方法,需要的朋友可以參考下
    2016-07-07
  • 十個常見的Python腳本詳細介紹及代碼舉例

    十個常見的Python腳本詳細介紹及代碼舉例

    這篇文章主要給大家介紹了十個常見的Python腳本的相關(guān)資料,包括批量重命名文件、下載網(wǎng)頁圖片、發(fā)送郵件通知、讀取和寫入CSV文件、爬取網(wǎng)頁數(shù)據(jù)、自動化測試、圖像處理、數(shù)據(jù)可視化以及創(chuàng)建簡單的Web應(yīng)用,需要的朋友可以參考下
    2024-11-11
  • python開啟多個子進程并行運行的方法

    python開啟多個子進程并行運行的方法

    這篇文章主要介紹了python開啟多個子進程并行運行的方法,涉及Python進程操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Python中賦值的含義及說明

    Python中賦值的含義及說明

    這篇文章主要介紹了Python中賦值的含義及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python之Class&Object用法詳解

    Python之Class&Object用法詳解

    今天小編就為大家分享一篇Python之Class&Object用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論

闸北区| 保定市| 萍乡市| 滁州市| 绵阳市| 乡城县| 凭祥市| 南郑县| 新津县| 会东县| 桃江县| 寿宁县| 铜鼓县| 大悟县| 伊春市| 东城区| 宣威市| 遂川县| 准格尔旗| 石景山区| 阳泉市| 长宁县| 资兴市| 图片| 阆中市| 偏关县| 轮台县| 湖南省| 玉田县| 获嘉县| 卢湾区| 梁河县| 惠安县| 彭山县| 崇礼县| 信阳市| 弥勒县| 栾城县| 嵊泗县| 永善县| 吉木乃县|