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实现多线程采集的2个代码例子
Jul 07 Python
Python字符串格式化输出方法分析
Apr 13 Python
Python的Flask框架应用调用Redis队列数据的方法
Jun 06 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
Python算法应用实战之队列详解
Feb 04 Python
python记录程序运行时间的三种方法
Jul 14 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
python快排算法详解
Mar 04 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
python3爬取torrent种子链接实例
Jan 16 Python
Python如何操作docker redis过程解析
Aug 10 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 高手之路(一)
2006/10/09 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
浅谈PHP中的
2016/04/23 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
利用python实现命令行有道词典的方法示例
2017/01/31 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
通过实例解析Python return运行原理
2020/03/04 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
德国高尔夫商店:Par71.de
2020/11/29 全球购物
盛大二次面试题
2016/11/18 面试题
决心书范文
2014/03/11 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
学校三节实施方案
2014/06/09 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
2015年检验科工作总结
2015/04/27 职场文书
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python