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 从远程服务器下载日志文件的程序
Feb 10 Python
python的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
Python自动登录126邮箱的方法
Jul 10 Python
python如何在终端里面显示一张图片
Aug 17 Python
python中os模块详解
Oct 14 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
在python里面运用多继承方法详解
Jul 01 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
python中if和elif的区别介绍
Nov 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操作mysqli(示例代码)
2013/10/28 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
微信小程序支付及退款流程详解
2017/11/30 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
python多线程实现TCP服务端
2019/09/03 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
工程总经理工作职责
2013/12/09 职场文书
采购员岗位职责
2015/02/03 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
MySQL基础(二)
2021/04/05 MySQL
python解决12306登录验证码的实现
2021/04/18 Python
Go语言grpc和protobuf
2022/04/13 Golang
java版 联机五子棋游戏
2022/05/04 Java/Android