python利用pytesseract 实现本地识别图片文字


Posted in Python onDecember 14, 2020
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import glob
from os import path
import os
import pytesseract
from PIL import Image
from queue import Queue
import threading
import datetime
import cv2

def convertimg(picfile, outdir):
  '''调整图片大小,对于过大的图片进行压缩
  picfile:  图片路径
  outdir:  图片输出路径
  '''
  img = Image.open(picfile)
  width, height = img.size
  while (width * height > 4000000): # 该数值压缩后的图片大约 两百多k
    width = width // 2
    height = height // 2
  new_img = img.resize((width, height), Image.BILINEAR)
  new_img.save(path.join(outdir, os.path.basename(picfile)))


def baiduOCR(ts_queue):
  while not ts_queue.empty():
    picfile = ts_queue.get()
    filename = path.basename(picfile)
    outfile = 'D:\Study\pythonProject\scrapy\IpProxy\port_zidian.txt'
    img = cv2.imread(picfile, cv2.IMREAD_COLOR)
    print("正在识别图片:\t" + filename)
    message = pytesseract.image_to_string(img,lang = 'eng')
    message = message.replace('', '')
    message = message.replace('\n', '')
    # message = client.basicAccurate(img)  # 通用文字高精度识别,每天 800 次免费
    #print("识别成功!"))
    try:
      filename1 = filename.split('.')[0]
      filename1 = ''.join(filename1)
      with open(outfile, 'a+') as fo:
        fo.writelines('\'' + filename1 + '\'' + ':' + message + ',')
        fo.writelines('\n')
        # fo.writelines("+" * 60 + '\n')
        # fo.writelines("识别图片:\t" + filename + "\n" * 2)
        # fo.writelines("文本内容:\n")
        # # 输出文本内容
        # for text in message.get('words_result'):
        #   fo.writelines(text.get('words') + '\n')
        # fo.writelines('\n' * 2)
      os.remove(filename)
      print("识别成功!")
    except:
      print('识别失败')



    print("文本导出成功!")
    print()
def duqu_tupian(dir):
  ts_queue = Queue(10000)

  outdir = dir
  # if path.exists(outfile):
  #   os.remove(outfile)
  if not path.exists(outdir):
    os.mkdir(outdir)
  print("压缩过大的图片...")
  # 首先对过大的图片进行压缩,以提高识别速度,将压缩的图片保存与临时文件夹中
  try:
    for picfile in glob.glob(r"D:\Study\pythonProject\scrapy\IpProxy\tmp\*"):
      convertimg(picfile, outdir)
    print("图片识别...")
    for picfile in glob.glob("tmp1/*"):
      ts_queue.put(picfile)
      #baiduOCR(picfile, outfile)
      #os.remove(picfile)
    print('图片文本提取结束!文本输出结果位于文件中。' )
    #os.removedirs(outdir)
    return ts_queue
  except:
    print('失败')

if __name__ == "__main__":

  start = datetime.datetime.now().replace(microsecond=0)
  t = 'tmp1'
  s = duqu_tupian(t)
  threads = []
  try:
    for i in range(100):
      t = threading.Thread(target=baiduOCR, name='th-' + str(i), kwargs={'ts_queue': s})
      threads.append(t)
    for t in threads:
      t.start()
    for t in threads:
      t.join()
    end = datetime.datetime.now().replace(microsecond=0)
    print('删除耗时:' + str(end - start))
  except:
    print('识别失败')

实测速度慢,但用了多线程明显提高了速度,但准确度稍低,同样高清图片,90百分识别率。还时不时出现乱码文字,乱空格,这里展现不了,自己实践吧,重点免费的,随便识别,通向100张图片,用时快6分钟了,速度慢了一倍,但是是免费的,挺不错的了。

以上就是python利用pytesseract 实现本地识别图片文字的详细内容,更多关于python 识别图片文字的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现的Kmeans++算法实例
Apr 26 Python
Python中返回字典键的值的values()方法使用
May 22 Python
Python利用ansible分发处理任务
Aug 04 Python
python实现图片处理和特征提取详解
Nov 13 Python
Python使用numpy模块创建数组操作示例
Jun 20 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
基于python实现聊天室程序
Jul 27 Python
PyQt5显示GIF图片的方法
Jun 17 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
Python如何使用ConfigParser读取配置文件
Nov 12 Python
python ansible自动化运维工具执行流程
Jun 24 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 #Python
python3中for循环踩过的坑记录
Dec 14 #Python
Python 数据分析之逐块读取文本的实现
Dec 14 #Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 #Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 #Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 #Python
python中time、datetime模块的使用
Dec 14 #Python
You might like
PHP三元运算符的结合性介绍
2012/01/10 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
微信小程序url传参写变量的方法
2018/08/09 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
Python抓取京东图书评论数据
2014/08/31 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
python3实现简单飞机大战
2020/11/29 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
营销总经理的岗位职责
2013/12/15 职场文书
医学生自我评价
2014/01/27 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
安全教育日主题班会
2015/08/13 职场文书
三好学生主要事迹材料
2015/11/03 职场文书
创业计划之特色精品店
2019/08/12 职场文书
浅谈Python魔法方法
2021/06/28 Java/Android
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python