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 socket编程实例详解
May 27 Python
python构建自定义回调函数详解
Jun 20 Python
详解python中的线程
Feb 10 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
Python logging模块用法示例
Aug 28 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
python超时重新请求解决方案
Oct 21 Python
零基础学Python之前需要学c语言吗
Jul 21 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 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
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
搭建vue开发环境
2018/07/19 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
python实现单链表的方法示例
2019/09/03 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
Python 里最强的地图绘制神器
2021/03/01 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
华三通信H3C面试题
2015/05/15 面试题
法雷奥SQA(electric)面试问题
2016/01/23 面试题
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
节约用水标语
2014/06/11 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL
Golang map映射的用法
2022/04/22 Golang