1 import os,glob
2 def photo_compression(original_imgage,tmp_image_path):
3 '''图片备份、压缩;param original_imgage:原始图片路径;param tmp_imgage_path:临时图片路径,备份路径;return'''
4 from PIL import Image
5 img = Image.open(original_imgage)
6 width,height = img.size
7 while (width*height>4000000):#该数值压缩后的图片大约200多k
8 width = width//2
9 height = height//2
10 e_img = img.resize((width,height),Image.BILINEAR)
11 save_path = os.path.join(tmp_image_path,os.path.basename(original_imgage))
12 e_img.save(save_path)
13 return save_path
14
15 def ocr(original_image):
16 '''使用百度OCR进行文字识别,支持JPG、JPEG、PNG、BMP格式;param original_image:待识别图片;return'''
17 from aip import AipOcr
18 filename = os.path.basename(original_image)
19 #输入自己的百度ai账号ID密码:参考链接:https://m.toutiaocdn.com/i6704242394566492684/
20 APP_ID = '******'
21 API_KEY = '*******'
22 SECRECT_KEY = '*********'
23
24 client = AipOcr(APP_ID,API_KEY,SECRECT_KEY)
25
26 with open(original_image,'rb') as picfile_read:
27 img = picfile_read.read()
28 print('正在识别图片:{0}......'.format(filename))
29 try:
30 result = client.basicGeneral(img)#通用文字识别,50000次/天免费
31 except:
32 result = client.basicAccurate(img)#通用文字识别(高精度版),500次/天免费
33 return result
34
35 def run_ocr(original_image,tmp_image_path,result_file_path='identify_results.txt'):
36 '''主函数 批量执行图片文本识别,结果存储;original_image:原始图片;tmp_image_path:临时图片;result_file_path:识别文字存储文件;return'''
37
38 if os.path.exists(result_file_path):#判断是否存在历史识别结果,若存在则删除
39 os.remove(result_file_path)
40 if not os.path.exists(tmp_image_path):#判断临时图片路径是否存在,若不存在则创建
41 os.mkdir(tmp_image_path)
42 tmp_file_path = []#临时文件路径列表
43 for picfile in glob.glob(original_image):#glob.glob的参数是一个只含有方括号、问号、正斜线的正则表达式
44 tmp_file = photo_compression(picfile,tmp_image_path)
45 tmp_file_path.append(tmp_file)
46 for picfile in tmp_file_path:#遍历所有文件,进行OCR识别 结果存储
47 result = ocr(picfile)
48 lines = [text.get('words') + '\n' for text in result.get('words_result')]
49 # lines = [text.get('words').encode('utf-8')+'\n' for text in result.get('words_result')]
50
51 with open(result_file_path,'a+',encoding='utf-8') as fo:
52 fo.writelines("="*100+'\n')
53 fo.writelines("【识别图片】:{0} \n".format(os.path.basename(picfile)))
54 fo.writelines("【文本内容】: \n")
55 fo.writelines(lines)
56 os.remove(picfile)
57
58 if __name__ == '__main__':
59 tmp_image_path = os.getcwd()+'\\tmp'
60 original_image = os.getcwd() + '\\*.png'
61 run_ocr(original_image,tmp_image_path)

Python识别图片中的文字的更多相关文章

  1. 使用Python进行OCR -- 识别图片中的文字

    工具 Tesseract pytesseract tesserocr 朋友需要一个工具,将图片中的文字提取出来.我帮他在网上找了一些OCR的应用,都不好用.所以准备自己研究,写一个Web APP供他使 ...

  2. Python通过百度Ai识别图片中的文字

    版本:python3.7 工作中有需要识别图片中的汗字,查看了半天大神们的博客,但没找到完全可以用的源码,经过自己的实践,以下源码可以实现: 创建应用 首先你需要登录百度AI,选择文字识别,创建一个应 ...

  3. C# 扫描识别图片中的文字(.NET Framework)

    环境配置 本文以C#及VB.NET代码为例,介绍如何扫描并读取图片中的文字. 本次程序环境如下: Visual Studio版本要求不低于2017 图片扫描工具:Spire.OCR for .NET ...

  4. 在Mac上 python中使用tesseract OCR (Pytesser) 识别图片中的文字

    仓库地址:https://github.com/RobinDavid/Pytesser brew install tesseract sudo pip install opencv-python 安装 ...

  5. python tesseract 识别图片中的文字的乱码问题(ubuntu系统下)

    OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程. 首先,需要安装 tesseract-ocr(tesseract O ...

  6. python 识别图片中的汉字

    我们就识别上面的汉字. 安装软件tesseract和python库 https://www.cnblogs.com/sea-stream/p/10961580.html 然后新建一个文件夹test,把 ...

  7. python识别图片中的代码。

    在看并发编程网的时候,有些示例代码是以图片的形式出现的,要是此时自己想复制下来的话,只能对着图片敲了,很不爽,于是搜了一下识别图片的网站,有! 把图片上传上去解析,下来txt文本,打开一看,大部分能解 ...

  8. Windows下 训练Tesseract实现识别图片中的文字

    介绍 Tesseract是一个基于Apache2.0协议开源的跨平台ocr引擎,支持多种语言的识别,在Windows和Linux上都有良好的支持. 源代码在这: 源码地址 有一个编译打包好的Windo ...

  9. python实战===用python识别图片中的中文

    需要安装的模块 PIL pytesseract 需要下载的工具: http://download.csdn.net/download/bo_mask/10196285 因为之前百度云的链接总失效,所以 ...

随机推荐

  1. EMQX_AUTH_USERNAME 使用

    emqx_auth_username 它通过比对每个终端的接入的 username 和 password 与 EMQ X 中存储的是否一致来实现终端接入的控制.其功能逻辑如下: emqx_auth_u ...

  2. java中的正则表达式And Pattern And Macher

    在哪里?? java.util.regex包下有两个用于正则表达式的类, 一个是Matcher类, 另一个Pattern 简单例子 public class RegexLeaning { public ...

  3. Redis 集群如何选择数据库?

    Redis 集群目前无法做数据库选择,默认在 0 数据库.

  4. 写一段代码在遍历 ArrayList 时移除一个元素?

    该问题的关键在于面试者使用的是 ArrayList 的 remove() 还是 Iterator 的 remove()方法.这有一段示例代码,是使用正确的方式来实现在遍历的过程中移 除元素,而不会出现 ...

  5. centos云服务器配置redis外网可访问

    找到这行,注释 bind 127.0.0.1 #bind 127.0.0.1 找到这行,修改 protected-mode yes protected-mode no 重启服务 ./redis-ser ...

  6. linux命令手册

    常⻅系统服务命令 常用命令 作用 chkconfig --list 列出系统服务 service <服务名> status 查看某个服务 service <服务名> start ...

  7. int 越界处理

    在程序运行中,如果运算结果太大超出了所定义的类型,那么可能会影响整个程序的运行结果,甚至是程序出错. 因此,在编写程序时,加入越界处理就显得一起重要了. 用整型 int 来举个例子吧,int型占四个字 ...

  8. css写作建议和性能优化小结

    1.前言 还有几天就到国庆中秋了,快要放假了,先祝大家节日快乐!之前写过js的写作建议和技巧,那么今天就来聊聊css吧!说到css,每一个网页都离不开css,但是对于css,很多开发者的想法就是,cs ...

  9. scrapy框架爬取国际庄2011-2022的天气情况

    目标网站:http://www.tianqihoubao.com/lishi/ 一.创建项目+初始化爬虫文件: scrapy startpoject tianqihoubaocd tianqihoub ...

  10. mapreduce分区

    本次分区是采用项目垃圾分类的csv文件,按照小于4的分为一个文件,大于等于4的分为一个文件 源代码: PartitionMapper.java: package cn.idcast.partition ...