python 利用百度API识别图片文字(多线程版)


Posted in Python onDecember 14, 2020
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Jun 12 09:37:38 2018
利用百度api实现图片文本识别
@author: XnCSD
"""

import glob
from os import path
import os
from aip import AipOcr
from PIL import Image
from queue import Queue
import threading
import datetime

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):
  """利用百度api识别文本,并保存提取的文字
  picfile:  图片文件名
  outfile:  输出文件
  """
  while not ts_queue.empty():
    picfile = ts_queue.get()
    filename = path.basename(picfile)
    outfile = 'D:\Study\pythonProject\scrapy\IpProxy\port_zidian.txt'
    APP_ID = '' # 刚才获取的 ID,下同
    API_KEY = ''
    SECRECT_KEY = ''
    client = AipOcr(APP_ID, API_KEY, SECRECT_KEY)

    i = open(picfile, 'rb')
    img = i.read()
    print("正在识别图片:\t" + filename)
    message = client.basicGeneral(img) # 通用文字识别,每天 50 000 次免费
    # message = client.basicAccurate(img)  # 通用文字高精度识别,每天 800 次免费
    #print("识别成功!")
    i.close()
    try:
      filename1 = filename.split('.')[0]
      filename1 = ''.join(filename1)
      with open(outfile, 'a+') as fo:
        for text in message.get('words_result'):
          fo.writelines('\'' + filename1 + '\'' + ':' + text.get('words') + ',')
          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\端口\*"):
      convertimg(picfile, outdir)
    print("图片识别...")
    for picfile in glob.glob("tmp/*"):
      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 = 'tmp'
  s = duqu_tupian(t)
  threads = []
  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))

速度快,准确率99百分,100里必回出错一张。

实测,识别1500张图片,还是小图片验证码大小,高清,用时30秒,不能识别150张,出错14张左右。  但总体快,不会出现乱码啥的。

python 利用百度API识别图片文字(多线程版)

以上就是python 利用百度API识别图片文字(多线程版)的详细内容,更多关于python 识别图片文字的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
Python getopt模块处理命令行选项实例
May 13 Python
Python3使用requests发闪存的方法
May 11 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
python统计多维数组的行数和列数实例
Jun 23 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
python处理大日志文件
Jul 23 Python
PyTorch的SoftMax交叉熵损失和梯度用法
Jan 15 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 Python
python自动从arxiv下载paper的示例代码
Dec 05 Python
安装pytorch时报sslerror错误的解决方案
May 17 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
全面介绍python中很常用的单元测试框架unitest
Dec 14 #Python
You might like
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
PHP 进程锁定问题分析研究
2009/11/24 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
YII实现分页的方法
2014/07/09 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
简单介绍Python中的decode()方法的使用
2015/05/18 Python
jupyter安装小结
2016/03/13 Python
pycharm远程调试openstack代码
2017/11/21 Python
Python实现Kmeans聚类算法
2020/06/10 Python
python文件操作之批量修改文件后缀名的方法
2018/08/10 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
Linux中如何用命令创建目录
2015/01/12 面试题
怎样写好自我评价呢?
2014/02/16 职场文书
大学迎新生标语
2014/10/06 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
建议书格式
2015/02/04 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电