Python+OpenCV提取公众号文章阅读数
扫描二维码
随时随地手机看文章
周末大清早群友问我能否做个小功能——提取出公众号文章阅读数。呵呵,谷歌网站主页光溜溜的,做起来也是个小功能吧。至于什么系统集成我也不多问了,别家公司的秘密不乱打听,杀头的。
初定采用图像识别的方法,图像文字提取有很多现成方案,而且还是显示器上的文字提取,比车牌识别要简单得多,就算不答应他,我也想自己试试玩玩。
计划几天的工作量,没打算在它身上废太多功夫。一切的创新从拷贝开始,没想到3小时就把功能实现,接下来抽空上一点细节,以及各种异常处理,毕竟要规避少量误报的情况。
方案采用Python+OpenCV+OCR库(Optical Character Recognition,光学字符识别),文稿下方视频演示执行效果。
友情提示,点击视频右侧按钮可以旋转手机观看,否则文字太小竖屏看不清
所用的OCR是离线数据包,网上看到有人用百度AI的OCR服务,反正我不会考虑把核心功能放在大佬的服务器上跑的。
主席:饭碗任何时候都要牢牢端在自己手中。
简要说说
PC端打开公众号文章也是没有阅读数的,爬虫也做不了。
我认为是公众号防止第三方抓取数据,特意把“阅读”字体颜色改得和背景色相近,在识别图像时“阅读”辨识成背景噪声。
下面列出原始图像的文字识别效果,不是太好。当然,没有那种图像处理能少得了预处理的。
';', 'RRB', '“有一种赞赏叫催更,感谢你的肯定“', 'eo', 'ti', '|', '&', '>', 'ob', '8', '分享', 'ke', '2', '1', '人呵”泸州考究官方旗舰店', '关注公众号', '爱喝好酒的,进来看看', '发消息']
我用画图把原始的灰色字体描绘成黑色,算是人工干预预处理。再次识别,“阅读”数据成功提取出来。
下面是涂黑字体识别结果。
'“有一种赞赏叫催更,感谢你的肯', 'eo', 'ti', '|', '阅读', '31', 'P', 'oO', 'o', '8B', '分享', '收藏', '2', '1', '人呵”泸州考究官方旗舰店', '关注公众号', '爱喝好酒的,进来看看']
既然高对比度它有利于提高文字识别率,我就想办法提高“阅读”文字的对比度。首先用的是边沿检测方法,所有文字边沿都描绘一个框。
本以为转换成边沿检测识别效果会好起来,实际反而更差。猜测OCR库不能识别“浮雕状文字”,文字的边框使得文字看起来更肥大,边沿检测后文字和背景色之间有个轮廓,只有特别粗的字体在边沿检测后不受影响。
瞧,小字体文字都识别成乱码。
'”有一种赞赏叫催政,感谢你的肯定”', '稀罕作者', 'ia', 'io', 'ne', 'ae', 'me', ';', '1', 'See', 'ga', 'lel', 'Te', 'Be', 'mg', 'cD']
剔除背景色
微信文章默认背景色都是白色,计划把白色涂抹成其他颜色,其他非白色位置描黑。其实白色的判定不是绝对的白色,而是取出一定范围的相对白色。下图左侧是取出的“蒙版”,除了要去除的背景色外,蒙版上其余颜色涂成黑色。蒙版的作用和Photoshop是一样的。
如此一来整张图片文字对比对就高多。
最终文字检测结果。
'调用do_exit,文稿末尾我上贴图;', '了', '2、如果某应用程序在内核空间死锁,将永远', '不能控制GPIO', ',只能手动强制关机;', '吴解君', '“有一种赞赏叫催更,感谢你的上衣', '”', '中', '稀罕作者', '阅读', '31', 'PrP', '@', 'o', '8', '分享', '收藏', '2', '1', 'GE', '泸州老窜官方旗舰店', '、', 'g', 'BIRTH,', 'WEEE.', '关注公众号', '发消息']
最后
天下老板都一样,貌似对方老板为了接单同意客户各种指标要求,先把客户套住再说,至于实现嘛,交给写代码的,码农Ctrl+C、Ctrl+V想尽办法去圆老板的当年吹下的牛逼。他手下码农头快突了,搞不定原型机,项目负责人到处找外协帮忙。
你们可知道外协其实也是到处Ctrl+C、Ctrl+V的吗?哈哈。
问对方和客户谈指标时下面做事的人有代表参加评审做可行性分析吗?
项目负责人如此回我。
“评审会,评什么?打工人,凭什么?”
鄙人卧槽评天下,阁下是个文化人。
真要说打工人凭什么,也不是真没有:君子生非异也,善假于物也。
老板借员工的时间,员工借老板的资源。