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 31 Python
wxPython事件驱动实例详解
Sep 28 Python
网站渗透常用Python小脚本查询同ip网站
May 08 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
解决python多行注释引发缩进错误的问题
Aug 23 Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 Python
Python txt文件常用读写操作代码实例
Aug 03 Python
Python Web项目Cherrypy使用方法镜像
Nov 05 Python
基于 Python 实践感知器分类算法
Jan 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
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
js的回调函数详解
2015/01/05 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
vue小白入门教程
2018/04/02 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
什么是抽象
2015/12/13 面试题
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
幼师中班个人总结
2015/02/12 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
走进毛泽东观后感
2015/06/04 职场文书
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS
python实现腾讯滑块验证码识别
2021/04/27 Python
i7 6700处理器相当于i5几代
2022/04/19 数码科技