耳朵 = 麦克风 = 语音识别 ASRjavascript
嘴巴 = 扬声器 = 语音合成 TTS Text To Speechhtml
眼睛 = 摄像头 = 图像识别 IR前端
思考 = 逻辑处理 = 天然语言处理 NLP Natural Language Processingvue
if else .... 用天然语言处理,用模型计算类似度
大数据和人工智能之间的小关系 (不要紧)java
可是,机器学习须要样本数据,从大数据中来jquery
小猪佩奇()第一眼是小猪的采集率达到90%git
爬虫 == 数据采集github
文字识别 扣除文字, 而后通用翻译 作出一个字典来(两个接口)web
错误的把(抄的东西错了,能不能认真一点)ajax
function loginGc() { var username = document.getElementById('username').value; ws = new WebSocket('ws://192.168.16.90:9534/my_socket/'+username); ws.onmessage = function (eventMessage) { console.log(eventMessage.data); str_obj = JSON.parse(eventMessage.data); var p = document.createElement('p'); p.innerText = str_obj.from_user + ': '+ str_obj.chat; // chat 是本身发本身得到的数据 document.getElementById('chat_list').appendChild(p); }; } function send_msg() { var content = document.getElementById('content').value; var username = document.getElementById('username').value; var sendStr = { from_user : username , chat : content }; ws.send(JSON.stringify(sendStr)); }
16k采样率(声波采集的越多,越清晰) 16 位深 pcm (不压缩 ,识别) 解析更好,更清晰了,wav (不压缩,pcm编码)更大了,
语音识别不超过60s
dev_pid 识别普通话、川普。。。
电脑上面的两个点: 一个是麦克风,一个是灯
进入百度智能云,登陆管理控制台
新建项目,
https://ai.baidu.com/docs#/ASR-Online-Python-SDK/top 技术文档
from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '16815965' API_KEY = 'uGdZBUTL05BvFPQ4wd4IsRWl' SECRET_KEY = 'qHbEWHlivTKtn7lQrT1bcMWZfsuvlNeE' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 读取文件 def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() # 识别本地文件 res = client.asr(get_file_content('audio.pcm'), 'pcm', 16000, { 'dev_pid': 1536, })
result = client.synthesis('''面朝大海,春暖花开 做者:海子 从明天起,作一个幸福的人, 喂马,劈柴,周游世界; 从明天起,关心粮食和蔬菜, 我有一所房子,面朝大海,春暖花开; 从明天起,和每个亲人通讯, 告诉他们个人幸福; 那幸福的闪电告诉个人, 我将告诉每个人; 给每一条河每一座山取一个温暖的名字, 陌生人,我也为你祝福; 愿你有一个灿烂的前程, 愿你有情人终成眷属; 愿你在尘世得到幸福; 我只愿面朝大海,春暖花开;''', 'zh', 1, { 'vol': 5, 'per':3, 'spd':5, 'pit':5 })
前端报这个错误,可是错误是后端的。
ws.send(JSON.stringify(sendStr));
错误位置
# msg = json.loads(user_socket.receive()) msg = user_socket.receive()
为何不用json,也难怪send前端会出错,这里receive出错了,
刚开始,先后两端都应该有错,可是我那个先后端都不报错,却不正常显示的是哪里的错误呢?
就是这个。 msg = json.loads(user_socket.receive())
数据传不过去。
数据
user_socket.receive() {"from_user":"agettweatwet","chat":"aetatewatetawe"} <class 'str'> json.loads(user_socket.receive()) {'from_user': 'aaetawe', 'chat': 'atetwet'} <class 'dict'>
usocket.send(msg) send是发送字符串
var p = document.createElement('p');
写成 document.getElementById('p');
发送两下,接收到一下的错误
除了receive()接收外,我还print(msg,type(msg),type(json.loads(user_socket.receive()))) 也得接收
根本缘由:是对代码逻辑不懂,上课没认真听
全局变量写成了局部变量,由于又var 了,在局部函数里。
Uncaught TypeError: Cannot read property 'send' of null
正确的send和不显示的send?
错误缘由
ws.onmessage = function (eventMessage) { console.log(eventMessage.data); var p = document.createElement('p'); p.innerText = eventMessage.data; document.getElementById('chat_list').appendChild(p); };
正确写法
ws.onmessage = function (eventMessage) { console.log(eventMessage.data); str_obj = JSON.parse(eventMessage.data); var p = document.createElement('p'); p.innerText = str_obj.from_user +" : "+str_obj.chat; document.getElementById('chat_list').appendChild(p); };
function loginGc() { var username = document.getElementById('username').value; var ws = new WebSocket('ws://192.168.16.90:9534/my_socket/'+username); ws.onmessage = function (eventMessage) { console.log(eventMessage.data); str_obj = JSON.parse(eventMessage.data); var p = document.createElement('p'); p.innerText = str_obj.from_user + ' + ' +str_obj.chat; document.getElementById('chat_list').appendChild(p); }; }
对比区别:
send 就有了 颜色了 全局变量 ,
var ws = new WebSocket('ws://192.168.16.90:9534/my_socket/'+username); 这样写的话,在函数里面是 局部变量,因此,另外一个函数里无法用
结果:
https://blog.csdn.net/xiemanR/article/details/73378962
http://www.matools.com/embed/compare
爬虫 数据分析 路飞学城 cmdb 全部的视频都找大哥要 最后要讲go(5天,学过,就是加分项) elasitc(和运维沾点边)(后面讲) 还有测试,(时间少,也要来) (测试开发:都是人肉测试,因此会开发的竞争力很强,会个函数就挺好的(退而求其次,有后端的工程师,而后能够转))
细节根据 一步一步推出来
crm 这种系统独立自主完成, 达到就业标准了。
缺练,本身设计表结构,本身加权限,本身可以处理下来
看着这个网站,能把这个东西作出来 cms(大哥作了,一步一步,) 周末每次一课 路飞
简易版的博客 基于md的 ckedit (不会) 引入js 就能够了 (至关于今日头条,有人发布,有人看)
作了以后,能够本身搭博客
模块化, 组件都有了, (本身能写的能用的) 以后搭起组件来,成了一个系统。 本身写的话,很长时间,并且容易出错
rbac 单拿出来,另写一个名,写个文档,打包成一个包,上传到github上, 而后别人用了,以后就能够在简历上写下,开源系统
代码能用到别的地方上,本身的设计的。 开源。不合适的地方再改。 不少博客园的人,开源项目,被别人下载,被别人fork,
村长(这我的对技术比较痴迷,)周末 可能会将 vue django-resform 简单 的 可能会作文件调查的 , 还有路飞学城 dif vue 都用django 能够串联起来 先后端分离
到公司里,用rbac 的很好了,不少都是用if else 。 为何权限的作的很好,思想是什么?
项目 : 你作过什么项目 (peiqi 根据django-admin 改了一个,比admin好用多了,而后 4期到9期(可是不少人没写,很少))
django 缓存 信号 读写分离还没讲 staic组件
录音机录太麻烦了
因此, 用web 录音 js 录音 在https 火狐暂时录音
支持原生js , (jquery的都不能用了)
<script type='application/javascript'>
document的做用域
说什么 回什么能够实现了
可是 让他唱首歌,问爱因斯坦是谁都不能实现
uuid4 是什么 缓存那里讲的 每次都是不一样的
回答的问题都能回答下来,可是说的话覆盖了,也用uuid,不覆盖
简单的问答: 缺乏 回答
my_nlp 缺乏 图灵机器人
{'error_code': 6, 'error_msg': 'No permission to access data'} (错误代码没弄下来) 缘由没开启NLP 掉的接口中 ,默认是语音合成和 语音是被
只显示一个应用了 是在一个特定的应用列表里
FileNotFoundError: [Errno 2] No such file or directory: 'audio.pcm'
文件类型不对(去经过FFmpeg转换 cmd ffmpeg os.system执行命令)
os 里面的 system命令使用来执行cmd命令的
安装: 把tools 里的 ffmpeg 的bin 目录地址写到环境变量里
当第一次打开pycharm时,就已经加载了环境变量里的全部,修改了,不会去检测重复加载(浪费),因此,要重启 : 重启须要都吧全部pycharm的进程都关了,不能只关闭这个项目,(从新加载)
ffmpeg
'ffmpeg' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
。。。 : 实在不行,操做正确,可是不起做用之时,我选择了重启电脑
from aip import AipSpeech import os """ 你的 APPID AK SK """ APP_ID = '16815965' API_KEY = 'uGdZBUTL05BvFPQ4wd4IsRWl' SECRET_KEY = 'qHbEWHlivTKtn7lQrT1bcMWZfsuvlNeE' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 转视频格式而且 读取文件 def get_file_content(filePath): cmd_str = f'ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm' os.system(cmd_str) with open(f'{filePath}.pcm', 'rb') as fp: return fp.read() # 识别本地文件 res = client.asr(get_file_content('1.wma'), 'pcm', 16000, { 'dev_pid': 1536, }) print(res) {'corpus_no': '6714250808127389373', 'err_msg': 'success.', 'err_no': 0, 'result': ['你叫什么名字'], 'sn': '637873824161563283337'}
from aip import AipSpeech import os """ 你的 APPID AK SK """ APP_ID = '16815965' API_KEY = 'uGdZBUTL05BvFPQ4wd4IsRWl' SECRET_KEY = 'qHbEWHlivTKtn7lQrT1bcMWZfsuvlNeE' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 转一下pcm文件 并 读取文件 def get_file_content(filePath): cmd_str = f'ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm' os.system(cmd_str) with open(f'{filePath}.pcm', 'rb') as fp: return fp.read() # # 识别本地文件 函数里有视频转pcm res = client.asr(get_file_content('auido.wav'), 'pcm', 16000, { 'dev_pid': 1536, }) Q = res.get('result')[0] #获得内容 print('Q:--------->文件内容:',Q) A = '我不知道你在say what' #若是说话,那么回答 if Q =='你的名字叫什么': A = 'big baby' result = client.synthesis(A, 'zh', 1, { 'vol': 5, 'per':4, 'spd':5, 'pit':4 }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 (写入回答) if not isinstance(result, dict): with open('Answer.mp3', 'wb') as f: f.write(result)
或者判断条件 改为 nlp的 (若是他支持NLP)
Q = res.get('result')[0] print('Q:--------->文件内容:',Q) A = '我不知道你在say what' res = client1.simnet("你的名字是什么", Q) print(res.get('score')) if res.get('score') > 0.58: A = 'big baby'
调用图灵返回
from goto_tuling import go_tl else: A = go_tl(Q)
import requests def go_tl(Q): data = { "perception": { "inputText": { "text": Q } }, "userInfo": { "apiKey": "f9a56b016eb344ecbfacdac05fcb74f0", "userId": "123" } } res = requests.post('http://openapi.tuling123.com/openapi/api/v2',json=data) #调用接口 res_dict = res.json() # 换成json模式 return res_dict.get("results")[0].get("values").get("text") # 返回信息
机器说的话,也能够识别的啊:
Q:--------->文件内容: 面朝大海春暖花开做者海子铜陵天气说一个幸福的人喂马劈柴周游世界从明天起关心粮食和蔬菜我有一所房子面朝大海春暖花开崇明天气和每个亲人通讯告诉他们个人幸福那幸福的闪电告诉个人我将告诉每个人给每一条河每一座山取一个温暖的名字陌生人我也为你祝福你有一个灿烂的前程愿你有情人终成眷属愿你在尘世得到幸福我只愿面朝大海春暖花开
from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '16815965' API_KEY = 'uGdZBUTL05BvFPQ4wd4IsRWl' SECRET_KEY = 'qHbEWHlivTKtn7lQrT1bcMWZfsuvlNeE' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('你的名字叫什么', 'zh', 1, { 'vol': 5, 'per':3, 'spd':5, 'pit':5 }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 if not isinstance(result, dict): with open('mn.pcm', 'wb') as f: f.write(result)
from aip import AipNlp APP_ID = '16815965' API_KEY = 'uGdZBUTL05BvFPQ4wd4IsRWl' SECRET_KEY = 'qHbEWHlivTKtn7lQrT1bcMWZfsuvlNeE' client = AipNlp(APP_ID, API_KEY, SECRET_KEY) text1 = "你叫什么名字" text2 = "你的名字叫什么" """ 调用短文本类似度 """ res = client.simnet("名字2", "名字1") print(res)
浏览器一直是google搜索,每次都得另起页面。经过老师视频,而后恍然,setting设置成百度。
以前段啊
</head> <body> <audio controls autoplay id="music"> <button onclick="get_music()">点我</button> </audio> </body> <script type='application/javascript'> function get_music() { // 给audio标签的src属性赋值 var my_audio = document.getElementById('music'); my_audio.src = 'https://fdfs.xmcdn.com/group13/M03/1F/6B/wKgDXVV6TO-ivqNQAAwaBkl9SK4828.m4a' } </script> </html>
js控制代码太复杂
<p> <button onclick="start_reco()">开始录音</button> </p> <p> <button onclick="ai_reco()" style="background-color: cornflowerblue">发送语音指令</button> </p> </body> <script type="application/javascript" src="/static/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="/static/Recorder.js"></script> <script type="application/javascript"> var reco = null; var serv = "http://192.168.16.90:9527"; var audio_context = new AudioContext();//音频内容对象 navigator.getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); navigator.getUserMedia({audio: true}, create_stream, function (err) { console.log(err) }); function create_stream(user_media) { var stream_input = audio_context.createMediaStreamSource(user_media); reco = new Recorder(stream_input); } function start_reco() { reco.record(); } function ai_reco() { reco.stop(); reco.exportWAV(function (wav_file) { console.log(wav_file); var formdata = new FormData(); // form 表单 {key:value} formdata.append("reco", wav_file); // form input type="file" $.ajax({ url: serv + "/ai_uploader", type: 'post', processData: false, contentType: false, data: formdata, dataType: 'json', success: function (data) { console.log(data); document.getElementById("player").src = serv + "/get_chat/" + data.filename; } }) }); reco.clear(); } </script> </html>
报错信息:HTML 文档的字符编码未声明。若是该文件包含 US-ASCII 范围以外的字符,该文件将在某些浏览器配置中呈现为乱码。页面的字符编码必须在文档或传输协议层声明。
from flask import Flask, render_template, request, send_file from my_ai import audio2text, my_nlp, text2audio app = Flask(__name__) app.debug=True @app.route("/ai") def ai(): return render_template("webToy.html") from uuid import uuid4 @app.route("/ai_uploader",methods=["gET","Post"]) def ai_uploader(): my_reco_file = request.files.get("reco") reco_file_name = f"{uuid4()}.wav" my_reco_file.save(reco_file_name) Q = audio2text(reco_file_name) A = my_nlp(Q) filename = text2audio(A) return {"filename":filename} @app.route("/get_chat/<filename>") def get_chat(filename): return send_file(filename) if __name__ == '__main__': app.run("0.0.0.0",9527)
转化的 my_ai.py
from my_ai_config import NLP_CLIENT,SPEECH_CLIENT,VIOCE from utils import get_file_content def audio2text(file_path): file_context = get_file_content(file_path) res = SPEECH_CLIENT.asr(file_context,"pcm",16000,{"dev_pid":1536}) return res.get("result")[0] def my_nlp(Q): A="我仍是个宝宝,我不知道你在说什么,疑车无据!" # 咱们的逻辑处理 return A from uuid import uuid4 def text2audio(A): res = SPEECH_CLIENT.synthesis(A,"zh",1,VIOCE) file_name = f"{uuid4()}.mp3" if type(res) == dict: pass with open(file_name,"wb") as f: f.write(res) return file_name
配置的my_ai_config.py
from aip import AipSpeech, AipNlp """ 你的 APPID AK SK """ APP_ID = '16815061' API_KEY = 'G9k256n6aeMRnfvS1paws50x' SECRET_KEY = 'nCbbF44iUp6QrNvSgcYW0eo2EKKl4cvR' SPEECH_CLIENT = AipSpeech(APP_ID, API_KEY, SECRET_KEY) NLP_CLIENT = AipNlp(APP_ID, API_KEY, SECRET_KEY) VIOCE={ 'vol': 5, "spd": 4, "pit": 5, "per": 4 }
转化pcm的 utils.py
import os # 转换PCM而且读取文件内容并返回 def get_file_content(filePath): cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm" os.system(cmd_str) with open(f"{filePath}.pcm", 'rb') as fp: return fp.read()
@app.route("/ai_uploader",methods=["gET","Post"]) def ai_uploader(): my_reco_file = request.files.get("reco") reco_file_name = f"{uuid4()}.wav" my_reco_file.save(reco_file_name) Q = audio2text(reco_file_name) A = my_nlp(Q) filename = text2audio(A) return {"filename":filename} @app.route("/get_chat/<filename>") def get_chat(filename): return send_file(filename)
navigator.getUserMedia({audio: true}, create_stream, function (err) { console.log(err) }); function create_stream(user_media) { var stream_input = audio_context.createMediaStreamSource(user_media); reco = new Recorder(stream_input); } function start_reco() { reco.record(); } function ai_reco() { reco.stop(); reco.exportWAV(function (wav_file) { console.log(wav_file); var formdata = new FormData(); // form 表单 {key:value} formdata.append("reco", wav_file); // form input type="file" $.ajax({ url: serv + "/ai_uploader", type: 'post', processData: false, contentType: false, data: formdata, dataType: 'json', success: function (data) { console.log(data); document.getElementById("player").src = serv + "/get_chat/" + data.filename; } }) });