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使用7z解压apk包的方法
Apr 18 Python
Python xlrd读取excel日期类型的2种方法
Apr 28 Python
Python文件读取的3种方法及路径转义
Jun 21 Python
浅谈python类属性的访问、设置和删除方法
Jul 25 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
使用python实现tcp自动重连
Jul 02 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
Python递归函数实例讲解
Feb 27 Python
python实现电子书翻页小程序
Jul 23 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
Python操作Excel的学习笔记
Feb 18 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
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
js 与或运算符 || && 妙用
2009/12/09 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
管理心得体会
2013/12/28 职场文书
《月迹》教学反思
2014/02/19 职场文书
建议书标准格式
2014/03/12 职场文书
销售类求职信
2014/06/13 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
六年级小学生评语
2014/12/26 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
python spilt()分隔字符串的实现示例
2021/05/21 Python