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 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python编写一个优美的下载器
Apr 15 Python
Python2.7.10以上pip更新及其他包的安装教程
Jun 12 Python
详解python3中zipfile模块用法
Jun 18 Python
python爬虫获取新浪新闻教学
Dec 23 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 Python
Django之模板层的实现代码
Sep 09 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
python开发入门——set的使用
Sep 03 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 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
珊瑚虫IP库浅析
2007/02/15 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
PHP之预定义接口详解
2015/07/29 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
python实现数据图表
2017/07/29 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
综合测评自我鉴定
2013/10/08 职场文书
我的大学生活职业生涯规划
2014/01/02 职场文书
通信研究生自荐信
2014/02/01 职场文书
高一新生军训感言
2014/03/02 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
基于tensorflow权重文件的解读
2021/05/26 Python
使用Django实现商城验证码模块的方法
2021/06/01 Python
总结高并发下Nginx性能如何优化
2021/11/01 Servers