一、python图片转文字
1、引言
pytesseract是基于Python的OCR工具, 底层使用的是Google的Tesseract-OCR 引擎,支持识别图片中的文字,支持jpeg, png, gif, bmp, tiff等图片格式
2、环境配置
- python3.6+
- PIL库
- 安装Google Tesseract OCR
3、安装pytesseract
使用pip 或 pip3
pip install pytesseract==0.3.10
pip install pillow==10.4.0
4、安装Google Tesseract OCR
Tesseract是一个开源文本识别 (OCR)引擎,是目前公认最优秀、最精确的开源OCR系统,用于识别图片中的文字并将其转换为可编辑的文本
Tesseract OCR github地址:https://github.com/tesseract-ocr/tesseract
Windows Tesseract下载地址:https://digi.bib.uni-mannheim.de/tesseract/
Mac和Linux安装方法参考:https://tesseract-ocr.github.io/tessdoc/Installation.html
安装完成后
添加PATH环境变量,可方便的执行tesseract命令
D:\Development\Tesseract-OCR ## 自己的安装路径
添加TESSDATA_PREFIX变量名,将语言字库文件夹添加到变量中
D:\Development\Tesseract-OCR\tessdata ## 自己的安装路径
3、使用pytesseract转换图片
import pytesseract
from PIL import Image
from PIL import ImageEnhance
ret = {'code': 100, 'msg': None, 'data': None}
class TextExtraction(APIView):
# 图片转文字
def get(self, request):
# 加载图像
image = Image.open('\media\image\\2.jpg')
# 增强图片对比度
enhancer = ImageEnhance.Contrast(image)
img_contrast = enhancer.enhance(2.0)
text = pytesseract.image_to_string(img_contrast, lang='chi_sim')
print(text)
ret['data'] = text
return Response(ret)
if __name__ == '__main__':
te = TextExtraction()
te.as_view()
二、语音转文字
使用百度语音识别Aip
1、注册登录百度AI开放平台
登录百度AI开放平台,在控制台—人工智能–语音技术
获得APPID、API KEY、SECRET KEY
2、安装百度Aip
pip install Baidu-Aip==4.16.13
3、使用百度Aip转语音
from aip import AipSpeech
ret = {'code': 100, 'msg': None, 'data': None}
class SpeechRecognition(APIView):
# 语音转文字 使用百度语音识别
def post(self, request):
# 百度语音识别
try:
# 设置 APPID、API Key 和 Secret Key
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
# 初始化 AipSpeech 对象
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 设置音频文件的位置
audio_file = '\media\\audio\\16k.wav'
# 读取音频文件
with open(audio_file, 'rb') as fp:
audio_data = fp.read()
# 识别音频文件
res = client.asr(audio_data, 'wav', 16000, {
'dev_pid': 1536,
})
print(res)
if res['err_no'] == 0:
print(res['result'][0])
ret['data'] = res['result'][0]
else:
ret['code'] = 101
ret['msg'] = res['err_msg']
except Exception as e:
ret['code'] = 102
ret['msg'] = e
return Response(ret)
三、speech语音播放
在python中我们可以使用speech模块让计算机进行语音输出
1、安装speech
pip install speech
2、因为speech模块最早是在python 2.x中开发的,因此在python 3.x中并不能够直接使用,我们需要打开它安装后的原始文件,并进行以下调整即可。
speech.py打开后进行定位错误位置并更改,每个人的文件位置可能有差异。因为虚拟环境的创建一般不同,Pycharm中一般是相同的,可以自行查找。
接着我们按部就班地更改以下三个位置地源文件。
原始文件第157行,print prompt应该改为print(prompt)。
原始文件第59行,thread应该改为_thread。
拖动文件到最后,将263行thread应该为_thread
3、语音输出
import speech
def speach():
# 文字转语音
speech.say("从前,有一座美丽的大森林,森林里住着许多小动物,它们每天过着无忧无虑的生活。")
speech.say("Don't ask me .I have no idea why bug exist again")
四、文字转音频并保存输出
Pyttsx是一个支持Mac OS X、Windows和Linux上常见的文本到语音引擎的Python包。
1、安装pyttsx3
pip install pyttsx3
2、保存音频语音输出
import pyttsx3
def pyttsx3(text, language, rate, volume, filename, sayit=0):
# 参数说明: 六个重要参数,阅读的文字,语言(0-英文/1-中文),语速,音量(0-1),保存的文件名(以.mp3收尾),是否发言(0否1是)
engine = pyttsx3.init() # 初始化语音引擎
engine.setProperty('rate', rate) # 设置语速
# 速度调试结果:50戏剧化的慢,200正常,350用心听小说,500敷衍了事
engine.setProperty('volume', volume) # 设置音量
voices = engine.getProperty('voices') # 获取当前语音的详细信息
if int(language) == 0:
engine.setProperty('voice', voices[0].id) # 设置第一个语音合成器 #改变索引,改变声音。0中文,1英文(只有这两个选择)
elif int(language) == 1:
engine.setProperty('voice', voices[1].id)
if int(sayit) == 1:
engine.say(text) # pyttsx3->将结果念出来
elif int(sayit) == 0:
pass
engine.save_to_file(text, filename) # 保存音频文件
print(filename, "保存成功")
engine.runAndWait() # pyttsx3结束语句(必须加)
engine.stop() # pyttsx3结束语句(必须加)
if __name__ == '__main__':
text = """
从前,有一座美丽的大森林,森林里住着许多小动物,它们每天过着无忧无虑的生活。有一天,森林里来了几个伐木工人,
他们拿着斧头和锯子,把一棵棵树给砍倒了。几天下来,裸露的土地不断扩大,森林里的树木不断减少。大象看了之后非常生气,
他和几个好朋友决定把这些伐木工人抓起来,送到动物法庭上。第二天,大象他们就把伐木工人给抓了起来,送到了动物法庭上。
许多旁观者都纷纷议论起来,猴法官说:“安静,安静,大象你们把这些人抓来是怎么回事?”大象说:“这些人乱砍树木,破坏我们的家园。
大象的好朋友小猴说:“对呀,他们把树给砍光了,我们就不能在树上荡秋千了。”小鸟也说:”猴法官,要是没有树木,我们就不能筑巢了。
长颈鹿说:“要是没有树木,我们就吃不到树叶了,我们会饿死的。”听到这里,猴法官对伐木工人说:“你们乱砍树木是不对的,
没有了树木,我们动物就无法生存,同样也会给你们人类带来灾难的。”听了这些话,伐木工人觉得很惭愧,知道自己错了,
他们保证以后不再乱砍树木破坏森林了,还在森林入口立了一块告示牌,上面写着:“保护森林,人人有责。”从此以后,人们不再破坏森林,
动物和人类和平相处,大家都过着幸福、快乐的生活。
"""
pyttsx3_debug(text=text, language=0, rate=200, volume=0.9, filename="\media\\audio\ptttsx3中文测试.mp3", sayit=1)