手机拍照识别二维码

最近在研究一维条码和二维码的识别技术,用于设备巡检、仓库管理等行业应用。如果通过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://bobli.cnblogs.com/
日期:2009年9月14日
posted @ 2009-09-14 11:32 黎波 阅读(7765) 评论(45) 编辑 收藏

 回复 引用 查看   
#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




 回复 引用 查看   
#40楼 2010-04-02 17:49 sz扬帆      
我用的是PC版的,可发现Data不能超过128个字符,超过128个字符,会提示IndexOutOfRangeException in rsTemp 的超出索引最大值异常,这是什么错误,如果要对大数据进行编码,改怎么解决.
 回复 引用 查看   
#41楼 2010-06-14 11:33 雪人      
引用Jack Fan:
今天亲自拿viva做了个测试,发现要关闭Touch Flo,然后用CameraCaptureDialog才能正常返回程序界面,识别率还行。我的像素是200w的,感觉够用了。
谢谢楼主的分享!



我的是ACER的F900,调用CameraCaptureDialog老是失败,结束Touch Flo进程后还是不行,后来就干脆调用F900的相机程序camera.exe,先拍照再解码。这样试了几次,英文字符还行,中文的成功率非常低,不知道是不是跟拍照的图片效果有关,另外解码时的速度非常慢,起码要好几秒,要说F900的配置也算中下水平,不知道为什么这么慢。

 回复 引用 查看   
#42楼 2010-06-14 11:34 雪人      
楼主的是什么PDA拍的呢?448ms,挺快的,羡慕啊
 回复 引用 查看   
#43楼[楼主] 2010-06-14 13:11 黎波      
@雪人
试一试设置照相机为微距模式。

 回复 引用 查看   
#44楼 2010-06-28 09:30 Jews      
需要手动拍照吗?
能否动态识别?
对图片的背景光和摄像头要求怎么样?

 回复 引用 查看   
#45楼 2011-05-08 15:56 軒轅劍      
楼主可提供demo吗?