前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小妙招:让图像会说话,字字清晰

小妙招:让图像会说话,字字清晰

作者头像
herain
发布2022-04-27 19:18:49
1.1K0
发布2022-04-27 19:18:49
举报
文章被收录于专栏:数据指象

人对图像的感知能力很强,所以图文很多,但是我们的认知却更多的用文字去传达;所以我们常常苦恼:

  • 如何将pdf文字转成Word文本
  • 如何快速破解验证码
  • 如何从图片中找到自己想要的关键信息

今天我们一起用一个简单的小程序,破解我们日常中的小难题;天不助人,人自助。

1,工欲善其事,必先利其器

本文的实验环境:

Mac计算机、Python3、当然更离不开Tesseract-OCR引擎

# MAC安装Tesseract-OCR引擎:brew install Tesseract #安装Python包 pip install pytesseract #安装PILLOW图像处理包 pip install Pillow

2,图片开始说话

测试Demo程序:test.py

代码语言:javascript
复制
import pytesseractfrom PIL 
import Imageimg_str = 'test.png'
img = Image.open(img_str)a = pytesseract.image_to_string(img)
for w in a.split('\n'): #格式化输出
    if w.strip():        
         print(w)

好吧,第一版的程序,只能正确的解析图中的英文和数字“idw007”,对中文的解析,只能让人呵呵呵;但是不能灰心,遇到问题我们耐心解决,不断测试小步迭代,一定会越来越好。

第二版,兼容对中文汉字的处理,光学字符识别的原理:从图像中扫描出结果与原本的文字集合中的文字形状作对比,找出相似对最高的字;所以我们需要加载一个中文的汉字包:chi_sim.traineddata,下载后放到目录:xxx/tessdata/ 下面即可;

兼容中文汉字:test.py

代码语言:javascript
复制
import pytesseractfrom PIL 
import Imageimg_str = 'test.png'
img = Image.open(img_str)
a = pytesseract.image_to_string((img), lang='chi_sim') 
for w in a.split('\n'): #格式化输出    
   if w.strip():        
      print(w)

看完处理结果,准确率:100%,全部识别正确了;你是不是觉得很酷;学会这招,以后你就可以轻易的将任何无法辅助的文本,通过图片识别的方式转成文本来获取你想要的文本。

3,其实这只是开始

对于白底黑字的图片文本,识别准确率却是很高;但是,道高一尺魔高一丈,为了不让我们轻易的爬取识别图像文字,图像中通常会有错综复杂的背景,文字形状字体也会有巧妙的变化;这样我们直接用ORC识别,准确率就会很低,反而会变向增加我们的处理工作。

如下:调整了图片背景,字体;准确率只有53.92%,还不如人工一个个手动翻译了

4,我们处理图像-提高字的识别度

这里简单的使用PIL中的图像处理方法,将红色的阈值替换为白色,从而消除红色网格背景线的干扰,从而提高字体的识别度,这样我们测试了一下,处理后的图片识别的准确率高达99%,已经很完美了。我想这样一个小程序应该能帮我们解决很多问题了。

代码语言:javascript
复制
import pytesseractfrom PIL 
import Image
import numpy as npdef 

deal_img(img_str):    
    img = Image.open(img_str)    
    im = img.convert('RGBA')     
    data = np.array(im)    
    print(data) # RGBA 数据矩阵    
    r1,g1, b1  = [220, 58, 21]    
    rw, gw, bw, aw = [255, 255, 255, 255]    
    red, green, blue, alpha = data[:, :, 0], data[:, :, 1], data[:, :, 2], data[:, :, 3]    
    mask = ((red <= r1) & (green <= g1) & (blue == b1))     
    data[:, :, :4][mask] = [rw, gw, bw, aw]    
    new_im = Image.fromarray(data)    
    new_im.save('new_file.png')     
    return new_im

img_str = 'test_red.png'
img=deal_img(img_str)
a = pytesseract.image_to_string((img), lang='chi_sim')
for w in a.split('\n'): #格式化输出      
   if w.strip():            
      print(w)

有问题的小伙伴,可以私聊哦,创作不易,喜欢点赞

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据指象 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文字识别
文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档