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统计列表中的重复项出现的次数的方法
Aug 18 Python
分析Python的Django框架的运行方式及处理流程
Apr 08 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
Django框架反向解析操作详解
Nov 28 Python
python DataFrame转dict字典过程详解
Dec 26 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
Python实现敏感词过滤的4种方法
Sep 12 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类中Static方法效率测试代码
2010/10/17 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
parentElement,srcElement的使用小结
2014/01/13 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
python编程培训 python培训靠谱吗
2018/01/17 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
django中的图片验证码功能
2019/09/18 Python
python 实现屏幕录制示例
2019/12/23 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
金融专业求职信
2014/08/05 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
党员倡议书
2015/01/19 职场文书
保管员岗位职责
2015/02/14 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android