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转换字符串为摩尔斯电码的方法
Jul 06 Python
Python中random模块生成随机数详解
Mar 10 Python
Python网络爬虫实例讲解
Apr 28 Python
python-docx文件定位读取过程(尝试替换)
Feb 13 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
python为什么要安装到c盘
Jul 20 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
利用Python将图片中扭曲矩形的复原
Sep 07 Python
python能做哪些生活有趣的事情
Sep 09 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
关于python类SortedList详解
Sep 04 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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时间不正确的解决方法
2008/04/09 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
js实现微博发布小功能
2017/01/12 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
Python探索之pLSA实现代码
2017/10/25 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
行政助理工作职责范本
2014/03/04 职场文书
倡议书的格式写法
2015/04/28 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
解决MySQL报“too many connections“错误
2022/04/19 MySQL