广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python语音识别
  • 883
分享到

python语音识别

语音识别python 2023-01-30 22:01:40 883人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

语音识别技术,也被称为自动语音识别,目标是以电脑自动将人类的语音内容转换为相应的文字。应用包括语音拨号、语音导航、室内设备控制、语音文档检索、简单的听写数据录入等。一、功能概述实现将语音转换为文字,调取第3方接口。比如百度ai,图灵机器人,

语音识别技术,也被称为自动语音识别,目标是以电脑自动将人类的语音内容转换为相应的文字。应用包括语音拨号、语音导航、室内设备控制、语音文档检索、简单的听写数据录入等。


一、功能概述

实现将语音转换为文字,调取第3方接口。比如百度ai,图灵机器人,得到想要的结果。


二、软件环境

操作系统:win10

语言:python 版本:3.5.4

Python库:baidu-aip


三、原理概述

利用windows自带的录音机,基于百度api进行wav格式的音频转文本。根据文本,调取图灵机器人接口,得到结果。


四、部署工作

1 登录百度ai,链接为:

https://ai.baidu.com/

登录账户(如果你有百度,可以直接登录,否则需要注册)

点击右边的控制台->直接进入

blob.png

进入之后,拖动进度条到中间。找到已开通服务,点击百度语言。

blob.png

点击创建应用

blob.png

应用名字,可以自定义。我写的是语音识别,默认就已经开通了语音识别和语音合成。

这就够了,所以接口选择,不用再选了。

语音包名,选择不需要。因为接下来要展示的是用Python代码实现的,不是AndroidiOS

应用描述,这里一定要好好写啊。不然不通过的!

blob.png

点击立即创建,瞬间就创建成功了。我估摸着,我写的描述太吊了。百度不得不同意哈!

点击返回列表,在Secret Key的下面,点击显示。

复制AppID,API Key,Secret Key 这3个信息到一个文件里面。接下来的Python代码会用到!

blob.png

点击左侧的技术文档

blob.png

点击左边的语言合成->SDK文档->Python SDK

blob.png

文本不能太长
blob.png

目录结构

blob.png

支持2x和3x

blob.png

打开windows的cmd窗口,输入命令 pip3 install baidu-aip

我已经安装好了,效果如下:

blob.png


blob.png


打开PyCharm,新建一个目录ai

创建文件audio_text.py

代码如下:

import time
from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

将前面提到的AppID,API Key,Secret Key,复制到对应位置。

上面的id和KEY,后5位我改了,复制我的也没有用!


继续看文档,下面的代码可以把文件变成语言

blob.png

代码如下:

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

result  = client.synthesis('你好百度', 'zh', 1, {
    'vol': 5,
})

# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
    with open('auido.mp3', 'wb') as f:
        f.write(result)

执行代码,会看到当前目录出现了一个auido.mp3文件,打开播放器,听一下声音。

我用QQ影音,打开正常

blob.png

看参数

blob.png

看上面的代码,可以发现

'你好百度' 对于参数text

'zh' 表示中文

1 表示客户度类型

result  = client.synthesis('你好百度', 'zh', 1, {
    'vol': 5,
})

再来加几个参数

result  = client.synthesis('你好百度', 'zh', 1, {
        'spd':5,  # 语速-中等
        'vol': 5,  # 音量-中等
        'pit':5,  # 音调-中等
        'per':0  # 发音人-女声
    })

per的参数,如果是0,表示女声。我比较喜欢听女声,不要问我为什么!

语速,音量,音调,大家可以自行调节,声音会有相应的变化。


假设一段文件,有1000个子,可以使用split()方法切割,就可以得到多段语言。

接下来,需要进行语音识别,看文档

点击左边的百度语言->语音识别->Python SDK

blob.png

支持的语言格式有3种。分别是pcm,wav,amr

建议使用pcm,因为它比较好实现。而另外2种语言格式,有非常高的要求,只有专业级别的设备才能录制。它才能达到百度的要求。

blob.png

使用windows录音工具,保存的是wav格式,那么就需要将wav转换为pcm格式。

下面介绍一个工具FFmpeg,百度搜索就能找到。

打开网址:

Http://ffmpeg.org/download.html

点击windows图标,点击Builds

blob.png

我的电脑是64位系统,选择64位,一定要选择Shared,最后点击下载。

blob.png

下载完成后,将包解压到你常用的安装目录,我的安装目录是D:\Program Files (x86)

进入目录

D:\Program Files (x86)\ffmpeg-20180518-16b4f97-win64-shared\bin

里面有一个ffmpeg.exe,后面的Python代码会调用它。

添加环境变量

打开我的电脑->高级系统设置->环境变量->编辑

blob.png

点击右边的新建,输入路径D:\Program Files (x86)\ffmpeg-20180518-16b4f97-win64-shared\bin

blob.png

之后,一路确定...

关闭cmd窗口,再次打开cmd窗口,输入命令 ffmpeg

出现下面橘黄色提示,就表示环境变量添加成功了。

blob.png

这个时候,一定要关闭Pycharm,否则Pycharm识别不到。

再次开启Pycharm


Pycharm用法如下:

ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm

第一个%s 表示原始文件

第二个%s 也是原始文件,它加了后缀.pcm


继续看文档,语言时长,不要超过60s

blob.png

请求时,要指定一个pcm格式的文件

blob.png

看参数,主要用到的是rate和1536

上图的16000表示采样率

1536表示能识别中文和英文,它的容错率比较高

1537必须是标准的普通话,带点地方口音是不行的。

所以建议使用1536

blob.png

打开win10自带的录音机,录制一段声音,比如:你叫什么呀

一定要带一个呀字,下面的代码执行会输出10个结果,否则只有一个!

注意:笔记本的麦克风在摄像头的2边,所以录制的时候,一定要对着摄像头!

blob.png

默认为m4a格式的,重命名为whatyouname.m4a,将文件放入ai目录

新增文件a_t.py,内容如下:

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 读取文件
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 识别本地文件
a = client.asr(get_file_content('whatyouname.m4a'), 'pcm', 16000, {
    'dev_pid': 1536,
})
print(a)

注意上面的id和key。文件名为whatyouname.wav

执行文件,输出:

{'sn': '7436726851526824321', 'err_no': 3301, 'err_msg': 'speech quality error.'}


返回错误'err_no': 3301

看文档

blob.png

找下面对应的3301,表示声音不清晰!

blob.png

再仔细用播放器,播放一下刚才的声音,挺清晰的呀!

这里报3301不是因为声音不清晰,而是格式不支持。

使用os模块调用ffmpeg实现转码

代码如下:

import os
from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)


# 读取文件
def get_file_content(filePath):
    cmd_str = "ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm"%(filePath,filePath)
    os.system(cmd_str)  # 调用系统命令ffmpeg,传入音频文件名即可
    with open(filePath + ".pcm", 'rb') as fp:
        return fp.read()

# 识别本地文件
a = client.asr(get_file_content('whatyouname.m4a'), 'pcm', 16000, {
    'dev_pid': 1536,
})
print(a)

执行输出,效果如下:

blob.png

上面红色文件,不是报错,而是转码过程

主要看err_msg是什么,这里显示success,表示成功。

在ai目录下,会多出一个文件whatyouname.m4a.pcm。这个文件才是刚才真正发给百度的语言文件

返回的结果是一个字典,第一个结果,一般是最正确的。取第一个,就可以了!


接下来,就需要从字典取值。字典取值,不要用以下这种方法:

print(a['result'])

为什么呢?如果key不存在,会直接报错!毕竟报错,是要崩溃的...

所以建议使用get方法,将最后一行的print(a),修改为以下内容:

完整代码,我就不贴了。

if a.get('result'):
    print(a.get('result')[0])

执行输出:blob.png

从结果上来看就只有一个了。



jieba分词,完全开源,有集成的python库,简单易用。 

jieba分词是基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG),动态规划查找最大概率路径, 找出基于词频的最大切分组合

安装jieba

在安装有python3 和 pip 的机子上,安装jieba库很简单,使用pip即可:pip3 install jieba

由于包很大,默认使用国外更新源比较慢,下面使用国内更新源安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba

下图表示已经安装好了

blob.png


新建一个文件jieba_test.py,代码如下:

import jieba
a = jieba.cut('你叫什么名字')
print(a)

执行输出:

blob.png

它是一个生成器对象,转换为列表

import jieba
a = list(jieba.cut('你叫什么名字'))
print(a)

执行输出:

blob.png

换一句话

import jieba
a = list(jieba.cut('我想听周杰伦的夜曲'))
print(a)

执行输出:

blob.png

发现,断句不对。应该是下面的结果

['我想听', '周杰伦', '的', '夜曲']

新建一个Words.py文件,用来存放关键字,内容如下:

KEY_WORDS = ["我想听",
             "我要听",
             "播放",
             "名字是什么",
             "名字叫什么",
             "你叫什么名字"
             ]

导入words模块,也就是上面写的文件

import jieba
import words

for i in words.KEY_WORDS:  # 遍历关键字
    jieba.add_word(i)  # 在程序中动态修改词典

a = list(jieba.cut('我想听周杰伦的夜曲'))
print(a)

执行输出:

blob.png

除了使用jieba.cut以外,还有一个方法jieba.cut_for_search

该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细



图灵机器人是以语义技术为核心驱动力的人工智能公司,致力于“让机器理解世界”,产品服务包括机器人开放平台、机器人OS和场景方案。

官方地址为:

http://www.tuling123.com/

首先得注册一个账号,或者使用第3方登录,都可以。

登录之后,点击创建机器人

机器人名称,可以是自己定义的名字

选择网站->教育学习->其他 输入简介

blob.png

创建成功之后,点击终端设置,拉到最后。

可以看到api接入,下面有一个apikey,待会会用到

blob.png

右侧有一个窗口,可以和机器人聊天

blob.png

点击api使用文档,初学者,先看WEB API V1.0的

blob.png


新建一个文件tuling.py,内容如下:

import JSON
import requests

urls = 'http://www.tuling123.com/openapi/api'  # 请求地址
data_str = {
        "key":"6a944508fd5c4d499b9991862ea12345", # 你的apikey
        "info":'今天天气怎么样',  # 请求内容
        "userid":123,  # 开发者给自己的用户分配的唯一标志
    }
a = requests.post(urls,data_str)  # 必须使用post请求
content = (a._content).decode('utf-8')  # 获取返回结果_content属性,并解码
s = json.loads(content)  # 反序列化
print(s)

key是你创建机器人的apikey,上面的代码,后5位我改了,复制没用的!

执行代码输出:

{'text': '请问你想查询哪个城市', 'code': 100000}

修改info为 北京

再次执行,输出:

{'code': 100000, 'text': '北京:周日 05月27日,多云 西南风3-4级,最低气温17度,最高气温32度'}


参数解释:

userid 表示上下文标记,用来区分用户。举个例子,如果我更改了userid,那么我问"今天天气怎么样"

它会返回给我"你想查询哪个城市"。而我不改userid,它会直接返回天气结果。

上下文,好像只能保留上一次,我回复的内容。


a的返回结果是一个requests对象,_content才是我们真正需要的结果。

它是一个bytes类型,需要解码。解码之后一个json数据类型,反序列之后,就可以得到字符串了。



得到字符串之后,就可以调用百度接口,生成语音文件

创建一个audio_test.py文件,用来将字符串生成语音文件,内容如下:

import time
from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

def text_to_audio(text):
    file_name = time.time()  # 保证文件名不重复
    result  = client.synthesis(text, 'zh', 1, {
        'spd':5,
        'vol': 5,
        'pit':5,
        'per':0
    })

    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open('%s.mp3'%(file_name), 'wb') as f:
            f.write(result)
    return '%s.mp3'%(file_name)

打开tuling.py,导入模块audio_test

import json
import requests
import audio_text

urls = 'http://www.tuling123.com/openapi/api'  # 请求地址
data_str = {
        "key":"6a944508fd5c4d499b9991862ea12345", # 你的apikey
        "info":'今天天气怎么样',  # 请求内容
        "userid":123,  # 开发者给自己的用户分配的唯一标志
    }
a = requests.post(urls,data_str)  # 必须使用post请求
content = (a._content).decode('utf-8')  # 获取返回结果_content属性,并解码
s = json.loads(content)  # 反序列化
print(audio_text.text_to_audio(s.get['text']))

执行输出:
1527421766.491485.mp3

在当前目录会生成一个音频文件,打开播放一下

有一个女生的声音,说:"请问你想查询哪个城市"

非常Nice


修改a_t.py,封装成函数,完整代码如下:

import os
from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '11212345'
API_KEY = 'pVxdhsXS1BIaiwYYNT712345'
SECRET_KEY = 'BvHQOts27LpGFbt3RAOv84WfPCW12345'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

def get_file_content(filePath):
    print(filePath)
    cmd_str = "ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm"%(filePath,filePath)
    print(cmd_str)
    os.system(cmd_str)
    with open(filePath+".pcm", 'rb') as fp:
        return fp.read()

# 识别本地文件
def audio_text(file_path):
    a = client.asr(get_file_content(file_path), 'pcm', 16000, {
        'dev_pid': 1536,
    })

    # print(a["result"])
    if a.get("result") :
        return a.get("result")[0]


修改jieba_test.py,导入模块,完整代码如下:

import jieba
import words
import tuling

for i in words.KEY_WORDS:
    jieba.add_word(i)

def fenci(text):
    a = list(jieba.cut(text))
    # print(a)

    user_key_name={
            "你叫",
            "你叫什么",
            "你的名字",
            "名字叫什么",
            "你叫什么名字",
            "名字是什么"
        }

    if user_key_name.intersection(a):
        a = tuling.to_tuling('我叫肖',1)
        #print('我叫肖')
        print(a)
        return a
    a = tuling.to_tuling(text,'ai01')
    return a

修改tuling.py,完整内容如下:

import json
import requests
import audio_text

urls = 'http://www.tuling123.com/openapi/api'
def to_tuling(text,uid):
    data_str = {
        "key":"6a944508fd5c4d499b9991862ea12345",
        "info":text,
        "userid":uid,
    }
    a = requests.post(urls,data_str)
    content = (a._content).decode('utf-8')
    s = json.loads(content)
    print(s)

    return audio_text.text_to_audio(s.get('text'))



新建文件wen_da.py,内容如下:

import a_t
import jieba_test

a = a_t.audio_text('How_is_the_weather.wav')
b = jieba_test.fenci(a)

How_is_the_weather.wav是我提前录制好的文件,内容是,北京天气如何?

执行wen_da.py,输出:

北京天气如何

{'code': 100000, 'text': '北京:周日 05月27日,多云 西南风3-4级,最低气温17度,最高气温32度'}

1527423163.572486.mp3


打开文件1527423163.572486.mp3,听声音,内容应该是

北京:周日 05月27日,多云 西南风3-4级,最低气温17度,最高气温32度


本地版的语言识别到这里就结束了!

这种方式很繁琐,很LOW!

来,看一个高大上的效果:

基于flask框架的语言识别系统

点击按钮,开始说话

blob.png

说完之后,就直接语言播放天气

blob.png

还能成语接龙

blob.png

说不知道,就自动退出成语接龙模式


blob.png

还可以听歌,比如说:"我想听世上只有妈妈好"

就会直接播放音乐

blob.png

播放音乐功能,是调用了一个第3方接口musicapi

是不是很6呢?


预知后事如何,请听下回分解

注意博客更新即可!


--结束END--

本文标题: python语音识别

本文链接: https://www.lsjlt.com/news/179151.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python语音识别
    语音识别技术,也被称为自动语音识别,目标是以电脑自动将人类的语音内容转换为相应的文字。应用包括语音拨号、语音导航、室内设备控制、语音文档检索、简单的听写数据录入等。一、功能概述实现将语音转换为文字,调取第3方接口。比如百度ai,图灵机器人,...
    99+
    2023-01-30
    语音识别 python
  • 亚马逊语音识别和Google语音识别
    亚马逊语音识别(Alexa)是一种智能音箱设备,它可以使用语音命令与设备进行交互,例如播放音乐、查找天气预报、控制智能家居设备等。Alexa在全球范围内拥有数百万个客户,包括许多家庭、企业和政府机构。 Google语音识别(Google ...
    99+
    2023-10-27
    亚马逊 语音识别 Google
  • 基础语音识别-食物语音识别baseline(CNN)
    目录1 下载和解压数据集2 加载库函数3 特征提取以及数据集的建立建立类别标签字典提取梅尔频谱特征获取特征和标签独热编码把数据集划分为训练集和测试集4 建立模型搭建CNN网络训练模型...
    99+
    2022-11-12
  • python语音识别whisper的使用
    目录一、背景二、whisper语音识别三、示例四、封装工具一、背景 最近想提取一些视频的字幕,语音文案,研究了一波 二、whisper语音识别 Whisper 是一种通用的语音识别模...
    99+
    2023-02-27
    python语音识别whisper python whisper
  • NLP 语音音量音调识别
    NLP(Natural Language Processing)是一种涉及人类语言和计算机之间交互的领域,通过使用计算机算法和模型,...
    99+
    2023-10-11
    nlp
  • 基于Python实现语音识别和语音转文字
    目录前言直接使用获取权限1.环境准备2.获取权限代码实现1.获取access_token2.获取转换后音频3.配置接口参数4.完整demo5.执行前言 嗨嗨,大家好呀 ~ 今天给你们...
    99+
    2022-11-11
  • Python中怎么实现语音识别
    今天就跟大家聊聊有关Python中怎么实现语音识别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。离线转换对于国内的网络环境,无法用google API来将语音数据转换成文本文件,因为...
    99+
    2023-06-16
  • python语音识别的转换方法
    使用pyttsx的python包,你可以将文本转换为语音。 安装命令 pip install pyttsx3 -i https://pypi.tuna.tsinghua.edu.c...
    99+
    2022-11-12
  • python语音识别whisper如何使用
    这篇文章主要介绍了python语音识别whisper如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python语音识别whisper如何使用文章都会有所收获,下面我们一起来看看吧。whisper语音识别...
    99+
    2023-07-05
  • Python语音识别的示例分析
    这篇文章给大家分享的是有关Python语音识别的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述将开启一个新的深度学习章节, 为大家来讲述一下深度学习在语音识别 (Speech Recognition)...
    99+
    2023-06-25
  • 语音识别实战(python代码)(一)
    语音识别实战   (python :pyttsx、SAPI、SpeechLib实例代码)(一) 本文目录: 一、语音识别的基本原理 (1)、语音识别的起源与发展 (2)、语音识别的基本原理 (3)、语音识别过程 (4)、语音识别的近期发展...
    99+
    2023-08-31
    语音识别 人工智能 深度学习 python 开发语言
  • Android学习之语音识别、语音合成
    SDK SDK (Software Development Kit) 软件开发工具包是软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作...
    99+
    2022-06-06
    android学习 语音合成 语音识别 Android
  • uniapp语音识别(讯飞语音)转文字
    常见应用:游戏界面 文字语音、商城导航栏的语音输入搜索框、聊天界面的语音文字输入等. 引自官方 unicloud官方语音: 语音输入接口可使得网页开发人员能快速调...
    99+
    2022-12-24
    uniapp语音识别 uniapp语音转文字 uniapp讯飞语音识别
  • Python如何进行语音识别,语音转换功能实现
    Python如何进行语音识别,语音转换功能实现,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。相信大家都非常喜欢那些萝莉音,看那些女装大佬,开一个变声器声音实在是很有诱惑力,下面...
    99+
    2023-06-02
  • Python迅速掌握语音识别之知识储备篇
    目录概述RNN计算RNN 存在的问题LSTMGRUSeq2seqAttention 模型Teacher Forcing 机制概述 从今天开始我们将开启一个新的深度学习章节, 为大家来...
    99+
    2022-11-12
  • Python语音识别API实现文字转语音的几种方法
    搜狗(目前好用,免费) def textToAudio_Sougou(message, filePath): # https://ai.so gou.c...
    99+
    2022-11-13
  • Android基于讯飞语音SDK实现语音识别
    一、准备工作 1、你需要android手机应用开发基础 2、科大讯飞语音识别SDK android版 3、科大讯飞语音识别开发API文档 4、android手机 关于科大讯飞S...
    99+
    2022-06-06
    讯飞 sdk 语音识别 Android
  • Python语音识别终极指北,没错,就是
    整合了语音识别的 Python 程序提供了其他技术无法比拟的交互性和可访问性。最重要的是,在 Python 程序中实现语音识别非常简单。阅读本指南,你就将会了解。你将学到:•语音识别的工作原理;•PyPI 支持哪些软件包; •如何安装和使用...
    99+
    2023-01-31
    语音识别 Python
  • 基于Python创建语音识别控制系统
    下面附上参考文章,这篇文章是通过识别出来的文字来打开浏览器中的默认网站。python通过调用百度api实现语音识别 题目很简单,利用语音识别识别说出来的文字,根据文字的内容来控制图形...
    99+
    2022-11-12
  • Android实现语音识别代码
    苹果的iphone 有语音识别用的是Google 的技术,做为Google 力推的Android 自然会将其核心技术往Android 系统里面植入,并结合google 的云端技...
    99+
    2022-06-06
    语音识别 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作