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中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
详解使用python crontab设置linux定时任务
Dec 08 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
Puppeteer使用示例详解
Jun 20 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
python内置模块collections知识点总结
Dec 19 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
Mar 30 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
python获取linux系统信息的三种方法
Oct 14 Python
Django多个app urls配置代码实例
Nov 26 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 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/08/18 PHP
php 获取远程网页内容的函数
2009/09/08 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
php生成curl命令行的方法
2015/12/14 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
动态为事件添加js代码示例
2009/02/15 Javascript
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python PyQt5标准对话框用法示例
2017/08/23 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
Python笔试面试题小结
2019/09/07 Python
tornado+celery的简单使用详解
2019/12/21 Python
关于python中导入文件到list的问题
2020/10/31 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
如何写出好的Java代码
2014/04/25 面试题
销售工作岗位职责
2013/12/24 职场文书
在校硕士自我鉴定
2014/01/23 职场文书
公益广告标语
2014/06/19 职场文书
安全责任书怎么写
2014/07/28 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书