知名开源软件OpenCV接收南科大本科生贡献的代码

发布时间:2021-07-01

6月28日,OpenCV.org官方新闻报道了三名大四本科生所做的关于条形码识别的贡献,内容详见http://opencv.org/news

OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉库,已有20余年的历史,在学术界和工业界有广泛影响力。OpenCV为计算机视觉应用提供一个通用的基础库,并加快机器视觉算法在商业产品中的使用。OpenCV以Apache开源许可证授权,OpenCV将优秀的计算机视觉算法提供给全世界使用。

在南方科技大学的计算机系本科课程“创新实践”上,三位大四本科生梁峻豪、王天麒、孙中夏在于仕琪副教授的指导下选择了为OpenCV开发算法。条形码被广泛采用,生活中的每件商品都有条形码,但OpenCV一直没有支持条形码。这三位同学计划弥补OpenCV的这一不足。

123微信图片_20210701144149.jpg



图:孙中夏、梁峻豪、王天麒

刚开始的时候,这三位同学没有任何计算机视觉基础。他们开始阅读论文、查阅资料、学习最知名的条形码识别软件ZXing。他们发现, ZXing有三个缺陷:(1)ZXing只能按照水平和垂直方向扫码,如果条形码是倾斜的,ZXing就很容易失败;(2)条形码比较小且模糊的时候,ZXing解码容易失败;(3)ZXing采用Java语言实现算法,算法速度比较慢。如下图中的条形码就无法被ZXing软件解码。

微信图片_20210701144034.png


图:红线:ZXing识别方式;绿线:小组实现的定位算法检测框

 

问题清晰之后,大家的目标也就明确了。同学们通过查阅论文,与导师讨论,开发出了一种基于目标检测的条形码识别算法。该算法首先将条码区域定位,再对区域内沿条码垂直方向取线识别。通过这种方式,同时解决了尺寸很小的条形码以及条形码倾斜的问题,具体方法详见OpenCV官方主页上的描述https://opencv.org/recognizing-one-dimensional-barcode-using-opencv/

然而,仅仅实现了算法并不算完成项目,代码需要被OpenCV官方仓库接纳方可。同学们又花了几个月时间,按照OpenCV的规范对代码进行整理,编写测试样例和文档,使成果达到工业级应用。经过几个月不断在OpenCV社区之间的交流、提出问题、得到反馈、修改代码、CI系统测试等,最终代码被成功合并。

最终版的算法对复杂场景下条码识别的准确率比ZXing要高出50%。由于采用了C++语言,虽然算法比ZXing算法复杂很多,但是算法速度是ZXing的4倍多。准确率和速度对比图如下。


image11.png

1624964641086-1-1.png 


在这次创新实践的课程中,同学们相互合作,不仅培养了团队开发的能力,还需学习计算机视觉相关的算法知识。三位本科生同学完成了一次完整的开源代码贡献,他们贡献的代码,未来将通过OpenCV被世界上很多开发者和科研人员使用,为社会做出了一点小小的贡献。