手机拍照识别二维码

最近在研究一维条码和二维码的识别技术,用于设备巡检、仓库管理等行业应用。如果通过CF接口或SD接口的条码扫描头进行识别,识别效率和准确率最高,但是硬件的投入成本比较高,一套PDA设备在7千元以上,高的有1万多。如果采购的设备数量比较多的话,在硬件的投入会成为客户的顾虑。
除了通过硬件扫描头识别的方案,还有一种廉价的方案是先利用PDA的摄像头对条码进行拍照,再通过代码对拍摄到的条码图像进行分析解码,最后获得条码的具体信息。第二种方案只要带摄像头的PDA就能支持了,一套PDA设备的成本降低为原来的1/4。不过这种方案使用起来没有硬件扫描头那么直接和方案,识别率跟拍照的效果有很大的关系。以下是我在 http://qrcode.kaywa.com/ 生成的QR-Code二维码,对应的信息是“http://upto.cnblogs.com/”。



然后我写了一个Demo程序,通过 CameraCaptureDialog 对话框类打开摄像头拍摄,对这屏幕的二维码进行拍照,拍照完成后返回到Demo程序,Demo程序会自动对拍摄到的二维码图像进行解码,并获得对应的信息。如下图所示,解码后的结果是“http://upto.cnblogs.com/”,耗时448毫秒。



Barcode
http://en.wikipedia.org/wiki/Barcode
Open Source QRCode Library
http://www.codeproject.com/KB/cs/qrcode.aspx

作者:黎波
博客:http://upto.cnblogs.com/
日期:2009年9月14日
2
0
(请您对文章做出评价)
« 上一篇:如何实现控件的渐变填充效果
» 下一篇:Windows Mobile 功能导航界面的设计(1)
posted @ 2009-09-14 11:32 黎波 阅读(4203) 评论(39)  编辑 收藏 所属分类: .NET CF

  回复  引用  查看    
#1楼2009-09-14 11:38 | 个人知识管理      
也正在研究通过此方式读取39码条码和直接识别条码下方的数字结合
  回复  引用  查看    
#2楼2009-09-14 11:43 | Franking      
lihai
  回复  引用  查看    
#3楼2009-09-14 11:47 | 火星人.NET      
不错,快速廉洁解决方案
  回复  引用  查看    
#4楼2009-09-14 11:48 | egmkang      
我只能说,这个很NB

  回复  引用  查看    
#5楼2009-09-14 11:55 | 斯克迪亚      
很强大哦,未来用途会很广泛
  回复  引用  查看    
#6楼2009-09-14 11:56 | NormRen      
NB
  回复  引用    
#7楼2009-09-14 12:00 | 呵呵1[未注册用户]
二维码 别的国家早应用很多了,我们太落后了,要加油啊
  回复  引用  查看    
#8楼2009-09-14 12:20 | ruinet      
生成的二维码图片是很容易识别出来,而普通PDA照相出来的却很难识别出来,而且操作麻烦很难在实际中运用,学习下还可以。
  回复  引用  查看    
#9楼2009-09-14 12:32 | 厦门安硕软件      
带扫描的PDA,一般用在工业上,都是有工业等级的,所以一般价格比商业用的手机高出不少。一般比较好的:Symbol 或 Intermec 等。
  回复  引用  查看    
#10楼2009-09-14 12:34 | 厦门安硕软件      
我们从事多年的,PDA+扫描 此方面的开发应用,有机会可以交流一下。
  回复  引用  查看    
#11楼2009-09-14 12:43 | Jack Fan      
顶一个!
  回复  引用    
#12楼2009-09-14 16:36 | wangxm[未注册用户]
拿来学习借鉴还是可以的,实际用途无限接近于零。
识别摄像头生成的照片,对于使用的场景光线和使用者的技术水平,另外还有二维条码的介质表面,都有很高的要求。识别率太低

  回复  引用    
#13楼2009-09-14 16:57 | syba[未注册用户]
syban系统下已经有成熟的识别二维码的软件,NOKIA官方也出了一款,
window mobile 系统下应该也有类似的软件,而且识别率还相当的高!

  回复  引用  查看    
#14楼2009-09-14 16:58 | AlexLiu      
大哥,有参考资料什么的么?看着挺晕的,不太了解算法 :(
  回复  引用  查看    
#15楼2009-09-14 17:01 | AlexLiu      
只有那个wiki么?
  回复  引用  查看    
#16楼2009-09-14 17:45 | foxbuilder      
我的i350有一个QuickMark程序,和楼主这样功能一样。刚才对着显示器识别出来了“http://upto.cnblogs.com/

以前还一直没试过。呵。有点意思 。

  回复  引用  查看    
#17楼2009-09-14 17:47 | zzjj296      
中国移动也有一款。。
  回复  引用  查看    
#18楼2009-09-14 19:36 | Jake.NET      
good。
  回复  引用  查看    
#19楼2009-09-14 21:20 | 码农.KEN      
http://bbs.meizu.com/thread-1127902-1-1.html
M8专用二维码扫描软件。

  回复  引用    
#20楼2009-09-14 23:19 | cfans2009[未注册用户]
能否提供你写的demo代码?谢谢!
  回复  引用  查看    
#21楼2009-09-14 23:51 | nginx      
好不错!
想学习一下!能给一下DEMO源码吗?
163fit@163.com 谢谢!

  回复  引用  查看    
#23楼2009-09-15 13:01 | 边城浪      
最近才做了一个二维码的项目.
WINCE5+USB摄像头+GPRS模块.

最关键是图像识别..
先用了Open Source QRCode Library
但对图像质量的要求太高了,从摄像头取出的识别率很低..

后来还是购的一个商业的.识别率很高.
PartiTek 百度一下就知道了,有试用的.

  回复  引用  查看    
#24楼2009-09-15 13:14 | 施炯      
恩 又长见识了 呵呵~~
  回复  引用  查看    
#25楼2009-09-15 13:24 | 景裔      
耗时448毫秒……要是在3秒内的话就好了
  回复  引用  查看    
#26楼2009-09-15 13:34 | Jack Fan      
今天亲自拿viva做了个测试,发现要关闭Touch Flo,然后用CameraCaptureDialog才能正常返回程序界面,识别率还行。我的像素是200w的,感觉够用了。
谢谢楼主的分享!

  回复  引用  查看    
#27楼2009-09-15 14:13 | midnight      
引用景裔:耗时448毫秒……要是在3秒内的话就好了


1000毫秒=1秒
..............

  回复  引用  查看    
#28楼2009-09-15 16:12 | egmkang      
刚才试了一下,图片太大,放弃解码...
另外,这个拍出来的张片是否还要裁剪一下?

  回复  引用  查看    
#29楼[楼主]2009-09-15 16:17 | 黎波      
@egmkang
我把摄像头的分辨率改为240*320

  回复  引用  查看    
#30楼2009-09-15 16:19 | egmkang      
还有,你那个demo的图片怎么拍出来的?
那么小

  回复  引用  查看    
#31楼[楼主]2009-09-15 16:26 | 黎波      
@egmkang
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;

http://www.twit88.com/home/opensource/download
找到一个像开源的东西,没有细看!

  回复  引用    
#33楼2009-09-15 19:58 | Ana[未注册用户]
想求Demo源码看一下?
  回复  引用    
#34楼2009-09-17 12:44 | diligentpig[未注册用户]
台湾的quickmark比较强大了
  回复  引用  查看    
#35楼2009-09-17 16:34 | 景裔      
@midnight
哦,自我鄙视ING

  回复  引用  查看    
#36楼2009-09-23 09:48 | Jack Fan      
想请教楼主:为什么跑下载来的那个WM5的例子,进行Encode会出现
IndexOutOfRangeException in rsTemp
的错误呢?索引超出最大值?不知道楼主有没有遇到过哦?
rsTemp[rsBlockNumber][j] = codewords[i2];这里抛出异常~
————————————————————

唉~已解决,原来是没有把资源文件复制到目录下,我写了篇随笔来介绍如何解决了~http://www.cnblogs.com/longqi293/archive/2009/09/23/1572427.html

  回复  引用  查看    
#37楼2009-09-28 14:34 | ★火星人★      
不支持中文,,,,

IsUnicode写的不对...明明的Unicode的中文这里确返回Encoding.ASCII

  回复  引用  查看    
#38楼2009-09-28 14:34 | ★火星人★      
不支持中文,,,,

IsUnicode写的不对...明明的Unicode的中文这里确返回Encoding.ASCII

  回复  引用    
#39楼2009-10-30 15:13 | 超人气[未注册用户]

这种办法不适合商用,我们原来这样做过。

后来买了商业的。不用capturedialog,直接摄像头内存扫描。

效果非常好。

http://www.e1861.cn/Default-1118-barcode-0up.html