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 help()函数用法详解
Mar 11 Python
Python socket实现简单聊天室
Apr 01 Python
python生成密码字典的方法
Jul 06 Python
Python values()与itervalues()的用法详解
Nov 27 Python
python 通过文件夹导入包的操作
Jun 01 Python
pyCharm 实现关闭代码检查
Jun 09 Python
浅谈Python中的模块
Jun 10 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 Python
利用python 下载bilibili视频
Nov 13 Python
Python约瑟夫生者死者小游戏实例讲解
Jan 04 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 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/06/20 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
理解 JavaScript Scoping & Hoisting(二)
2015/11/18 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
Python FTP操作类代码分享
2014/05/13 Python
Python实现截屏的函数
2015/07/26 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
python实现三壶谜题的示例详解
2020/11/02 Python
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
商场中秋节活动方案
2014/02/07 职场文书
学生打架检讨书
2014/02/14 职场文书
采购经理岗位职责
2014/02/16 职场文书
《藤野先生》教学反思
2014/02/19 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
2014教师研修学习体会
2014/07/08 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL