网店工商信息图片文字提取

news/2024/11/19 13:37:59/

首先非常抱歉,最近一段时间由于学校课程作业较多,外加个人较懒,所以一直没有更新文章,以后一定会勤奋点,多加更新。正如前几天在stormzhang**(张哥)**的公众号里看到的一样,写作其实并不难,每个人都可以做到,但是长期坚持写作就非常难,这也是写作者想要长期创作遇到的第一个大问题,所以贵在坚持。另外长期写作的第二大问题是什么呢?你猜猜看,看看我们认为的是不是一样。

最近主要是完成专业内的一些课程作业,比如Oracle数据库、JaveEE、搜索引擎等作业。国内大学总是会学很多课程,其实对多数学生来说,一些课程都不知道学着有什么意义。这点国外做的较是不错,在英国UWS当交换生的时候,可以选择自己喜欢的课程,这样也就有很大的兴趣去学习这些知识点。

在解决这些课程作业之中,有件事感觉可以和大家分享一下。我们都知道计算机行业技术更新非常快,然而JavaEE老师教的知识点还是10多年前的内容,每次课程结束之中还需完成一个实验。但就是这样一个简单实验,却需要我们学生花费2天或者3天时间去完成。花这么长时间,按理来说应该很难吧,恰恰相反,实验很简单,那为什么还要花这么长时间呢。其实多数时间都是用在各种环境配置、参数设置、寻找各种jar包中,实在不需要写多少代码。比如我需要调用某个jar包,版本太高不行,版本太低不行,来来回回换个好几个,遇到问题想去查一些博客,竟然都是10年前的资料。完成一次实验之后,至此JaveEE的实验我再也没有去做,每次要交的时候,都是借用同学的电脑给老师展示一下,然后拿个分数就走。不是说我懒,没有什么探索、钻研精神,全然是因为学习这种东西实在没有什么用处,还浪费很多时间,不如利用这些时间去完成一些自己比较感兴趣的事情。

另外需要声明一点的是,我的意思并不是旧的东西就没有用,而是强调在实用性和意义方面。比如数据结构、网络原理、操作系统,这样原理性的知识点,沉淀起来才是精华。但对于JavaEE这种实际开发技术来说,我认为过于陈旧的东西实在没有必要去学习。另外针对JaveEE开发这门课,任课老师为什么就不能更新一下知识点,来教一些更新的技术呢。既然如此,我的目标又不是追求多高多高的GPA,那么不如利用这些时间来解决一些自己比较感兴趣的问题,做一些有意义的事情较好。

专业课程作业之外,还有一个实训作业,也就是从中软杯12个题目之中选出来一个完成,然后进行答辩,由指导老师进行评分。这个我感觉还是比较有意思的,所以选了个网店工商信息图片文字提取的题目,然后花四天时间完成,下面主要和大家分享一下问题的解决思路。

1.网店工商信息图片文字提取

图片内容如下所示,但每张图片中信息出现的位置不尽相同,题目要求所写的程序能够完成如下几个功能点。

  • 程序能够识别不同格式的图片,并能够提取所要求的信息。
  • 从图片之中提取企业注册号和企业名称信息,并保存到Excel表格之中。

  • 程序能够自动读取企业工商信息图片所在的文件夹路径。

  • 识别速度保持在60秒识别50张图片,识别正确率保证在95%以上。
    01

2.Tess4j

了解题目要求之后,我们便开始来解决问题。首先明确一点的是,肯定不能从头去写文字识别算法或者文字识别程序,OCR(Optical Character Recognition , 光学字符识别)发展这么多年来,开源的库肯定不少,只需找到适合中文识别的类库或者项目即可。

个人采用的是Tess4j开源库,其中Tess4j是由Tesseract扩展而来,Tesseract是HP实验室开发由Google维护的开源OCR引擎,Tess4j支持Tiff,jpeg,gif,png,pdf等多种格式识别。我们只需要在https://sourceforge.net/projects/tess4j/下载类库,然后编写下述代码便可实现文字识别,使用方法很简单。如果你要使用的话,请注意package,imageFile,instance的位置。

package net.sourceforge.tess4j.example;import java.io.File;
import net.sourceforge.tess4j.*;public class TesseractExample1 {public static void main(String[] args) {        File imageFile = new File("/Users/zhenhai/Downloads/SoftwareCup/Tess4J/test/resources/tianmao/1.png");ITesseract instance = new Tesseract();  // JNA Interface Mapping// ITesseract instance = new Tesseract1(); // JNA Direct Mappinginstance.setDatapath("/Users/zhenhai/Downloads/SoftwareCup/Tess4J");instance.setLanguage("chi_sim");try {String result = instance.doOCR(imageFile);System.out.println(result);} catch (TesseractException e) {System.err.println(e.getMessage());}}
}

3.网店工商信息图片文字提取

下载的tess4j项目自带英文字体库,而我们需要识别中文信息,所以需下载中文简体字体库。字体库下载完成之后,将题目提供给我们的图片进行识别,识别之后发现准确率很低,而且识别时间过长,所以需要对图片进行处理。

企业注册号 : 913302055612570鄄7 ′

企业名称: 宁麦皮中哲票广鲳I忏善 蓼鬓′墓示埔壹甬

类 型 霉嫣膘占辆 虫资) 趴辕~蓼唧 `

住惑7妻 踢「【庄北长兴路689弄22号11巾童A1壬蔚雀菅业^ 刁乏喔憩」壹雇

法 人: 杨禾口荣

成立时间:2010-08-26 甬 甬

注册资本 : 1000万人民币元 / /

营业I言【j目〖艮:2010-08洲:i墅o碾言壹 鹏 莹鬓、′墓示簪

经莒范戛蓼反逼卫 目艮饰日勺扎匕发、 零售、 薯批愤嵩爵签稻昊信息的咨询 ; 服装i氦十犹撕{

菖〈茵珥跨止\ 懦牌苣理 广告服务、 企业苣癫颧琨蓼 扩〈喔圃蓼′

登i 机关 : 浙江雀宁波市江北区工商『壬政苣王里局

核准时间 : 2015-12-24 __日q __日辄

3.1去除水印

首先能够看到,提供的图片带有天猫营业执照信息公示专用水印,所以我们需要进行去水印处理。花了很长时间在网上找去水印的开源代码,但多数都需要先提供水印模版,然后才能进行去水印处理。水印模版不是问题,我们直接截取水印图片即可,但重点是去水印处理之后,水印去除效果并不是很理想。观察一番之后,发现所有的图片水印都是同一个颜色,那么我们是不是可以把水印的rgb值改为和背景色相同,实验之后发现果然可以,由于代码比较简单,此处就不再贴出代码,可以自行尝试一下。然后重新对图片进行识别,发现准确率还是很低,那是什么原因呢?

企业注册号 : 913302055612570鄄7 ′

企业名称: 宁麦皮中哲票广鲳I忏善 蓼鬓′墓示埔壹甬

类 型 霉裴章膘占辆 虫资) 趴辕~苜趴 `

住惑)妻 踢「【庄北长兴路689弄22号11巾童A1壬蔚雀菅业^ 刁乏喔憩」壹雇

法 人: 杨禾口荣

成立时间:2010-08-26 甬 甬

注册资本 : 1000万人民币元 / /

营业I言【j目〖艮:2010-08洲:i墅o蔺言壹 鹏 莹鬓、′墓示簪

经莒范戛蓼反逼卫 目艮饰日勺扎匕发、 零售、 薯批愤嵩爵垦稻昊信息的咨询 ; 眼装i氦十犹撕{

菖〈茵珥跨止\ 懦牌苣理 广告目艮务、 企业苣癫颧寰蓼 扩〈喔圃蓼′

登i 机关 : 浙江雀宁波市江北区工商『壬政苣王里局

核准时间 : 2015-12-24 __日q __日辄

3.2图片格式转换

将图片放大之后,发现图片处于全黑的状态,完全看不到任何字。然后尝试将图片格式转换为其他格式,比如jpg,当然这里不是直接改后缀名,而是利用在线图片格式转换工具。当然你也可以转换成其他格式,看看效果如何,转换完成之后,再次进行图片文字识别,发现准确率有较大提升。

企业注丹舟号 : 9133020……612…70177

企业名称 : 宁波中哲慕尚电子商务有限公司

类 型 : 有限责任公司〈法人独资)

住 所 二 宁波市江才匕长兴路689弄22号11瞳A112室

法定代表人: 杨禾口荣

成立时间 : 2010-08-26

注册资本 : 1000万人民币元

营业期限 : 2010-08-26至2020-08-25

经菖范围 : 服装、 箱包、 鞋帽眼饰的批发 零售、 网上批发` 零售及棺关信息的咨询 : 眼装i毓十

、 企业品牌营王里、 广 告眼务、 企业盲理咨询。

登记机关 : 浙江雀宁波市麦工才匕区工商肴壬政苣王里局

核准时间 : 2015-12-24

3.3分区域识别

图片识别准确率有一定程度提升之后,但是时间还是很高,大概15s左右,所以需要进一步优化。由于题目只需要我们识别企业注册号和企业名称,所以没有必要识别整张图片。但我们又不知道企业名称和企业注册号处于图片的什么位置,所以只能扫描着进行文字图片识别。我这里采用的是每次识别图片高度的18%,例第一次识别区域为0-18%,如果没有识别到我们所需的文字信息,下次识别图片15%-32%,这样就不会遇到文字刚好被识别区域切割的问题。

那这样识别会识别到很多重复区域,时间怎么会提升呢?其实不然,观察题目所给的50张图片,其中有46张图片的信息都是在头部,那么第一次扫描便能得到所需的信息,综合来看时间有很大程度提升。另外如果长时间未能识别到某张图片信息,那么则自动放弃识别。更改程序后重新识别图片,时间有很大程度提升,每张图片的识别速度在3s左右。

企业注册号 : 913302055612570177

企业名称 : 宁波中哲票尚电子商务有眼公司

对于本张图片来说,企业注册号已经能够正确识别,但是企业名称还是有个别字错误,比如将识别成,将识别成,因此需要进一步优化。

3.4 图片二值化

为进一步提高准确率,我们将图片二值化,然后再对图片放大10倍,其实放大倍数越高,识别准确率也应该越高。这里为了在时间和准确度之间做个平衡,对图片只放大10倍。

BufferedImage textImage = ImageHelper.convertImageToGrayscale(ImageHelper.getSubImage(image, 0, startHeight, resetWidth, resetHeight));textImage = ImageHelper.convertImageToBinary(textImage);textImage = ImageHelper.getScaledInstance(textImage, textImage.getWidth() * 10, textImage.getHeight() * 10);

图片放大10倍之后,我们再次对图片进行识别,发现企业注册号和企业名称完全正确。

企业注册号 : 913302055612570177

企业名称 : 宁波中哲幕尚电子商务有限公司

3.5图片模糊寻找和结果导出

图片模糊寻找的意思也就是,给出图片文件夹的大致路径,然后程序能够找到正确的图片路径,并能够正确进行文字识别。比如给定/Users/zhenhai/Downloads/SoftwareCup/Tess4J路径,程序能够找到/Users/zhenhai/Downloads/SoftwareCup/Tess4J/test/resources/tianmao1/1.jpg路径。然后将识别到的结果导出到Excel表格,问题也很简单,这里也就不给出相应代码。
02
至此已经能够识别图片,而且准确率挺不错,准确率在95%左右,识别成功之后也能够正常导出至Excel表格。但时间依旧不理想,目前识别50张图片大概在2分钟30s左右。

4.待优化

图片文字识别方面只做了4天,之前也没有做过相关问题,所以还是有很大的优化空间。

  • 利用多线程,识别时间应该能够减少1分钟,达到1分钟30s识别50张(猜测)。
  • 由于我们直接利用网上的字库,没有对字库做任何训练。比如可以将出现频率较高的词设置更高的优先级,这样不仅能够提高准确率,而且能够进一步降低时间,比如上述的不会再识别成
  • 图片大小不一,可以将图片设置为平均宽度和高度,然后再进行分区域识别。而且每次识别时候不是识别企业注册号和企业名称的完整信息,而只是试探识别这几个字,如果识别成功之后,然后再扩大识别宽度,提取所需要的完整信息。

5.推广

更多内容请关注公众号谓之小一,若有疑问可在公众号后台提问,随时回答,欢迎关注,内容转载请注明出处。
推广


http://www.ppmy.cn/news/497406.html

相关文章

美团算法团队:深度学习在美团OCR中的应用!

http://blog.itpub.net/31077337/viewspace-2157198/ AI(人工智能)技术已经广泛应用于美团的众多业务,从美团App到大众点评App,从外卖到打车出行,从旅游到婚庆亲子,美团数百名最优秀的算法工程师正致力于将AI技术应用于搜索、推荐…

版权中心对软著手册及代码的要求

软著申请材料: 1、软件著作权申请表。 2、软件源代码:提供前、后各连续30页共60页,不低于3000行的源代码。 3、软件操作手册:图文形式不低于15页,操作界面截图。 4、身份证明资料:企业:单位营业…

统一社会信用代码的编码格式以及js正则校验

统一社会信用代码 统一社会信用代码正则:/^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/ // 返回值为true或false function isSocialCode(socialCode) {const reg /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/;return reg.test(socialCode…

60天申请软件著作权

材料准备: 代码手册;用户手册;身份证复印件(可以加上水印,仅供软著申请专用);申请表注意均是黑白打印。 照片截图一定要清晰,一开始我的微信小程序背景图片是彩色的,打印…

从“中国之光”到倒闭破产,北大方正做错了什么?

酷玩实验室作品 首发于微信号 酷玩实验室 微信ID:coollabs 在中关村,有三次经典的合作,促成了三个影响中国的企业。 万润南找到了王辑志,促成了四通;柳传志找到了倪光南,促成了联想;张玉峰找到了…

Flutter写第一个跨平台薅羊毛APP(七)--申报软件著作权

上架很多应用市场都需要提供软件著作权,这也是为了保护我们自己的版权权益,开发了十来个app,都没有自己的软件著作权(有些公司申报的),想着这次怎么也要自己弄一个,当然找人代办申请花几百块也很…

OCR身份证识别简单算法流程

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 做OCR身份证识别的调研,正好整理一下从基础的图像处理角度的算法流程。 OCR简介 光学字符识别 Optical Character Recognition(OCR)其…

Tesseract-OCR识别中文与训练字库实例(转)

关于中文的识别,效果比较好而且开源的应该就是Tesseract-OCR了,所以自己亲身试用一下,分享到博客让有同样兴趣的人少走弯路。 文中所用到的身份证图片资源是百度找的,如有侵权可联系我删除。 一、准备工作 1、下载Tesseract-OCR…