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 自动补全(vim)
Nov 30 Python
python中管道用法入门实例
Jun 04 Python
python实现Dijkstra算法的最短路径问题
Jun 21 Python
python处理大日志文件
Jul 23 Python
Python解决pip install时出现的Could not fetch URL问题
Aug 01 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
Python venv虚拟环境配置过程解析
Jul 08 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
python中的垃圾回收(GC)机制
Sep 21 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 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 URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
Node.js实现数据推送
2016/04/14 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
nodejs入门教程六:express模块用法示例
2017/04/24 NodeJs
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
使用python3构建文件传输的方法
2019/02/13 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
python super的使用方法及实例详解
2019/09/25 Python
python如何安装下载后的模块
2020/07/03 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
元旦晚会邀请函
2014/02/01 职场文书
护理专业自我评价
2015/03/11 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
趣味运动会广播稿
2015/08/19 职场文书
Java设计模式之代理模式
2022/04/22 Java/Android