python 图片转文字、语音转文字、文字转语音保存音频并朗读

news2024/11/15 4:43:52

一、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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1946284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用axios请求后端的上传图片接口

安装axios npm install axios 创建input文件上传标签 <input type"file" name"" id"" change"handleChange" /> 使用axios请求后端的图片上传接口 function handleChange(val) {// new FormData() js内置构造函数&#xff0c…

C++入门基础:C++中的常用操作符练习

开头介绍下C语言先&#xff0c;C是一种广泛使用的计算机程序设计语言&#xff0c;起源于20世纪80年代&#xff0c;由比雅尼斯特劳斯特鲁普在贝尔实验室开发。它是C语言的扩展&#xff0c;增加了面向对象编程的特性。C的应用场景广泛&#xff0c;包括系统软件、游戏开发、嵌入式…

【Nginx】Mac电脑安装nginx

使用brew安装nginx brew install nginx查看nginx信息 brew info nginx启动nginx brew services start nginx验证是否启动成功 浏览器输入地址&#xff1a;127.0.0.1:8080 停止服务 brew services stop nginx进入nginx文件目录 cd /opt/homebrew/etc/nginx重启服务 bre…

轻量化YOLOv7系列:结合G-GhostNet | 适配GPU,华为诺亚提出G-Ghost方案升级GhostNet

轻量化YOLOv7系列&#xff1a;结合G-GhostNet | 适配GPU&#xff0c;华为诺亚提出G-Ghost方案升级GhostNet 需要修改的代码models/GGhostRegNet.py代码 创建yaml文件测试是否创建成功 本文提供了改进 YOLOv7注意力系列包含不同的注意力机制以及多种加入方式&#xff0c;在本文…

分布式光伏并网AM5SE-IS防孤岛保护装置介绍——安科瑞 叶西平

产品简介 功能&#xff1a; AM5SE-IS防孤岛保护装置主要适用于35kV、10kV及低压380V光伏发电、燃气发电等新能源并网供电系统。当发生孤岛现象时&#xff0c;可以快速切除并网点&#xff0c;使本站与电网侧快速脱离&#xff0c;保证整个电站和相关维护人员的生命安全。 应用…

【简历】吉林某一本大学:JAVA秋招简历指导,简历通过率比较低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份吉林某一本大学25届计算机专业同学的Java简历。因为学校是一本&#xff0c;所以求职目标以中厂为主。因为学校背景在中厂是正常…

基于Jeecgboot3.6.3的vue3版本前后端分离的流程管理平台

声明一下&#xff1a;因为这个项目license问题无法开源&#xff0c;更多技术支持与服务联系本人或加入我的知识星球提供一些技术服务。 初步完成了基于jeecgboot3.6.3的vue3版本的前后端流程管理平台&#xff0c;基于flowable6.8.1&#xff0c;同时支持bpmn流程设计器与仿钉钉流…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十一章 添加设备树节点

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

利用Django和Ansible实现自动化部署

在软件开发的快节奏世界中&#xff0c;自动化部署是提高开发效率和确保软件质量的关键。Django是一个功能强大的Python Web框架&#xff0c;它允许开发者快速构建安全、可扩展的Web应用。Ansible则是一个简单且强大的自动化工具&#xff0c;它可以用于配置系统、部署软件以及执…

通信原理思科实验四:静态路由项配置实验

实验四 静态路由项配置实验 一&#xff1a;实验内容 二&#xff1a;实验目的 三、实验原理 四、实验步骤 选择三个2811型号的路由器 R1、R2、R3 路由器默认只有两个快速以太网接口&#xff0c;为路由器R1和R3增加快速以太网接口模块NM-1FE-TX&#xff0c;安装后检查路由器的接…

一番赏小程序搭建,线上一番赏市场

一番赏作为一个经久不衰的潮流市场&#xff0c;一直流行于消费者市场中。一番赏商品拥有不同系列&#xff0c;涵盖了热门动漫、漫画、影视等主题&#xff0c;商品包含了手办等周边商品&#xff0c;具有非常大的收藏价值。相比于其他潮玩模式&#xff0c;一番赏的性价比更高&…

Mindspore框架循环神经网络RNN模型实现情感分类|(四)损失函数与优化器

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…

DASCTF-BabyAndroid

一个apk文件 下载下运行不出来 题目有提示 这是截取的信息 第一次写,我就按照大佬的wp思路来 首先我们确定 Host: yuanshen.com 这个信息 jeb打开,搜索 成功锁定到有价值的信息 protected String doInBackground(String[] params) {String contentText params[0];try {…

day20算法

一、算法的相关概念 程序 数据结构 算法 算法是程序设计的灵魂&#xff0c;结构是程序设计的肉体 算法&#xff1a;计算机解决问题的方法或步骤 1.1 算法的特性 1> 确定性&#xff1a;算法中每一条语句都有确定的含义&#xff0c;不能模棱两可 2> 有穷性&#xf…

ModuleNotFoundError: No module named ‘scrapy.utils.reqser‘

在scrapy中使用scrapy-rabbitmq-scheduler会出现报错 ModuleNotFoundError: No module named scrapy.utils.reqser原因是新的版本的scrapy已经摒弃了该方法,但是scrapy-rabbitmq-scheduler 没有及时的更新,所以此时有两种解决方法 方法一.将scrapy回退至旧版本,找到对应的旧版…

提取集合中元素的某个属性组成String类型的集合,并且属性的值要非null,最后拼接该String类型的集合得到字符串

一、String类型的集合拼接得到字符串 方法一&#xff1a; 使用的是Java 8或更高版本&#xff0c;可以使用String.join()方法&#xff0c;这个方法可以非常方便地将一个集合中的元素拼接成一个字符串&#xff0c;并允许你指定分隔符。 import java.util.ArrayList; import j…

认识神经网络【多层感知器数学原理】

文章目录 1、什么是神经网络2、人工神经网络3、多层感知器3.1、输入层3.2、隐藏层3.2.1、隐藏层 13.2.2、隐藏层 2 3.3、输出层3.4、前向传播3.4.1、加权和⭐3.4.2、激活函数 3.5、反向传播3.5.1、计算梯度3.5.2、更新权重和偏置 4、小结 &#x1f343;作者介绍&#xff1a;双非…

微信小程序实现聊天界面,发送功能

.wxml <scroll-view scroll-y"true" style"height: {{windowHeight}}px;"><view wx:for"{{chatList}}" wx:for-index"index" wx:for-item"item" style"padding-top:{{index0?30:0}}rpx"><!-- 左…

Qt基础 | QSqlTableModel 的使用

文章目录 一、QSqlTableModel 的使用1.主窗口MainWindow类定义2.构造函数3.打开数据表3.1 添加 SQLite 数据库驱动、设置数据库名称、打开数据库3.2 数据模型设置、选择模型、自定义代理组件、界面组件与模型数据字段间的数据映射 4.添加、插入与删除记录5.保存与取消修改6.设置…

TikTok Shop全托管上线JIT,并预计10月开放西班牙和爱尔兰站点

据悉&#xff0c;TikTok Shop官方近期在其全托管平台上正式推出了JIT&#xff08;Just-In-Time&#xff09;生产模式&#xff0c;这一创新举措彻底颠覆了传统供应链流程&#xff0c;实现了“先有订单&#xff0c;再精准供货”的高效运营模式。对于广大卖家而言&#xff0c;这无…