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 时间处理datetime实例
Sep 06 Python
Python内建数据结构详解
Feb 03 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
python如何使用代码运行助手
Jul 03 Python
Django admin组件的使用
Oct 24 Python
python UDF 实现对csv批量md5加密操作
Jan 01 Python
Opencv实现二维直方图的计算及绘制
Jul 21 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 验证图片生成函数
2009/05/21 PHP
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
php简单防盗链实现方法
2015/07/29 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
深入浅析Python传值与传址
2018/07/10 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
python实现XML解析的方法解析
2019/11/16 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
Python小白垃圾回收机制入门
2020/06/09 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
比较基础的php面试题及答案-填空题
2014/04/26 面试题
团员的自我评价
2013/12/01 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
大学军训口号大全
2015/12/24 职场文书
旅游安全责任协议书
2016/03/22 职场文书