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之Python文档
Oct 10 Python
pygame学习笔记(5):游戏精灵
Apr 15 Python
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
给Python入门者的一些编程建议
Jun 15 Python
Django中的“惰性翻译”方法的相关使用
Jul 27 Python
Python基于贪心算法解决背包问题示例
Nov 27 Python
Django自定义过滤器定义与用法示例
Mar 22 Python
python实现爬取图书封面
Jul 05 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
Python matplotlib学习笔记之坐标轴范围
Jun 28 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
Python对wav文件的重采样实例
Feb 25 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
数字转英文
2006/12/06 PHP
为你总结一些php信息函数
2015/10/21 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
js获取url参数的使用扩展实例
2007/12/29 Javascript
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
JavaScript判断变量是否为空的自定义函数分享
2015/01/31 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
Python字典操作简明总结
2015/04/13 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
秋季运动会稿件
2014/01/30 职场文书
酒店节能减排方案
2014/05/26 职场文书
子女赡养老人协议书
2016/03/23 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL