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 pass 语句使用示例
Mar 11 Python
九步学会Python装饰器
May 09 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 Python
Python多线程实现同步的四种方式
May 02 Python
python实现名片管理系统项目
Apr 26 Python
pandas对dataFrame中某一个列的数据进行处理的方法
Jul 08 Python
python列表,字典,元组简单用法示例
Jul 11 Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 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删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
javascript回调函数详解
2018/02/06 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
Python 抓取动态网页内容方案详解
2014/12/25 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
python移位运算的实现
2019/07/15 Python
python根据时间获取周数代码实例
2019/09/30 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
什么是属性访问器
2015/10/26 面试题
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
会计辞职信范文
2014/01/15 职场文书
教师评语大全
2014/04/28 职场文书
优质服务演讲稿
2014/05/14 职场文书
与美同行演讲稿
2014/09/13 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
2016年春节问候语
2015/11/11 职场文书
银行求职信怎么写
2019/06/20 职场文书