概述
條碼解析在現(xiàn)在市場上有很多的產(chǎn)品,且在各類商場也隨處可見其應(yīng)用的蹤影,如超市的收銀處。條碼槍跟條碼數(shù)據(jù)采集器也是比較常見的。不過這些硬件都需要專門的采購,像一般的人開發(fā)人員或普通用戶而言,很少接觸這些硬件,對其工作原理也是不得而知。
前段時(shí)間一朋友購買了一臺(tái)G4的手機(jī),并且為其裝上了一個(gè)通過手機(jī)攝像頭對條碼拍照后自動(dòng)解析出條碼信息的軟件,我覺得這功能挺不錯(cuò),相當(dāng)?shù)膶?shí)用。比如想查詢某商品在網(wǎng)上的相關(guān)信息,如果這個(gè)商品有條碼的話,那可以通過這個(gè)功能直接解析出商品的基本信息,再通過google或其他的搜索工具在網(wǎng)上一搜就可以。還有比如對那些二維碼的條碼,通過手機(jī)就可以知道其具體的一些信息,比如實(shí)名的火車票。
這么方便的工具,那如果我的手機(jī)不支持安裝這類應(yīng)用程序呢,但我有自己的個(gè)人電腦可用,那能否在個(gè)人電腦上跑一個(gè)類似的程序也能完成這樣的任務(wù)呢?當(dāng)然,這些在電腦上就更加方便實(shí)現(xiàn)了。
接下來我就貼出前段時(shí)間實(shí)現(xiàn)的一個(gè)這樣的應(yīng)用程序,供大家參考。
解說bcvp
在介紹這個(gè)應(yīng)用之前,我們需要了解一下com.google.zxing這個(gè)開源項(xiàng)目,ZXing(發(fā)音類似Zebra crossing)是Java的開源多格式1D/2D條碼圖像處理庫,目的是使用內(nèi)置在手機(jī)上的攝像頭拍照并對條碼進(jìn)行解碼,而不必與服務(wù)器通訊,它被用于Android系統(tǒng)。但同樣可以應(yīng)用J2SE、J2EE等領(lǐng)域。項(xiàng)目地址:http://code.google.com/p/zxing/。這項(xiàng)目的使用相當(dāng)?shù)暮唵危瑢xing的core.jar跟javase.jar兩個(gè)包添加到項(xiàng)目的Libraries下面就行,其調(diào)用也相當(dāng)?shù)暮唵危缦旅娓鶕?jù)圖片解碼的方法:

其中除了用到ZXing這個(gè)項(xiàng)目會(huì),還用到了JMF框架,JMF是Java媒體框架,該核心框架支持不同媒體(如:音頻輸出和視頻輸出)間的時(shí)鐘同步。它是一個(gè)標(biāo)準(zhǔn)的擴(kuò)展框架,允許用戶制作純音頻流和視頻流。編譯環(huán)境中需要添加JMF框架相關(guān)的包到項(xiàng)目的Libraries中。相關(guān)JMF的資料請參見參考資料。
結(jié)構(gòu)說明
audio是一個(gè)音頻播放器的包,可以當(dāng)成是工具類,也可以應(yīng)用于音頻播放器,只不過只支持有限的音頻文件。這里需要利用這個(gè)來當(dāng)視頻頭捕獲到條碼時(shí),發(fā)出聲音提示用戶。
impl是bcvp項(xiàng)目的默認(rèn)實(shí)現(xiàn)包,你也可以添加自己的實(shí)現(xiàn),只需要繼承BcvpProcesser類,實(shí)現(xiàn)如下三個(gè)方法即可:
util是一個(gè)bcvp的工具包。
zxing是封裝ZXing項(xiàng)目提供統(tǒng)一調(diào)用的包。
BcvpProcesser是bcvp核心處理器,你可以像BcvpProcesserTest.java中那樣調(diào)用來使用BcvpProcesser來進(jìn)行工作。
下載
ideawork-bcvp.zip
注意
1、當(dāng)啟動(dòng)此程序的時(shí)候,需要確保PC上已經(jīng)添加有視頻頭設(shè)備。
2、運(yùn)行環(huán)境依賴ZXing的core.jar跟JMF的jmf.jar,當(dāng)然還有l(wèi)ogger相關(guān)的包,項(xiàng)目POM文件中有相關(guān)依賴信息。
3、當(dāng)程序啟動(dòng)后,會(huì)打開一個(gè)Java Swing窗口,在把印有條碼的物件對準(zhǔn)視頻頭時(shí),盡量使之在視頻窗口中看得比較清楚(因此這也是效率不高的原因)。
參考資料
ZXing項(xiàng)目地址: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
條碼解析在現(xiàn)在市場上有很多的產(chǎn)品,且在各類商場也隨處可見其應(yīng)用的蹤影,如超市的收銀處。條碼槍跟條碼數(shù)據(jù)采集器也是比較常見的。不過這些硬件都需要專門的采購,像一般的人開發(fā)人員或普通用戶而言,很少接觸這些硬件,對其工作原理也是不得而知。
前段時(shí)間一朋友購買了一臺(tái)G4的手機(jī),并且為其裝上了一個(gè)通過手機(jī)攝像頭對條碼拍照后自動(dòng)解析出條碼信息的軟件,我覺得這功能挺不錯(cuò),相當(dāng)?shù)膶?shí)用。比如想查詢某商品在網(wǎng)上的相關(guān)信息,如果這個(gè)商品有條碼的話,那可以通過這個(gè)功能直接解析出商品的基本信息,再通過google或其他的搜索工具在網(wǎng)上一搜就可以。還有比如對那些二維碼的條碼,通過手機(jī)就可以知道其具體的一些信息,比如實(shí)名的火車票。
這么方便的工具,那如果我的手機(jī)不支持安裝這類應(yīng)用程序呢,但我有自己的個(gè)人電腦可用,那能否在個(gè)人電腦上跑一個(gè)類似的程序也能完成這樣的任務(wù)呢?當(dāng)然,這些在電腦上就更加方便實(shí)現(xiàn)了。
接下來我就貼出前段時(shí)間實(shí)現(xiàn)的一個(gè)這樣的應(yīng)用程序,供大家參考。
解說bcvp
在介紹這個(gè)應(yīng)用之前,我們需要了解一下com.google.zxing這個(gè)開源項(xiàng)目,ZXing(發(fā)音類似Zebra crossing)是Java的開源多格式1D/2D條碼圖像處理庫,目的是使用內(nèi)置在手機(jī)上的攝像頭拍照并對條碼進(jìn)行解碼,而不必與服務(wù)器通訊,它被用于Android系統(tǒng)。但同樣可以應(yīng)用J2SE、J2EE等領(lǐng)域。項(xiàng)目地址:http://code.google.com/p/zxing/。這項(xiàng)目的使用相當(dāng)?shù)暮唵危瑢xing的core.jar跟javase.jar兩個(gè)包添加到項(xiàng)目的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();
}
如果項(xiàng)目中有用到Maven的話,則只需要在項(xiàng)目的pom.xml文件中加入其依賴就可,但因?yàn)檫@個(gè)項(xiàng)目在Maven2的公共倉庫中沒有,因此需要下載其源碼到本地運(yùn)行Maven的相關(guān)命令編譯安裝到本地Maven倉庫或者作業(yè)環(huán)境的公共Maven倉庫。下面是我這個(gè)程序的項(xiàng)目結(jié)構(gòu):* 獲取解碼后的文本內(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();
}

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