amp@java

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  99 随笔 :: 0 文章 :: 228 评论 :: 0 Trackbacks

二维条形码比普通的条形码能保存更多的信息,已经应用到很多领域里面。例如手机电影票,就是一个嵌在彩信里面的二维码图像。南航也推出了网上办理登机牌业务,办理完成之后往手机发送一条包含二维码的彩信,到了机场就可以通过自助设备扫描二维码,打印登机牌。
然而,专业的二维码扫描设备价格十分昂贵,最便宜的都在1000元以上,到淘宝上搜搜就知道了。借助Java和一个开源的库,我们却可以通过普通的网络摄像头实现相同的效果,成本只需要几十块。
Open Source QR Code Library是一个开源的QR Code(二维条形码的一种)生成和读取的库,官方网站为:http://qrcode.sourceforge.jp/,里面包含了生成和读取QR Code的所有代码,其中有个jmfexample就能实现通过摄像头读取QR Code,经过本人尝试,几十块的普通摄像头效果已经不错了,一次读取几百字节都没问题。
使用这个库的步骤如下:
1、到其官方网站下载回来;
2、到sun的网站下载JMF包并安装;
3、插上摄像头,打开我的电脑,查看是否出现“USB视频设备”,然后打开,看摄像头工作是否正常
4、运行JMF里面的JMF Registry程序,点击“Detect Capture Devices”,查找视频设备,查找到之后会在左边的列表里出现“vfw:Microsoft WDM Image Capture (Win32):0”类似的设备,点击就会在右边出现其详细信息,我的摄像头是这样的:
Name = vfw:Microsoft WDM Image Capture (Win32):0

Locator = vfw://0

Output Formats---->

0. javax.media.format.YUVFormat
  YUV Video Format: Size = java.awt.Dimension[width=640,height=480] MaxDataLength = 614400 DataType = class [B yuvType = 32 StrideY = 1280 StrideUV = 1280 OffsetY = 0 OffsetU = 1 OffsetV = 3

1. javax.media.format.YUVFormat
  YUV Video Format: Size = java.awt.Dimension[width=160,height=120] MaxDataLength = 38400 DataType = class [B yuvType = 32 StrideY = 320 StrideUV = 320 OffsetY = 0 OffsetU = 1 OffsetV = 3

2. javax.media.format.YUVFormat
  YUV Video Format: Size = java.awt.Dimension[width=176,height=144] MaxDataLength = 50688 DataType = class [B yuvType = 32 StrideY = 352 StrideUV = 352 OffsetY = 0 OffsetU = 1 OffsetV = 3

3. javax.media.format.YUVFormat
  YUV Video Format: Size = java.awt.Dimension[width=320,height=240] MaxDataLength = 153600 DataType = class [B yuvType = 32 StrideY = 640 StrideUV = 640 OffsetY = 0 OffsetU = 1 OffsetV = 3

4. javax.media.format.YUVFormat
  YUV Video Format: Size = java.awt.Dimension[width=352,height=288] MaxDataLength = 202752 DataType = class [B yuvType = 32 StrideY = 704 StrideUV = 704 OffsetY = 0 OffsetU = 1 OffsetV = 3

注意,其中Output Formats都是javax.media.format.YUVFormat,而QR Code Library里默认的设备不是这种格式的,所以需要对源码作一定的修改。

5、用Eclipse打开QR Code Library的源码,作出一些适当的修改:
如果摄像头是上面所说的只支持YUV格式,则需要修改jp.sourceforge.qrcode.example.jmf.camDataSource.java,把setMainSource函数里的
VideoFormat vidformat = new VideoFormat(VideoFormat.RGB);
修改为
VideoFormat vidformat = new VideoFormat(VideoFormat.YUV);
否则永远也找不到摄像头。

6、把JMF包里的jmf.jar放到Classpath里
7、执行jp.sourceforge.qrcode.example.jmf.jmfexample,搞定

当然,由于源码开放的,只要符合许可,你想怎么改都行,可以把它嵌入到某个应用程序里面,这个程序就具有了扫描QR Code的功能了。

posted on 2009-04-02 16:22 amp@java 阅读(5903) 评论(13)  编辑  收藏 所属分类: Java common

评论

# re: 用JAVA做一个便宜好用的二维码扫描器 2009-04-08 21:32 koma
呵呵 性能是很差的我们2年前就测试了这个程序  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器 2009-05-21 18:35 amp@java
@koma
呵呵,我觉得比专业的扫描仪还好用,可以连续扫
  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器 2009-06-09 16:33 wu
此程序开了几分钟,然后会屏幕一片空白,无法使用,请问博主是否遇到过这情况,如何解决?  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器 2009-06-10 08:55 wu
jmf开一阵子也是变黑,或许是我中星微摄像头休眠了?  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器 2009-06-10 13:55 wu
确实是摄像头问题,换了一个好了,打扰!  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器 2009-06-13 16:56 shengshu
@koma
有没有更好的介绍?!~  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器[未登录] 2009-07-24 11:34 虫子
那个包,能用来生成QR图吗??要怎么用???  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器 2009-07-28 09:03 amplifier
@虫子
不能生成,只能读取
生成QRCode的有另外的包,搜一下有很多  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器[未登录] 2009-09-16 16:04 seven
请问读取之后能不能把信息写进数据库?  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器 2009-09-18 22:40 amplifier
@seven
当然可以,读出来的都是文本,你想怎么处理都可以  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器[未登录] 2010-03-03 17:25 Fred
我试过了基本上很难读出来,用到现在就读出过2回,中文而且有乱码。摄像头也是1000W像素的,非常清晰。

能给个导出的jar吗?ad#fengsage.cn 谢谢  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器 2012-03-20 16:44
运行找不到,
Exception in thread "main" java.lang.NullPointerException
at javax.media.Manager.createProcessor(Manager.java:663)
at jmf.camDataSource.startProcessing(camDataSource.java:68)
at jmf.jmfexample.<init>(jmfexample.java:18)
at jmf.jmfexample.main(jmfexample.java:30)
怎么回事啊,
摄像头没事,JMF也没事
  回复  更多评论
  

# re: 用JAVA做一个便宜好用的二维码扫描器[未登录] 2012-03-23 11:42 a
我试过了,不行,报错,
有做出来的吗?求!!发一个
465955146@qq.com  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: