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的语言类型(详解)
Jun 24 Python
利用Python读取txt文档的方法讲解
Jun 23 Python
使用Python开发SQLite代理服务器的方法
Dec 07 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
python实现蒙特卡罗方法教程
Jan 28 Python
Python实现Restful API的例子
Aug 31 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
弄清Pytorch显存的分配机制
Dec 10 Python
python 获取域名到期时间的方法步骤
Feb 10 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 Python
Python实战实现爬取天气数据并完成可视化分析详解
Jun 16 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
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
js实现左右轮播图
2020/01/09 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
python模拟enum枚举类型的方法小结
2015/04/30 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Python 中Pickle库的使用详解
2018/02/24 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python如何实现强制数据类型转换
2019/11/22 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
办加油卡单位介绍信
2014/01/09 职场文书
买卖车协议书
2014/04/21 职场文书
《陈毅探母》教学反思
2014/05/01 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
工程主管竞聘书
2015/09/15 职场文书
高三化学教学反思
2016/02/22 职场文书
创业计划书之面包店
2019/09/12 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis