【本科组】第八届“中国软件杯”大学生软件设计大赛,课工场问答集锦!
课工场 | 2019-03-19 14:20:29  9113 浏览

第八届“中国软件杯”大学生软件设计大赛,为使高校人才培养和新兴信息产业需求的有效衔接,加快培育更多高端、优秀软件人才,增强产业自主创新能力,推动我国软件和信息技术服务业又好又快发展,切实增强学生们自主创新能力和实际动手能力,大赛赛题原型来自全国软件骨干企业的实际技术需求,逐步走出了一条产教互动、合作共赢的人才培养路子。

1_20181009171037_cbqv3_jpg.gif

(图片来源:中国软件杯官网)

今年课工场作为专注于企业IT岗位人才培养的教育机构,深度参与本届赛事,成为赛事支持单位和出题方,有本科生和高职两道赛题入选题库。

在过去的一段时间里,有不少本科组同学向课工场老师咨询问题。今天呢,课工场为了解决各位同学的问题,特整理如下:

赛题名称:基于深度学习的银行卡号识别系统

组类: A 本科及以上

问题1:

银行卡号检测部分也是要求用深度学习吗?单纯用数字图像处理可以吗?

回答:

检测部分建议用深度学习,图像处理算法也行,但是评分会比深度学习少

问题2:

GUI界面是需要开发在安卓上的还是在windows上?

回答:

都可以

问题3:

安卓只是作为一个图像获取并传回,图像处理在服务器端,处理结果在传回安卓。这样可以吗?

回答:

可以的,GUI要求的目的不仅是提供友好的交互体验,同时也是为满足本项目一定工作量设计的。出色的GUI能得到相对高的评分,拉开与竞争对手的分数。核心在于使用深度学习技术体系实现检测与识别功能,GUI是锦上添花的加分项。

问题4:

java开发和Python开发这个会存在评分差异吗?

回答:

评分标准在赛题描述中有说明,推荐使用python,这一项并没有作为评分依据。

问题5:

数据集没标注?

回答:

数据集有标注,文件名就是卡号,检测部分可以去参考开源模型的做法,可以迁移学习

问题6:

要做成app吗,要做成web项目吗?

回答:

web与app形式均可,实现核心功能就可以,GUI涉及到评分,尽量做到用户体验友好。

问题7:

既然有gui,还需要做app web吗?可以用html?

回答:

Gui是用户图形界面,一种展示手段,做你擅长的就行。只需要一种,不需要都实现一遍,WEB做也没问题

问题8:

最后核心功能评分的标准是什么,识别速度还是正确率?

回答:

此次比赛是综合的比试,各方面都会综合考虑,准确率影响比重最大。

问题9:

此次比赛的重点强调内容是?

回答:

深度学习技术体系

问题10:

我想问下智能手机算不算嵌入式硬件设备

回答:

从用户角度看,智能手机不能算嵌入式系统,但从开发工程师角度看,智能手机仍然是嵌入式系统。

用户角度

如今的智能手机已经覆盖了个人电脑大部分的功能,甚至有些功能是个人电脑没有而智能手机才有的,所以智能手机可以认为是一个通用计算机设备,而嵌入式系统的定义就明确了嵌入式系统是专用的计算机设备。因此,从用户角度看,智能手机已经不能算嵌入式系统了,应该将智能手机归于通用计算机一类。

工程师角度

至少在当前,没有办法在智能手机上开发手机App,仍然需要在个人电脑上开发好App,然后将App下载到手机中运行。手机App的开发环境和运行环境是不一样的,有一个交叉编译的过程,这是典型的嵌入式软件开发套路。所以,从开发工程师的角度看,智能手机仍然是个嵌入式系统。

问题11

什么时候提交作品?

回答:

2019年6月15日之前

问题12:

数据集中的图片名称,如 “382_b_0.png”  中的 b 有什么含义吗?是否成品也要标注字母?

回答:

、前四位是数字,四位中没有数字的就是“_”下划线,后面紧跟的就是同样数字的不同类别,这里是用字母区分的,方便用脚本做批量处理;

、做来的功能就是说,拍一张银行卡照片,放到系统里,系统把卡号位置标出来,并把卡号输出出来来即可;

问题13:

是否需要按四位四位抠出来?

回答:

最后输出的结果,如果按银行卡号的格式(包含空格)输出出来,那么识别和检测部分你肯定是高分,输出一串数字也可以,分数会稍低于第一种情况。

问题14:

最后结果是否需要得出是哪个银行的卡?

回答:

不需要得出是哪个银行卡

问题15:

是否一定要用官方提供的数据集

回答:

不需要,但使用数据增强,有评分

问题16:

文本检测的训练能提供数据集吗?

回答:

不提供数据集,文本检测有开源的算法可以参考

问题17:

深度学习建议使用指定软件么?

回答:

建议使用pythontensorflowkerasopencv,不局限特定软件,我提的是现在比较流行的框架与库。符合深度学习的技术体系即可。

问题18:

关于数据增强 可以使用keras.preprocessing.image吗

回答:

如果这个api处理的图像有效,你可以参考他的做法,这个模块有评分,最好自己写。按照评分标准去做。

问题19

开源库和开源框架可以使用吗?

回答:可以用,但是核心部分涉及到评分,尽量体现出自己的编程思路,尽量去避免拿一个现成api实现一个功能

问题20

选用开源神经网络影响评分吗?

回答:算法思想可以参考,直接用现成的分数肯定不如自己做的分数高,这需要自己衡量,实现难度,竞争对手能不能自己实现;你要觉得别人都实现不了,你可以拿开源模型去做,但是要注明。本题本着促进参赛选手学习深度学习技术的精神去设计的。

问题21

在银行卡卡号定位检测中,需要完整的银行卡图片,但是比赛所给的完整的银行卡图片只有几张,不够模型的训练,所以请问是否可以自己加入一部分图片进行训练。

回答:

不一定需要完整的银行卡,开拓下思路,可以使用自己的数据集

问题22

需要什么设备来扫描银行卡,还是一个上传照片,用图片呢?

回答:拍照上传即可,不要求嵌入式。

问题23

既然要尽量自己实现算法,为什么还推荐使用TensorFlow实现模型训练

回答:

tf只是框架,模型的卷积层结构需要自己设计

问题24

可以使用在线API是说比如KNN,CNN不能用机器学习框架自带函数吗

回答:

可以使用自带函数,不要用现成的功能性接口,就是说避免一句代码,实现了文本检测功能

问题25

图像预处理可以使用opencv吗?

回答:

可以啊,尽量体现自己的编程思路,要评分的,如果按这个理论,那就要自己写求导方法了,建议不要使用那种开源帮你封装好的,然后一句话就掉用

问题26

训练好之后的模型,可不可以部署在服务器,然后本地程序通过api调用。

回答:

可以,讲解文档中需证明服务器调用的是自己训练的模型.

问题27

怎么衡量题目的非功能性需求“3.使用GPU(图形处理器)加速计算。”是不是达到要求?

回答:

训练过程需要使用gpu加速。可以使用云服务,代码可以体现出来。

问题28

可以推荐几个相关云服务吗?

回答:

aws

问题29

请问开源工具包括开源ocr工具么?

回答:

包含,但是不要跑偏,涉及评分标准的慎重选择,开源的资源请注明出处。

问题30

识别模块机器学习不提倡?只推荐深度学习吗?

回答:

这个题是针对深度学习体系的,不是不提倡,评分肯定以深度学习为主线。

问题31

“根据本赛题提供的数据集(共1084张卡号截图及标签)实现数据增强模块,将数据集中的每一张图片使用数据增强方式扩展为80张图片”,中“将数据集中的每一张图片使用数据增强方式扩展为80张图片”是什么意思?

回答:

做数据增强为了拓展数据集,可以拓展更多张,80张为参考值

问题32:

请问需要考虑图片的旋转嘛?

回答:

可以考虑,能提高识别模型的泛化能力。

"问题33

数据集里下标都是什么意思?例如:0000x_0.png每个字符都代表什么意思?

回答:

前四位代表卡号,其中前四位里的下划线代表空格。后面的字符代表对卡不同样式,类型,卡号的区分,没有别的意义。"

"问题34

我看训练集图片的标签,对于空格,使用下划线表示的,是否意味着空格的标签就是下划线?那最终测试集的图片,一整串银行卡号中出现空格的时候,识别出来的结果也要用下划线表示,还是不显示空格,只显示一整串数字?

回答:

训练集前四位中的下划线代表空格,后面的字符只是为区分卡号的不同样式与种类,最终识别的时候,出现空格能识别出空格最好,用空格表示就行,识别不了空格那就输出一串数字,评分具体按照评委意见,可以预见的是能识别空格的分数肯定不会比识别不了空格的分数低。"

"问题35

请问空格识别出来是用下斜杠表示吗我看官方数据是这样,可以自己改变命名合适吗?

回答:

可以修改"

"问题36

只要求识别卡号嘛 如果我们自己写的模型 识别率没有套用现成的模型高。那么给分怎么给啊?

回答:

自己写的占优势,但是识别率要跟已经有的模型识别率相当,太低识别率纵是自己写的,那么意义不大。"

"问题37

目前比赛的基本要求内容我已经基本完成,也具有一定的识别率,但是我希望进一步进行识别率的提高,于是我对比了支付宝的银行卡识别功能。

要想更加提高银行卡号码的识别率,最好将整张银行卡横平竖直完整的平铺满整个图片,支付宝也就是这么做的。如果该比赛是为了将项目实用化,那大可借鉴支付宝的做法,拍照时让银行卡图片铺满,识别准确率可以有良好的提升空间。但是如果该比赛的目的并非实用化,目的就是训练具有偏斜以及有背景干扰的图片(给的测试集数据的图片银行卡四周有背景边缘,银行卡还存在倾斜情况),只是作为一个比赛,那我就继续当前方法想办法提升准确率,但恐怕不会有质的飞跃。   

特在此向您提问,想了解一下比赛的目的是生活实用性还是这只是作为比赛的固定需求,如果是实用性,测试数据可否用平铺满银行卡的图片!

回答:

本赛题的主要目的,其一肯定是比赛竞技本身,其二是通过赛题的引导促使参赛选手使用深度学习技术,学习深度学习技术。

同时本赛题的生活背景是您提到的实用性,那么后面的测试数据跟您的附件效果图类似,银行卡的摆放不会严格水平,略微倾斜是很正常的情况。

建议您考虑一下提升准确率,因为同台竞技选手可能会考虑到,从而避免模型的短板。 当然,最终结果以评委老师为准。"

"问题38

在对作品进行测试时会使用和数据集形式相同的图片还是使用整张银行卡图片?

回答:

使用整张银行卡图片进行测试

问题39

对于准确率的计算是“识别准确的数字数/总数字数“还是”全部识别成功的图片数/总图片数“?

回答:

在你训练时候评估模型的准确率是根据你的算法有不同的计算方式,如果您是基于切割字符然后通过预处理后处理技术连接起来的,那么准确率是按字符识别正确的数目去计算;如果你是基于端到端,一起识别一串字符的,那么准确率的计算是根据你的图片数据进行计算的,本赛题比较偏向后一种。

问题40

测试用图片是否会存在倾斜等情况?

回答:

测试用图会有轻微倾斜,基本保持水平

问题45

有没有整张银行卡图片的数据集可以提供?

回答:

银行卡数据有个人隐私性质,出题方不会提供整张银行卡图片的数据集"

"问题46

除了使用本题目给出的数据进行训练之外,是否允许使用网络上获取到的其他数据集一同训练?我们会在最终提交的文档中说明所使用的数据及内容。

回答:

可以使用其他的数据集进行训练,注明来源即可。"

"问题47

请问做银行卡定位(基于CTPN的文本检测模型)的时候,因为赛题没有提供数据集,网上的开源模型针对银行卡凸起的字体效果不好,我也找不到大量的银行卡图片自己训练,现在陷入了瓶颈。请问老师可以提供一点建议吗?

回答:

可以自己收集小部分银行卡照片,然后通过labelimg工具标注一下数据,将这些数据与开源的字符数据混合在一起去训练。"

"问题48

不同语言写的银行卡定位与识别,应该如何提交?:定位是用darknet实现的,darknet是用C语言实现的。识别是用python语言实现的。这两种语言写的程序需要的编译环境不一样,运行的方式不同。您发出的提交文档中是要求将定位和检测放在一个demo.py里面执行的,那对于不同的语言,可不可以分开提交,分开执行。

回答:

cython是一个python与c/c++的双向接口,你可以尝试把c文件编译为python可调用的pyd(win)或so(linux)文件。项目本身演示可以使用视频录制的方式提交,但是我们需要一个额外测试的程序入口,建议使用python去写。这个程序入口主要是批量测试银行卡识别的。

问题49

可不可以提交APP类型的执行文件。如果提交app类型的文件,服务器在本地,可不可以用视频的形式展示识别结果。还是生成.exe执行提交给您。

回答:尽量按照提交文档细则的约定去写,这样无论哪个评审老师去测试,问题都不会太"

"问题50

我通过在开源文字定位模型的数据集里添加一些自己的银行卡数据进行训练后,现在成功在照片上分割出银行卡卡号部位,同时也通过官方给定的数据集训练得到了识别模型。但是我发现这个模型只在识别4位左右的数字时效果较好。由于卡号部位是很长一段数字,数字格式、间隙也不定。如果直接训练可以分割这串数字的模型,由于银行卡的特殊性,我无法找到足量的数据集;如果使用投影分割,凸起的字体效果很差。我目前没有想到什么办法可以较为准确地分割这串数字。

回答:

建议去看一下CTC损失函数的资料。这个主要是在OCR里解决不定长度文本的识别。"

"问题51:

在对作品进行测试时会使用和数据集形式相同的图片还是使用整张银行卡图片?

回答:

测试会使用整张银行卡

问题52:

对于准确率的计算是“识别准确的数字数/总数字数“还是”全部识别成功的图片数/总图片数“?

回答:

准去率的计算是以全部识别成功的图片数/总图片数。

问题53:

测试用图片是否会存在倾斜等情况?

回答:

测试用图会有轻微倾斜,不会严格平行

问题54:

有没有整张银行卡图片的数据集可以提供?

回答:

我们不能提供有私密性质的数据集"

"问题55

批量检测银行卡的结果文档resulst.txt中,存放识别的银行卡号,现在识别出的银行卡号中由于使用下划线“_”代替空格,对于大多数银行卡能将卡号之间的空格识别为下划线""_"",当然通过处理可以将下划线""_""替换为空格,这样更能体现银行卡号原貌,也可以将空格去掉,只显示银行卡号数字,那么在写入resulst.txt文件中,有3种方式:

1、写入带下划线的银行卡号。

2、写入带空格的银行卡号。

3、去掉空格或下划线""_"",只写入银行卡号数字。

result.txt示例文件只有银行卡号数字,这三种方式使用哪种方式存储result.txt文件?

回答:

如果你的算法识别空格的准确率很高,那么建议采用你说的第一种做法,如果比较低,那么建议采用第三种。"

"问题56

老师文档是提交到源码那栏还是 演示视频那栏

回答:

演示视频那栏,readme在源码, 其余文档都在视频那栏"

"问题57

交文档的那个文件可以只写分析视频代码吗

回答:

主要体现分析过程,操作实践过程写明白就好,不要太展开讲,表如果太多,可以简单做个表格描述一下各个表的作用。"

"问题58

构建技能词典的过程用不用录视频,还是直接拿来用就行

回答:

可以写在文档里"

"问题59

老师可视化有什么要求吗 我用java写的程序 读取表中的内容 显示出来算可视化吗

回答:

可视化没有具体要求

问题60

必须实时以hbase作为后台是吧

回答:

是的,"

"问题61

作品安装  可执行文件  还用交吗

回答:

可执行文件有的话,需要提交"

以上就是课工场为各位同学整理的基于深度学习的银行卡号识别系统相关问题,希望能够帮助到大家!


标签: