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中getattr函数和hasattr函数作用详解
Jun 14 Python
Python中表示字符串的三种方法
Sep 06 Python
高效使用Python字典的清单
Apr 04 Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 Python
解决Pycharm出现的部分快捷键无效问题
Oct 22 Python
python反编译学习之字节码详解
May 19 Python
Python pip 安装与使用(安装、更新、删除)
Oct 06 Python
详解python中eval函数的作用
Oct 22 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
Python timer定时器两种常用方法解析
Jan 20 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 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
PHP实现的功能是显示8条基色色带
2006/10/09 PHP
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
JS backgroundImage控制
2009/05/19 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
layui复选框的全选与取消实现方法
2019/09/02 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
python九九乘法表的实例
2017/09/26 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
什么是跨站脚本攻击
2014/12/11 面试题
暑期实习鉴定
2013/12/16 职场文书
给女朋友的道歉信
2014/01/10 职场文书
护士辞职信范文
2014/01/19 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
小学班主任个人总结
2015/03/03 职场文书
军事博物馆观后感
2015/06/05 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android