概述
條碼解析在現在市場上有很多的產品,且在各類商場也隨處可見其應用的蹤影,如超市的收銀處。條碼槍跟條碼數據采集器也是比較常見的。不過這些硬件都需要專門的采購,像一般的人開發人員或普通用戶而言,很少接觸這些硬件,對其工作原理也是不得而知。
前段時間一朋友購買了一臺G4的手機,并且為其裝上了一個通過手機攝像頭對條碼拍照后自動解析出條碼信息的軟件,我覺得這功能挺不錯,相當的實用。比如想查詢某商品在網上的相關信息,如果這個商品有條碼的話,那可以通過這個功能直接解析出商品的基本信息,再通過google或其他的搜索工具在網上一搜就可以。還有比如對那些二維碼的條碼,通過手機就可以知道其具體的一些信息,比如實名的火車票。
這么方便的工具,那如果我的手機不支持安裝這類應用程序呢,但我有自己的個人電腦可用,那能否在個人電腦上跑一個類似的程序也能完成這樣的任務呢?當然,這些在電腦上就更加方便實現了。
接下來我就貼出前段時間實現的一個這樣的應用程序,供大家參考。
解說bcvp
在介紹這個應用之前,我們需要了解一下com.google.zxing這個開源項目,ZXing(發音類似Zebra
crossing)是Java的開源多格式1D/2D條碼圖像處理庫,目的是使用內置在手機上的攝像頭拍照并對條碼進行解碼,而不必與服務器通訊,它被用于Android系統。但同樣可以應用J2SE、J2EE等領域。項目地址:http://code.google.com/p/zxing/。這項目的使用相當的簡單,將zxing的core.jar跟javase.jar兩個包添加到項目的Libraries下面就行,其調用也相當的簡單,如下面根據圖片解碼的方法:
/**
* 獲取解碼后的文本內容
* @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的公共倉庫中沒有,因此需要下載其源碼到本地運行Maven的相關命令編譯安裝到本地Maven倉庫或者作業環境的公共Maven倉庫。下面是我這個程序的項目結構:

其中除了用到ZXing這個項目會,還用到了JMF框架,JMF是Java媒體框架,該核心框架支持不同媒體(如:音頻輸出和視頻輸出)間的時鐘同步。它是一個標準的擴展框架,允許用戶制作純音頻流和視頻流。編譯環境中需要添加JMF框架相關的包到項目的Libraries中。相關JMF的資料請參見參考資料。
結構說明
audio是一個音頻播放器的包,可以當成是工具類,也可以應用于音頻播放器,只不過只支持有限的音頻文件。這里需要利用這個來當視頻頭捕獲到條碼時,發出聲音提示用戶。
impl是bcvp項目的默認實現包,你也可以添加自己的實現,只需要繼承BcvpProcesser類,實現如下三個方法即可:
/**
* 獲取解析的文本內容
* @param image
* @return
*/
public abstract String getDecodeText(Image image);
/**
* 獲取需要解析的圖片
* @return
*/
public abstract Image getToDecodeImage();
/**
* 成功后的執行
* @param decodeText
* @param image
*/
public abstract void afterSuccessToDoing(String decodeText, Image image);
util是一個bcvp的工具包。
zxing是封裝ZXing項目提供統一調用的包。
BcvpProcesser是bcvp核心處理器,你可以像BcvpProcesserTest.java中那樣調用來使用BcvpProcesser來進行工作。
下載
ideawork-bcvp.zip
注意
1、當啟動此程序的時候,需要確保PC上已經添加有視頻頭設備。
2、運行環境依賴ZXing的core.jar跟JMF的jmf.jar,當然還有logger相關的包,項目POM文件中有相關依賴信息。
3、當程序啟動后,會打開一個Java Swing窗口,在把印有條碼的物件對準視頻頭時,盡量使之在視頻窗口中看得比較清楚(因此這也是效率不高的原因)。
參考資料
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