概述
條碼解析在現(xiàn)在市場上有很多的產(chǎn)品,且在各類商場也隨處可見其應(yīng)用的蹤影,如超市的收銀處。條碼槍跟條碼數(shù)據(jù)采集器也是比較常見的。不過這些硬件都需要專門的采購,像一般的人開發(fā)人員或普通用戶而言,很少接觸這些硬件,對其工作原理也是不得而知。
前段時間一朋友購買了一臺G4的手機(jī),并且為其裝上了一個通過手機(jī)攝像頭對條碼拍照后自動解析出條碼信息的軟件,我覺得這功能挺不錯,相當(dāng)?shù)膶嵱谩1热缦氩樵兡成唐吩诰W(wǎng)上的相關(guān)信息,如果這個商品有條碼的話,那可以通過這個功能直接解析出商品的基本信息,再通過google或其他的搜索工具在網(wǎng)上一搜就可以。還有比如對那些二維碼的條碼,通過手機(jī)就可以知道其具體的一些信息,比如實名的火車票。
這么方便的工具,那如果我的手機(jī)不支持安裝這類應(yīng)用程序呢,但我有自己的個人電腦可用,那能否在個人電腦上跑一個類似的程序也能完成這樣的任務(wù)呢?當(dāng)然,這些在電腦上就更加方便實現(xiàn)了。
接下來我就貼出前段時間實現(xiàn)的一個這樣的應(yīng)用程序,供大家參考。
解說bcvp
在介紹這個應(yīng)用之前,我們需要了解一下com.google.zxing這個開源項目,ZXing(發(fā)音類似Zebra
crossing)是Java的開源多格式1D/2D條碼圖像處理庫,目的是使用內(nèi)置在手機(jī)上的攝像頭拍照并對條碼進(jìn)行解碼,而不必與服務(wù)器通訊,它被用于Android系統(tǒng)。但同樣可以應(yīng)用J2SE、J2EE等領(lǐng)域。項目地址:http://code.google.com/p/zxing/。這項目的使用相當(dāng)?shù)暮唵危瑢xing的core.jar跟javase.jar兩個包添加到項目的Libraries下面就行,其調(diào)用也相當(dāng)?shù)暮唵危缦旅娓鶕?jù)圖片解碼的方法:
/**
* 獲取解碼后的文本內(nèi)容
* @param image 用來解析的圖片對象
* @return
*/
public static String getDecodeText(BufferedImage image) {
if (image == null) {
return null;
}
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(
new BufferedImageLuminanceSource(image)));
Result result;
try {
result = mfr.decode(bitmap);
} catch (ReaderException re) {
return re.getMessage();
}
return result.getText();
}
如果項目中有用到Maven的話,則只需要在項目的pom.xml文件中加入其依賴就可,但因為這個項目在
Maven2的公共倉庫中沒有,因此需要下載其源碼到本地運(yùn)行Maven的相關(guān)命令編譯安裝到本地Maven倉庫或者作業(yè)環(huán)境的公共Maven倉庫。下面是我這個程序的項目結(jié)構(gòu):

其中除了用到ZXing這個項目會,還用到了JMF框架,JMF是Java媒體框架,該核心框架支持不同媒體(如:音頻輸出和視頻輸出)間的時鐘同步。它是一個標(biāo)準(zhǔn)的擴(kuò)展框架,允許用戶制作純音頻流和視頻流。編譯環(huán)境中需要添加JMF框架相關(guān)的包到項目的Libraries中。相關(guān)JMF的資料請參見參考資料。
結(jié)構(gòu)說明
audio是一個音頻播放器的包,可以當(dāng)成是工具類,也可以應(yīng)用于音頻播放器,只不過只支持有限的音頻文件。這里需要利用這個來當(dāng)視頻頭捕獲到條碼時,發(fā)出聲音提示用戶。
impl是bcvp項目的默認(rèn)實現(xiàn)包,你也可以添加自己的實現(xiàn),只需要繼承BcvpProcesser類,實現(xiàn)如下三個方法即可:
/**
* 獲取解析的文本內(nèi)容
* @param image
* @return
*/
public abstract String getDecodeText(Image image);
/**
* 獲取需要解析的圖片
* @return
*/
public abstract Image getToDecodeImage();
/**
* 成功后的執(zhí)行
* @param decodeText
* @param image
*/
public abstract void afterSuccessToDoing(String decodeText, Image image);
util是一個bcvp的工具包。
zxing是封裝ZXing項目提供統(tǒng)一調(diào)用的包。
BcvpProcesser是bcvp核心處理器,你可以像BcvpProcesserTest.java中那樣調(diào)用來使用BcvpProcesser來進(jìn)行工作。
下載
ideawork-bcvp.zip
注意
1、當(dāng)啟動此程序的時候,需要確保PC上已經(jīng)添加有視頻頭設(shè)備。
2、運(yùn)行環(huán)境依賴ZXing的core.jar跟JMF的jmf.jar,當(dāng)然還有l(wèi)ogger相關(guān)的包,項目POM文件中有相關(guān)依賴信息。
3、當(dāng)程序啟動后,會打開一個Java Swing窗口,在把印有條碼的物件對準(zhǔn)視頻頭時,盡量使之在視頻窗口中看得比較清楚(因此這也是效率不高的原因)。
參考資料
ZXing項目地址:http://code.google.com/p/zxing/
JMF官方地址:http://java.sun.com/products/java-media/jmf/index.jsp
JMF中文資訊:http://www.cn-java.com/www1/bbs/viewthread.php?action=printable&tid=16228&sid=nmOj9O