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爬虫实现教程转换成 PDF 电子书
Feb 19 Python
python3中dict(字典)的使用方法示例
Mar 22 Python
Python 多进程和数据传递的理解
Oct 09 Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 Python
Python的多维空数组赋值方法
Apr 13 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 Python
python批量处理文件或文件夹
Jul 28 Python
python如何从文件读取数据及解析
Sep 19 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
PHP重载基础知识回顾
2020/09/10 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
python实现的各种排序算法代码
2013/03/04 Python
python脚本监控docker容器
2016/04/27 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
Python返回数组/List长度的实例
2018/06/23 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
考博专家推荐信模板
2013/12/02 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
前台接待员岗位职责
2015/04/15 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js