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抓取最新博客内容并生成Rss
May 17 Python
Python计算一个文件里字数的方法
Jun 15 Python
Linux下将Python的Django项目部署到Apache服务器
Dec 24 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
python技能之数据导出excel的实例代码
Aug 11 Python
pyhton列表转换为数组的实例
Apr 04 Python
python去除文件中重复的行实例
Jun 29 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 Python
使用Python实现音频双通道分离
Dec 25 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 Python
详解Python类和对象内容
Jun 22 Python
Python使用永中文档转换服务
May 06 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
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
用Python编写web API的教程
2015/04/30 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
Python Socket传输文件示例
2017/01/16 Python
python2.7安装图文教程
2018/03/13 Python
python线程信号量semaphore使用解析
2019/11/30 Python
Python中logging日志记录到文件及自动分割的操作代码
2020/08/05 Python
Python 如何查找特定类型文件
2020/08/17 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
致短跑运动员广播稿
2014/01/09 职场文书
高三家长寄语
2014/04/03 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
出差报告怎么写
2014/11/06 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
如何使用flask将模型部署为服务
2021/05/13 Python