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 subprocess模块学习总结
Mar 13 Python
Python实现的检测网站挂马程序
Nov 30 Python
Python实现求最大公约数及判断素数的方法
May 26 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
python中的&&及||的实现示例
Aug 07 Python
centos7之Python3.74安装教程
Aug 15 Python
python获取网络图片方法及整理过程详解
Dec 20 Python
Python threading.local代码实例及原理解析
Mar 16 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
利用python爬取有道词典的方法
Dec 08 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
python 管理系统实现mysql交互的示例代码
Dec 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
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
eval与window.eval的差别分析
2011/03/17 Javascript
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
vuex的简单使用教程
2018/02/02 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python中动态创建类实例的方法
2017/03/24 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
Python正则表达式如何匹配中文
2020/05/27 Python
python如何变换环境
2020/07/21 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
优质服务口号
2014/06/11 职场文书
校车安全责任书
2014/08/25 职场文书
运动会稿件100字
2014/09/24 职场文书
优秀员工事迹材料
2014/12/20 职场文书
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS