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中的yield与generator
Apr 05 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
Numpy掩码式数组详解
Apr 17 Python
对python制作自己的数据集实例讲解
Dec 12 Python
Python设计模式之建造者模式实例详解
Jan 17 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
python如何提取英语pdf内容并翻译
Mar 03 Python
python代码如何注释
Jun 01 Python
Python-openpyxl表格读取写入的案例详解
Nov 02 Python
python turtle绘图命令及案例
Nov 23 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
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
用python处理MS Word的实例讲解
2018/05/08 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
法学专业个人求职信
2013/09/26 职场文书
期末自我鉴定
2014/01/23 职场文书
《凡卡》教学反思
2014/04/09 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
党的作风建设心得体会
2014/10/22 职场文书
新郎结婚保证书
2015/02/26 职场文书
2015年安全月活动总结
2015/03/26 职场文书
爱护环境建议书
2015/09/14 职场文书
yolov5返回坐标的方法实例
2022/03/17 Python