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函数嵌套实例
Sep 23 Python
Python批量重命名同一文件夹下文件的方法
May 25 Python
Django基础之Model操作步骤(介绍)
May 27 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
Python socket实现的简单通信功能示例
Aug 21 Python
python opencv 二值化 计算白色像素点的实例
Jul 03 Python
django重新生成数据库中的某张表方法
Aug 28 Python
python连接PostgreSQL过程解析
Feb 09 Python
python 函数中的参数类型
Feb 11 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
Aug 19 Python
Python源码解析之List
May 21 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
phpQuery占用内存过多的处理方法
2013/11/13 PHP
php简单防盗链实现方法
2015/07/29 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
python删除文本中行数标签的方法
2018/05/31 Python
python使用KNN算法识别手写数字
2019/04/25 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
管道维修工岗位职责
2013/12/27 职场文书
致100米运动员广播稿
2014/02/14 职场文书
计划生育宣传标语
2014/06/21 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
奖励通知
2015/04/22 职场文书
最美乡村教师观后感
2015/06/11 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis