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实现扣除个人税后的工资计算器示例
Mar 26 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
Oct 21 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
详解Python的循环结构知识点
May 20 Python
在django模板中实现超链接配置
Aug 21 Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
Python xpath表达式如何实现数据处理
Jun 13 Python
浅谈Python __init__.py的作用
Oct 28 Python
python实现图片,视频人脸识别(dlib版)
Nov 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
桌面中心(三)修改数据库
2006/10/09 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
vue.js实现只弹一次弹框
2018/01/29 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
Python管理Windows服务小脚本
2018/03/12 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
质量承诺书格式
2014/05/20 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书