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中处理时间的几种方法小结
Apr 09 Python
Python简单调用MySQL存储过程并获得返回值的方法
Jul 20 Python
基于python爬虫数据处理(详解)
Jun 10 Python
Mac 上切换Python多版本
Jun 17 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
Selenium 模拟浏览器动态加载页面的实现方法
May 16 Python
对python中的argv和argc使用详解
Dec 15 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
Python中查看变量的类型内存地址所占字节的大小
Jun 26 Python
Python如何使用OS模块调用cmd
Feb 27 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
php cookie用户登录的详解及实例代码
2017/01/03 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
php实现登录页面的简单实例
2019/09/29 PHP
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
2016/12/22 Javascript
JavaScript字符串对象
2017/01/14 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
Python中logging模块的用法实例
2014/09/29 Python
python最长回文串算法
2018/06/04 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
演讲稿格式
2014/04/30 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
超市食品安全承诺书
2015/04/29 职场文书
工程服务质量承诺书
2015/04/29 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书