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. Java基础(补充)

    为什么 Java 中只有值传递? 开始之前,我们先来搞懂下面这两个概念: 形参&实参 值传递&引用传递 形参&实参 方法的定义可能会用到 参数(有参的方法),参数在程序语言中分 ...

  2. 『忘了再学』Shell基础 — 5、Bash基本功能(命令的别名和常用快捷键)

    目录 1.给命令设置别名 (1)设置别名的命令格式 (2)命令别名永久生效 (3)别名的优先级 2.Bash常用快捷键 1.给命令设置别名 Linux系统的命令别名我们之前已经说过了,这里再过一边. ...

  3. 迷宫问题,打印所有路径,深度搜索,dfs

    #include<iostream> using namespace std; int maze [5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0 ...

  4. java三种适配器模式详解与代码实现

    zhaoyu   取消关注   2 人赞同了该文章 1. 适配器模式定义: 适配器模式是一种结构型设计模式,通过一个适配器类把具有不同方法功能的两个类A和B组合起来,使得这个适配器类同时具有两个类的不 ...

  5. HashMap 链表和红黑树的转换

    HashMap在jdk1.8之后引入了红黑树的概念,表示若桶中链表元素超过8时,会自动转化成红黑树:若桶中元素小于等于6时,树结构还原成链表形式. 原因: 红黑树的平均查找长度是log(n),长度为8 ...

  6. 【算法】两个list合并

    转载博客地址 http://blog.sina.com.cn/s/blog_5da93c8f0101fdrp.html 有两个ArrayList,分别为list1和list2,分析这两个list后生成 ...

  7. super.getClass()方法调用?

    下面程序的输出结果是多少? import java.util.Date; public class Test extends Date{ public static void main(String[ ...

  8. Redis 常见的性能问题都有哪些?如何解决?

    Redis 常见的性能问题都有哪些?如何解决? Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最 ...

  9. spring-boot关于spring全注解IOC

    什么是IOC容器: Spring IoC 容器是一个管理Bean 的容器,在S pring 的定义中,它要求所有的IoC 容器都需要实现接口BeanFactory ,它是一个顶级容器接口 IoC 是一 ...

  10. Hashtable 与 HashMap 有什么不同之处?

    这两个类有许多不同的地方,下面列出了一部分: a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的. b)Hashtable 是同步的,比较慢,但 HashMap ...