# Conflicts:
#	doc/软件开发项目的个人自评报告-智能导盲杖.xlsx
master
Gehusileng 5 months ago
commit 810a26d0df

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 KiB

Binary file not shown.

@ -1,10 +1,3 @@
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
"""
Train a YOLOv5 model on a custom dataset
Usage:
$ python path/to/train.py --data coco128.yaml --weights yolov5s.pt --img 640
"""
import argparse
import math
import os
@ -55,12 +48,12 @@ RANK = int(os.getenv('RANK', -1))
WORLD_SIZE = int(os.getenv('WORLD_SIZE', 1))
def train(hyp, # 'path/to/hyp.yaml' 或 hyp 字典
def train(hyp,
opt,
device,
callbacks
):
# 定义训练过程中使用的变量
# 定义训练过程中使用的变量,启动深度学习模型的训练过程
save_dir, epochs, batch_size, weights, single_cls, evolve, data, cfg, resume, noval, nosave, workers, freeze = \
Path(opt.save_dir), opt.epochs, opt.batch_size, opt.weights, opt.single_cls, opt.evolve, opt.data, opt.cfg, \
opt.resume, opt.noval, opt.nosave, opt.workers, opt.freeze
@ -72,9 +65,9 @@ def train(hyp, # 'path/to/hyp.yaml' 或 hyp 字典
# 超参数
if isinstance(hyp, str):
with open(hyp, errors='ignore') as f:
with open(hyp, errors='ignore') as f:#使用with打开如果遇到编码错误就忽略并继续打开
hyp = yaml.safe_load(f) # 加载超参数字典
LOGGER.info(colorstr('hyperparameters: ') + ', '.join(f'{k}={v}' for k, v in hyp.items()))
LOGGER.info(colorstr('hyperparameters: ') + ', '.join(f'{k}={v}' for k, v in hyp.items()))#日志,生成字符串
# 保存运行设置
with open(save_dir / 'hyp.yaml', 'w') as f:
@ -82,7 +75,7 @@ def train(hyp, # 'path/to/hyp.yaml' 或 hyp 字典
with open(save_dir / 'opt.yaml', 'w') as f:
yaml.safe_dump(vars(opt), f, sort_keys=False)
# Loggers
# 日志记录和初始化
if RANK in [-1, 0]:
loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # loggers instance
if loggers.wandb:
@ -90,24 +83,24 @@ def train(hyp, # 'path/to/hyp.yaml' 或 hyp 字典
if resume:
weights, epochs, hyp = opt.weights, opt.epochs, opt.hyp
# Register actions
# 注册回调函数
for k in methods(loggers):
callbacks.register_action(k, callback=getattr(loggers, k))
# Config
plots = not evolve # create plots
# 初始化设置
plots = not evolve # 是否画图
cuda = device.type != 'cpu'
init_seeds(1 + RANK)
init_seeds(1 + RANK) #随机种子
with torch_distributed_zero_first(LOCAL_RANK):
data_dict = data_dict or check_dataset(data) # check if None
data_dict = data_dict or check_dataset(data) # 检查是否存在
train_path, val_path = data_dict['train'], data_dict['val']
nc = 1 if single_cls else int(data_dict['nc']) # number of classes
names = ['item'] if single_cls and len(data_dict['names']) != 1 else data_dict['names'] # class names
assert len(names) == nc, f'{len(names)} names found for nc={nc} dataset in {data}' # check
is_coco = isinstance(val_path, str) and val_path.endswith('coco/val2017.txt') # COCO dataset
nc = 1 if single_cls else int(data_dict['nc']) # 类别数量
names = ['item'] if single_cls and len(data_dict['names']) != 1 else data_dict['names'] # 名称
assert len(names) == nc, f'{len(names)} names found for nc={nc} dataset in {data}' # 检查数量与data_dict是否相匹配
is_coco = isinstance(val_path, str) and val_path.endswith('coco/val2017.txt') # COCO数据集路径
# Model
check_suffix(weights, '.pt') # check weights
# 训练模型
check_suffix(weights, '.pt') # 检查权重文件的后缀
pretrained = weights.endswith('.pt')
if pretrained:
with torch_distributed_zero_first(LOCAL_RANK):
@ -122,7 +115,7 @@ def train(hyp, # 'path/to/hyp.yaml' 或 hyp 字典
else:
model = Model(cfg, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device) # create
# Freeze
# 冻结模型层
freeze = [f'model.{x}.' for x in range(freeze)] # layers to freeze
for k, v in model.named_parameters():
v.requires_grad = True # train all layers
@ -130,21 +123,21 @@ def train(hyp, # 'path/to/hyp.yaml' 或 hyp 字典
LOGGER.info(f'freezing {k}')
v.requires_grad = False
# Image size
gs = max(int(model.stride.max()), 32) # grid size (max stride)
imgsz = check_img_size(opt.imgsz, gs, floor=gs * 2) # verify imgsz is gs-multiple
# 图像和网格尺寸
gs = max(int(model.stride.max()), 32) # 最小为32
imgsz = check_img_size(opt.imgsz, gs, floor=gs * 2) # 图像尺寸是网格的整数倍
# Batch size
if RANK == -1 and batch_size == -1: # single-GPU only, estimate best batch size
# 批量大小
if RANK == -1 and batch_size == -1: # 单GPU没有指定批量大小
batch_size = check_train_batch_size(model, imgsz)
# Optimizer
nbs = 64 # nominal batch size
accumulate = max(round(nbs / batch_size), 1) # accumulate loss before optimizing
hyp['weight_decay'] *= batch_size * accumulate / nbs # scale weight_decay
# 优化
nbs = 64 # 基准
accumulate = max(round(nbs / batch_size), 1)
hyp['weight_decay'] *= batch_size * accumulate / nbs # 调整权重系数
LOGGER.info(f"Scaled weight_decay = {hyp['weight_decay']}")
g0, g1, g2 = [], [], [] # optimizer parameter groups
g0, g1, g2 = [], [], [] # 初始化3个列表
for v in model.modules():
if hasattr(v, 'bias') and isinstance(v.bias, nn.Parameter): # bias
g2.append(v.bias)
@ -153,25 +146,25 @@ def train(hyp, # 'path/to/hyp.yaml' 或 hyp 字典
elif hasattr(v, 'weight') and isinstance(v.weight, nn.Parameter): # weight (with decay)
g1.append(v.weight)
if opt.adam:
optimizer = Adam(g0, lr=hyp['lr0'], betas=(hyp['momentum'], 0.999)) # adjust beta1 to momentum
if opt.adam:#选择优化器
optimizer = Adam(g0, lr=hyp['lr0'], betas=(hyp['momentum'], 0.999))
else:
optimizer = SGD(g0, lr=hyp['lr0'], momentum=hyp['momentum'], nesterov=True)
optimizer.add_param_group({'params': g1, 'weight_decay': hyp['weight_decay']}) # add g1 with weight_decay
optimizer.add_param_group({'params': g2}) # add g2 (biases)
optimizer.add_param_group({'params': g1, 'weight_decay': hyp['weight_decay']}) # 添加g1 使用权重衰减
optimizer.add_param_group({'params': g2}) # 添加g2不使用权重衰减
LOGGER.info(f"{colorstr('optimizer:')} {type(optimizer).__name__} with parameter groups "
f"{len(g0)} weight, {len(g1)} weight (no decay), {len(g2)} bias")
del g0, g1, g2
del g0, g1, g2 #删除
# Scheduler
# 神经网络 学习调度
if opt.linear_lr:
lf = lambda x: (1 - x / (epochs - 1)) * (1.0 - hyp['lrf']) + hyp['lrf'] # linear
lf = lambda x: (1 - x / (epochs - 1)) * (1.0 - hyp['lrf']) + hyp['lrf'] # 计算学习率的线性衰减
else:
lf = one_cycle(1, hyp['lrf'], epochs) # cosine 1->hyp['lrf']
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) # plot_lr_scheduler(optimizer, scheduler, epochs)
lf = one_cycle(1, hyp['lrf'], epochs) # 周期变化
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf)
# EMA
# 使用指数移动平均(EMA)来平滑模型权重
ema = ModelEMA(model) if RANK in [-1, 0] else None
# Resume
@ -239,7 +232,7 @@ def train(hyp, # 'path/to/hyp.yaml' 或 hyp 字典
callbacks.run('on_pretrain_routine_end')
# DDP mode
# 处理DDP模型
if cuda and RANK != -1:
model = DDP(model, device_ids=[LOCAL_RANK], output_device=LOCAL_RANK)
@ -305,7 +298,7 @@ def train(hyp, # 'path/to/hyp.yaml' 或 hyp 字典
if 'momentum' in x:
x['momentum'] = np.interp(ni, xi, [hyp['warmup_momentum'], hyp['momentum']])
# Multi-scale
# 判断是否使用多尺度训练
if opt.multi_scale:
sz = random.randrange(imgsz * 0.5, imgsz * 1.5 + gs) // gs * gs # size
sf = sz / max(imgs.shape[2:]) # scale factor
@ -395,15 +388,9 @@ def train(hyp, # 'path/to/hyp.yaml' 或 hyp 字典
if RANK == -1 and stopper(epoch=epoch, fitness=fi):
break
# Stop DDP TODO: known issues shttps://github.com/ultralytics/yolov5/pull/4576
# stop = stopper(epoch=epoch, fitness=fi)
# if RANK == 0:
# dist.broadcast_object_list([stop], 0) # broadcast 'stop' to all ranks
# Stop DPP
# with torch_distributed_zero_first(RANK):
# if stop:
# break # must break all DDP ranks
# end epoch ----------------------------------------------------------------------------------------------------
# end training -----------------------------------------------------------------------------------------------------
@ -526,88 +513,93 @@ def main(opt, callbacks=Callbacks()):
LOGGER.info('Destroying process group... ')
dist.destroy_process_group()
# Evolve hyperparameters (optional)
# 演化超参数
else:
# Hyperparameter evolution metadata (mutation scale 0-1, lower_limit, upper_limit)
meta = {'lr0': (1, 1e-5, 1e-1), # initial learning rate (SGD=1E-2, Adam=1E-3)
'lrf': (1, 0.01, 1.0), # final OneCycleLR learning rate (lr0 * lrf)
'momentum': (0.3, 0.6, 0.98), # SGD momentum/Adam beta1
'weight_decay': (1, 0.0, 0.001), # optimizer weight decay
'warmup_epochs': (1, 0.0, 5.0), # warmup epochs (fractions ok)
'warmup_momentum': (1, 0.0, 0.95), # warmup initial momentum
'warmup_bias_lr': (1, 0.0, 0.2), # warmup initial bias lr
'box': (1, 0.02, 0.2), # box loss gain
'cls': (1, 0.2, 4.0), # cls loss gain
'cls_pw': (1, 0.5, 2.0), # cls BCELoss positive_weight
'obj': (1, 0.2, 4.0), # obj loss gain (scale with pixels)
'obj_pw': (1, 0.5, 2.0), # obj BCELoss positive_weight
'iou_t': (0, 0.1, 0.7), # IoU training threshold
'anchor_t': (1, 2.0, 8.0), # anchor-multiple threshold
'anchors': (2, 2.0, 10.0), # anchors per output grid (0 to ignore)
'fl_gamma': (0, 0.0, 2.0), # focal loss gamma (efficientDet default gamma=1.5)
'hsv_h': (1, 0.0, 0.1), # image HSV-Hue augmentation (fraction)
'hsv_s': (1, 0.0, 0.9), # image HSV-Saturation augmentation (fraction)
'hsv_v': (1, 0.0, 0.9), # image HSV-Value augmentation (fraction)
'degrees': (1, 0.0, 45.0), # image rotation (+/- deg)
'translate': (1, 0.0, 0.9), # image translation (+/- fraction)
'scale': (1, 0.0, 0.9), # image scale (+/- gain)
'shear': (1, 0.0, 10.0), # image shear (+/- deg)
'perspective': (0, 0.0, 0.001), # image perspective (+/- fraction), range 0-0.001
'flipud': (1, 0.0, 1.0), # image flip up-down (probability)
'fliplr': (0, 0.0, 1.0), # image flip left-right (probability)
'mosaic': (1, 0.0, 1.0), # image mixup (probability)
'mixup': (1, 0.0, 1.0), # image mixup (probability)
'copy_paste': (1, 0.0, 1.0)} # segment copy-paste (probability)
# 超参数演化元数据
meta = {
'lr0': (1, 1e-5, 1e-1), # 初始学习率SGD=0.01, Adam=0.001
'lrf': (1, 0.01, 1.0), # 最终OneCycleLR学习率lr0 * lrf
'momentum': (0.3, 0.6, 0.98), # SGD动量/Adam beta1
'weight_decay': (1, 0.0, 0.001), # 优化器权重衰减
'warmup_epochs': (1, 0.0, 5.0), # 预热epochs可以接受小数
'warmup_momentum': (1, 0.0, 0.95), # 预热初始动量
'warmup_bias_lr': (1, 0.0, 0.2), # 预热初始偏置学习率
'box': (1, 0.02, 0.2), # 边界框损失增益
'cls': (1, 0.2, 4.0), # 类别损失增益
'cls_pw': (1, 0.5, 2.0), # 类别BCELoss正样本权重
'obj': (1, 0.2, 4.0), # 目标损失增益(随像素缩放)
'obj_pw': (1, 0.5, 2.0), # 目标BCELoss正样本权重
'iou_t': (0, 0.1, 0.7), # IoU训练阈值
'anchor_t': (1, 2.0, 8.0), # 锚点多重阈值
'anchors': (2, 2.0, 10.0), # 每个输出网格的锚点数设为0则忽略
'fl_gamma': (0, 0.0, 2.0), # 焦点损失gammaefficientDet默认gamma=1.5
'hsv_h': (1, 0.0, 0.1), # 图像HSV-色调增强(比例)
'hsv_s': (1, 0.0, 0.9), # 图像HSV-饱和度增强(比例)
'hsv_v': (1, 0.0, 0.9), # 图像HSV-亮度增强(比例)
'degrees': (1, 0.0, 45.0), # 图像旋转(+/- 度)
'translate': (1, 0.0, 0.9), # 图像平移(+/- 比例)
'scale': (1, 0.0, 0.9), # 图像缩放(+/- 增益)
'shear': (1, 0.0, 10.0), # 图像剪切(+/- 度)
'perspective': (0, 0.0, 0.001), # 图像透视(+/- 比例), 范围0-0.001
'flipud': (1, 0.0, 1.0), # 图像上下翻转(概率)
'fliplr': (0, 0.0, 1.0), # 图像左右翻转(概率)
'mosaic': (1, 0.0, 1.0), # 图像混拼(概率)
'mixup': (1, 0.0, 1.0), # 图像混合(概率)
'copy_paste': (1, 0.0, 1.0) # 片段复制粘贴(概率)
}
with open(opt.hyp, errors='ignore') as f:
hyp = yaml.safe_load(f) # load hyps dict
if 'anchors' not in hyp: # anchors commented in hyp.yaml
hyp = yaml.safe_load(f) # 加载超参数字典
if 'anchors' not in hyp: # 设置默认值
hyp['anchors'] = 3
opt.noval, opt.nosave, save_dir = True, True, Path(opt.save_dir) # only val/save final epoch
# ei = [isinstance(x, (int, float)) for x in hyp.values()] # evolvable indices
opt.noval, opt.nosave, save_dir = True, True, Path(opt.save_dir)
# 路径
evolve_yaml, evolve_csv = save_dir / 'hyp_evolve.yaml', save_dir / 'evolve.csv'
if opt.bucket:
os.system(f'gsutil cp gs://{opt.bucket}/evolve.csv {save_dir}') # download evolve.csv if exists
os.system(f'gsutil cp gs://{opt.bucket}/evolve.csv {save_dir}') # 下载evolve.csv
for _ in range(opt.evolve): # generations to evolve
if evolve_csv.exists(): # if evolve.csv exists: select best hyps and mutate
# Select parent(s)
parent = 'single' # parent selection method: 'single' or 'weighted'
#进行opt.evolve指定次数的超参数演化
for _ in range(opt.evolve):
if evolve_csv.exists(): # 如果存在演化过程中生成的csv文件选择最佳超参数并进行变异
# 选择父方法
parent = 'single' # 'single' 表示随机选择一个最佳超参数集作为父代;'weighted' 表示加权选择
x = np.loadtxt(evolve_csv, ndmin=2, delimiter=',', skiprows=1)
n = min(5, len(x)) # number of previous results to consider
x = x[np.argsort(-fitness(x))][:n] # top n mutations
w = fitness(x) - fitness(x).min() + 1E-6 # weights (sum > 0)
n = min(5, len(x)) # 加载超参数数据
x = x[np.argsort(-fitness(x))][:n] # 考虑前n个历史结果
w = fitness(x) - fitness(x).min() + 1E-6
if parent == 'single' or len(x) == 1:
# x = x[random.randint(0, n - 1)] # random selection
x = x[random.choices(range(n), weights=w)[0]] # weighted selection
# 随机选择一个超参数集
x = x[random.choices(range(n), weights=w)[0]] # 权重选择
elif parent == 'weighted':
x = (x * w.reshape(n, 1)).sum(0) / w.sum() # weighted combination
x = (x * w.reshape(n, 1)).sum(0) / w.sum() # 权重组合
# 变异操作
mp, s = 0.8, 0.2 # 变异概率,标准差
# Mutate
mp, s = 0.8, 0.2 # mutation probability, sigma
npr = np.random
npr.seed(int(time.time()))
g = np.array([meta[k][0] for k in hyp.keys()]) # gains 0-1
g = np.array([meta[k][0] for k in hyp.keys()]) #
ng = len(meta)
v = np.ones(ng)
while all(v == 1): # mutate until a change occurs (prevent duplicates)
while all(v == 1): # 进行变异,直到发生改变,防止生成重复的超参数集
v = (g * (npr.random(ng) < mp) * npr.randn(ng) * npr.random() * s + 1).clip(0.3, 3.0)
for i, k in enumerate(hyp.keys()): # plt.hist(v.ravel(), 300)
hyp[k] = float(x[i + 7] * v[i]) # mutate
for i, k in enumerate(hyp.keys()):
hyp[k] = float(x[i + 7] * v[i])
# Constrain to limits
# 约束超参数在设定的范围内
for k, v in meta.items():
hyp[k] = max(hyp[k], v[1]) # lower limit
hyp[k] = min(hyp[k], v[2]) # upper limit
hyp[k] = round(hyp[k], 5) # significant digits
hyp[k] = max(hyp[k], v[1]) # 下限
hyp[k] = min(hyp[k], v[2]) # 上限
hyp[k] = round(hyp[k], 5) # 5位有效数字
# Train mutation
# 变异训练
results = train(hyp.copy(), opt, device, callbacks)
# Write mutation results
#记录结果
print_mutation(results, hyp.copy(), save_dir, opt.bucket)
# Plot results
# 绘制结果
plot_evolve(evolve_csv)
LOGGER.info(f'Hyperparameter evolution finished\n'
f"Results saved to {colorstr('bold', save_dir)}\n"
@ -615,16 +607,14 @@ def main(opt, callbacks=Callbacks()):
def run(**kwargs):
# Usage: import train; train.run(data='coco128.yaml', imgsz=320, weights='yolov5m.pt')
opt = parse_opt(True)
for k, v in kwargs.items():
setattr(opt, k, v)
main(opt)
# python train.py --data mask_data.yaml --cfg mask_yolov5s.yaml --weights pretrained/yolov5s.pt --epoch 100 --batch-size 4 --device cpu
# python train.py --data mask_data.yaml --cfg mask_yolov5l.yaml --weights pretrained/yolov5l.pt --epoch 100 --batch-size 4
# python train.py --data mask_data.yaml --cfg mask_yolov5m.yaml --weights pretrained/yolov5m.pt --epoch 100 --batch-size 4
#
if __name__ == "__main__":
opt = parse_opt()
main(opt)

@ -1,11 +1,4 @@
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
"""
Validate a trained YOLOv5 model accuracy on a custom dataset
Usage:
$ python path/to/val.py --data coco128.yaml --weights yolov5s.pt --img 640
"""
#评估准确性
import argparse
import json
import os

@ -1,12 +1,5 @@
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
Project Name: yolov5-jungong
File Name: window.py.py
Author: chenming
Create Date: 2021/11/8
Description图形化界面可以检测摄像头视频和图片文件
-------------------------------------------------
图形化界面
"""
# 设置tmp的目录来放中间的处理结果
import shutil

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

@ -0,0 +1,2 @@
主要实现每1s读取一次img目录中的图片并且识别的图片中的文字会存储到txt目录中
另外txt目录中设置了当存储的备份文件即历史识别后结构仅仅保留最后1m以来做记录器。

@ -0,0 +1,99 @@
import pytesseract
from PIL import Image
import sys
import os
import time
import datetime
def ensure_directories():
# 确保存储输出文本的目录存在
output_dir = 'txt'
if not os.path.exists(output_dir):
os.makedirs(output_dir)
def ensure_pytesseract_installed():
try:
# 尝试导入pytesseract以确认它已安装
import pytesseract
except ImportError:
print("pytesseract库未安装。请运行'pip install pytesseract'来安装它。")
sys.exit(1)
def ensure_tesseract_executable_configured():
try:
# 尝试获取Tesseract的路径以确认它已配置
pytesseract.pytesseract.tesseract_cmd
except AttributeError:
print("未配置Tesseract可执行文件的路径。请在pytesseract中设置tesseract_cmd。")
sys.exit(1)
def image_to_text(image_path):
try:
# 打开图像文件
img = Image.open(image_path)
except IOError:
print(f"无法打开图像文件:{image_path}")
return None
try:
# 使用pytesseract进行文字识别
text = pytesseract.image_to_string(img, lang='eng')
except Exception as e:
print(f"文字识别过程中发生错误:{e}")
return None
return text
def main():
# 确保pytesseract库已安装
ensure_pytesseract_installed()
# 确保配置了Tesseract可执行文件的路径
ensure_tesseract_executable_configured()
# 确保输出目录存在
ensure_directories()
# 设置输出目录路径
output_dir_path = 'txt'
# 主循环每3秒处理一张图片
while True:
# 获取当前时间,并格式化为文件名
current_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
image_filename = f"{current_time}.jpg"
#image_path = os.path.join('img', image_filename)
image_path = 'img/22.jpg'
output_file_path = os.path.join(output_dir_path, f"{current_time}.txt")
# 检查图片是否存在
if not os.path.exists(image_path):
print(f"图片 {image_path} 不存在,等待下一张...")
time.sleep(1)
continue
# 调用image_to_text函数并将结果写入文件
text = image_to_text(image_path)
if text:
with open(output_file_path, 'w', encoding='utf-8') as file:
file.write(text)
print(f"图片 {image_filename} 的识别结果已保存到 {output_file_path}")
else:
print(f"无法识别图片 {image_filename} 中的文字。")
# 检查txt文件夹中的文件数量如果超过60个删除最早的文件
files = os.listdir(output_dir_path)
if len(files) > 60:
# 对文件进行排序,以便找到最早的文件
files.sort()
oldest_file_path = os.path.join(output_dir_path, files[0])
os.remove(oldest_file_path)
print(f"已删除最早的文件:{oldest_file_path}")
# 等待1秒
time.sleep(1)
if __name__ == "__main__":
main()

@ -0,0 +1,242 @@
2024年 07月 01日 星期一 21:13:13 CST: wenzhi.py 被停止, PID: 29387
2024年 07月 01日 星期一 21:13:13 CST: tts.py 运行失败,退出状态码 1, PID: 29405
2024年 07月 01日 星期一 21:13:18 CST: wenzhi.py 被停止, PID: 29408
2024年 07月 01日 星期一 21:13:18 CST: tts.py 运行失败,退出状态码 1, PID: 29435
2024年 07月 01日 星期一 21:13:23 CST: wenzhi.py 被停止, PID: 29456
2024年 07月 01日 星期一 21:13:23 CST: tts.py 运行失败,退出状态码 1, PID: 29474
2024年 07月 01日 星期一 21:14:26 CST: wenzhi.py 被停止, PID: 29817
2024年 07月 01日 星期一 21:14:26 CST: tts.py 运行失败,退出状态码 1, PID: 29835
2024年 07月 01日 星期一 21:14:31 CST: wenzhi.py 被停止, PID: 29838
2024年 07月 01日 星期一 21:14:31 CST: tts.py 运行失败,退出状态码 1, PID: 29865
2024年 07月 01日 星期一 21:16:08 CST: wenzhi.py 被停止, PID: 30373
2024年 07月 01日 星期一 21:16:08 CST: tts.py 运行失败,退出状态码 1, PID: 30391
2024年 07月 01日 星期一 21:16:13 CST: wenzhi.py 被停止, PID: 30412
2024年 07月 01日 星期一 21:16:13 CST: tts.py 运行失败,退出状态码 1, PID: 30466
2024年 07月 01日 星期一 21:16:18 CST: wenzhi.py 被停止, PID: 30469
2024年 07月 01日 星期一 21:16:18 CST: tts.py 运行失败,退出状态码 1, PID: 30550
2024年 07月 01日 星期一 21:16:42 CST: wenzhi.py 被停止, PID: 30664
2024年 07月 01日 星期一 21:16:42 CST: tts.py 运行失败,退出状态码 1, PID: 30691
2024年 07月 01日 星期一 21:16:47 CST: wenzhi.py 被停止, PID: 30694
2024年 07月 01日 星期一 21:16:47 CST: tts.py 运行失败,退出状态码 1, PID: 30721
2024年 07月 01日 星期一 21:16:52 CST: wenzhi.py 被停止, PID: 30733
2024年 07月 01日 星期一 21:16:52 CST: tts.py 运行失败,退出状态码 1, PID: 30769
2024年 07月 01日 星期一 21:16:57 CST: wenzhi.py 被停止, PID: 30781
2024年 07月 01日 星期一 21:16:57 CST: tts.py 运行失败,退出状态码 1, PID: 30835
2024年 07月 01日 星期一 21:17:02 CST: wenzhi.py 被停止, PID: 30838
2024年 07月 01日 星期一 21:17:02 CST: tts.py 运行失败,退出状态码 1, PID: 30895
2024年 07月 01日 星期一 21:19:05 CST: wenzhi.py 被停止, PID: 31525
2024年 07月 01日 星期一 21:19:05 CST: tts.py 运行失败,退出状态码 1, PID: 31543
2024年 07月 01日 星期一 21:19:10 CST: wenzhi.py 被停止, PID: 31546
2024年 07月 01日 星期一 21:19:10 CST: tts.py 运行失败,退出状态码 1, PID: 31573
2024年 07月 01日 星期一 21:20:16 CST: wenzhi.py 被停止, PID: 31924
2024年 07月 01日 星期一 21:20:17 CST: tts.py 运行失败,退出状态码 1, PID: 31960
2024年 07月 01日 星期一 21:20:22 CST: wenzhi.py 被停止, PID: 31981
2024年 07月 01日 星期一 21:20:22 CST: tts.py 运行失败,退出状态码 1, PID: 32008
2024年 07月 01日 星期一 21:20:27 CST: wenzhi.py 被停止, PID: 32029
2024年 07月 01日 星期一 21:20:27 CST: tts.py 运行失败,退出状态码 1, PID: 32056
2024年 07月 01日 星期一 21:20:32 CST: wenzhi.py 被停止, PID: 32059
2024年 07月 01日 星期一 21:20:32 CST: tts.py 运行失败,退出状态码 1, PID: 32086
2024年 07月 01日 星期一 21:20:37 CST: wenzhi.py 被停止, PID: 32125
2024年 07月 01日 星期一 21:20:37 CST: tts.py 运行失败,退出状态码 1, PID: 32161
2024年 07月 01日 星期一 21:20:42 CST: wenzhi.py 被停止, PID: 32191
2024年 07月 01日 星期一 21:20:42 CST: tts.py 运行失败,退出状态码 1, PID: 32264
2024年 07月 01日 星期一 21:20:47 CST: wenzhi.py 被停止, PID: 32267
2024年 07月 01日 星期一 21:20:47 CST: tts.py 运行失败,退出状态码 1, PID: 32303
2024年 07月 01日 星期一 21:20:52 CST: wenzhi.py 被停止, PID: 32306
2024年 07月 01日 星期一 21:20:52 CST: tts.py 运行失败,退出状态码 1, PID: 32351
2024年 07月 01日 星期一 21:20:57 CST: wenzhi.py 被停止, PID: 32354
2024年 07月 01日 星期一 21:20:57 CST: tts.py 运行失败,退出状态码 1, PID: 32426
2024年 07月 01日 星期一 23:05:26 CST: wenzhi.py 被停止, PID: 8301
2024年 07月 01日 星期一 23:05:26 CST: tts.py 运行失败,退出状态码 1, PID: 8318
2024年 07月 01日 星期一 23:05:28 CST: wenzhi.py 被停止, PID: 8322
2024年 07月 01日 星期一 23:05:28 CST: tts.py 运行失败,退出状态码 1, PID: 8339
2024年 07月 01日 星期一 23:05:30 CST: wenzhi.py 被停止, PID: 8352
2024年 07月 01日 星期一 23:05:30 CST: tts.py 运行失败,退出状态码 1, PID: 8369
2024年 07月 01日 星期一 23:05:32 CST: wenzhi.py 被停止, PID: 8373
2024年 07月 01日 星期一 23:05:32 CST: tts.py 运行失败,退出状态码 1, PID: 8400
2024年 07月 01日 星期一 23:05:34 CST: wenzhi.py 被停止, PID: 8422
2024年 07月 01日 星期一 23:05:34 CST: tts.py 运行失败,退出状态码 1, PID: 8448
2024年 07月 01日 星期一 23:09:24 CST: wenzhi.py 被停止, PID: 10042
2024年 07月 01日 星期一 23:09:24 CST: tts.py 运行失败,退出状态码 1, PID: 10069
2024年 07月 01日 星期一 23:09:26 CST: wenzhi.py 被停止, PID: 10073
2024年 07月 01日 星期一 23:09:27 CST: tts.py 运行失败,退出状态码 1, PID: 10090
2024年 07月 01日 星期一 23:09:29 CST: wenzhi.py 被停止, PID: 10121
2024年 07月 01日 星期一 23:09:29 CST: tts.py 运行失败,退出状态码 1, PID: 10129
2024年 07月 01日 星期一 23:09:31 CST: wenzhi.py 被停止, PID: 10178
2024年 07月 01日 星期一 23:09:31 CST: tts.py 运行失败,退出状态码 1, PID: 10195
2024年 07月 01日 星期一 23:09:33 CST: wenzhi.py 被停止, PID: 10208
2024年 07月 01日 星期一 23:09:33 CST: tts.py 运行失败,退出状态码 1, PID: 10225
2024年 07月 01日 星期一 23:09:35 CST: wenzhi.py 被停止, PID: 10229
2024年 07月 01日 星期一 23:09:35 CST: tts.py 运行失败,退出状态码 1, PID: 10237
2024年 07月 01日 星期一 23:09:37 CST: wenzhi.py 被停止, PID: 10241
2024年 07月 01日 星期一 23:09:37 CST: tts.py 运行失败,退出状态码 1, PID: 10249
2024年 07月 01日 星期一 23:09:39 CST: wenzhi.py 被停止, PID: 10289
2024年 07月 01日 星期一 23:09:39 CST: tts.py 运行失败,退出状态码 1, PID: 10306
2024年 07月 01日 星期一 23:09:41 CST: wenzhi.py 被停止, PID: 10310
2024年 07月 01日 星期一 23:09:41 CST: tts.py 运行失败,退出状态码 1, PID: 10327
2024年 07月 01日 星期一 23:09:43 CST: wenzhi.py 被停止, PID: 10340
2024年 07月 01日 星期一 23:09:43 CST: tts.py 运行失败,退出状态码 1, PID: 10357
2024年 07月 01日 星期一 23:09:45 CST: wenzhi.py 被停止, PID: 10379
2024年 07月 01日 星期一 23:09:45 CST: tts.py 运行失败,退出状态码 1, PID: 10396
2024年 07月 01日 星期一 23:13:21 CST: wenzhi.py 被停止, PID: 11686
2024年 07月 01日 星期一 23:13:21 CST: tts.py 运行成功, PID: 11694
2024年 07月 01日 星期一 23:13:23 CST: wenzhi.py 被停止, PID: 11698
2024年 07月 01日 星期一 23:13:23 CST: tts.py 运行成功, PID: 11733
2024年 07月 01日 星期一 23:14:23 CST: wenzhi.py 被停止, PID: 12133
2024年 07月 01日 星期一 23:14:23 CST: tts.py 运行成功, PID: 12141
2024年 07月 01日 星期一 23:14:25 CST: wenzhi.py 被停止, PID: 12154
2024年 07月 01日 星期一 23:14:25 CST: tts.py 运行成功, PID: 12180
2024年 07月 01日 星期一 23:16:13 CST: wenzhi.py 被停止, PID: 12910
2024年 07月 01日 星期一 23:16:13 CST: tts.py 运行成功, PID: 12918
2024年 07月 01日 星期一 23:16:15 CST: wenzhi.py 被停止, PID: 12940
2024年 07月 01日 星期一 23:16:15 CST: tts.py 运行成功, PID: 12957
2024年 07月 01日 星期一 23:16:17 CST: wenzhi.py 被停止, PID: 12961
2024年 07月 01日 星期一 23:16:17 CST: tts.py 运行成功, PID: 12978
2024年 07月 01日 星期一 23:16:19 CST: wenzhi.py 被停止, PID: 12982
2024年 07月 01日 星期一 23:16:19 CST: tts.py 运行成功, PID: 12990
2024年 07月 01日 星期一 23:16:21 CST: wenzhi.py 被停止, PID: 12994
2024年 07月 01日 星期一 23:16:21 CST: tts.py 运行成功, PID: 13002
2024年 07月 01日 星期一 23:16:23 CST: wenzhi.py 被停止, PID: 13024
2024年 07月 01日 星期一 23:16:23 CST: tts.py 运行成功, PID: 13041
2024年 07月 01日 星期一 23:16:25 CST: wenzhi.py 被停止, PID: 13054
2024年 07月 01日 星期一 23:16:25 CST: tts.py 运行成功, PID: 13062
2024年 07月 01日 星期一 23:16:27 CST: wenzhi.py 被停止, PID: 13075
2024年 07月 01日 星期一 23:16:27 CST: tts.py 运行成功, PID: 13083
2024年 07月 01日 星期一 23:17:10 CST: wenzhi.py 被停止, PID: 13388
2024年 07月 01日 星期一 23:17:10 CST: tts.py 运行成功, PID: 13396
2024年 07月 01日 星期一 23:17:12 CST: wenzhi.py 被停止, PID: 13400
2024年 07月 01日 星期一 23:17:12 CST: tts.py 运行成功, PID: 13408
2024年 07月 01日 星期一 23:17:23 CST: wenzhi.py 被停止, PID: 13502
2024年 07月 01日 星期一 23:17:23 CST: tts.py 运行成功, PID: 13510
2024年 07月 01日 星期一 23:17:25 CST: wenzhi.py 被停止, PID: 13514
2024年 07月 01日 星期一 23:17:25 CST: tts.py 运行成功, PID: 13522
2024年 07月 01日 星期一 23:17:27 CST: wenzhi.py 被停止, PID: 13526
2024年 07月 01日 星期一 23:17:27 CST: tts.py 运行成功, PID: 13534
2024年 07月 01日 星期一 23:17:59 CST: wenzhi.py 被停止, PID: 13762
2024年 07月 01日 星期一 23:17:59 CST: tts.py 运行失败,退出状态码 1, PID: 13779
2024年 07月 01日 星期一 23:18:01 CST: wenzhi.py 被停止, PID: 13783
2024年 07月 01日 星期一 23:18:01 CST: tts.py 运行失败,退出状态码 1, PID: 13791
2024年 07月 01日 星期一 23:18:03 CST: wenzhi.py 被停止, PID: 13795
2024年 07月 01日 星期一 23:18:03 CST: tts.py 运行失败,退出状态码 1, PID: 13821
2024年 07月 01日 星期一 23:18:05 CST: wenzhi.py 被停止, PID: 13825
2024年 07月 01日 星期一 23:18:05 CST: tts.py 运行失败,退出状态码 1, PID: 13833
2024年 07月 01日 星期一 23:18:07 CST: wenzhi.py 被停止, PID: 13837
2024年 07月 01日 星期一 23:18:07 CST: tts.py 运行失败,退出状态码 1, PID: 13854
2024年 07月 01日 星期一 23:18:09 CST: wenzhi.py 被停止, PID: 13867
2024年 07月 01日 星期一 23:18:09 CST: tts.py 运行失败,退出状态码 1, PID: 13875
2024年 07月 01日 星期一 23:18:11 CST: wenzhi.py 被停止, PID: 13879
2024年 07月 01日 星期一 23:18:11 CST: tts.py 运行失败,退出状态码 1, PID: 13887
2024年 07月 01日 星期一 23:18:13 CST: wenzhi.py 被停止, PID: 13891
2024年 07月 01日 星期一 23:18:13 CST: tts.py 运行失败,退出状态码 1, PID: 13899
2024年 07月 01日 星期一 23:18:15 CST: wenzhi.py 被停止, PID: 13903
2024年 07月 01日 星期一 23:18:15 CST: tts.py 运行失败,退出状态码 1, PID: 13911
2024年 07月 01日 星期一 23:18:17 CST: wenzhi.py 被停止, PID: 13915
2024年 07月 01日 星期一 23:18:18 CST: tts.py 运行失败,退出状态码 1, PID: 13923
2024年 07月 01日 星期一 23:18:20 CST: wenzhi.py 被停止, PID: 13927
2024年 07月 01日 星期一 23:18:20 CST: tts.py 运行失败,退出状态码 1, PID: 13935
2024年 07月 01日 星期一 23:18:22 CST: wenzhi.py 被停止, PID: 13939
2024年 07月 01日 星期一 23:18:22 CST: tts.py 运行失败,退出状态码 1, PID: 13947
2024年 07月 01日 星期一 23:18:24 CST: wenzhi.py 被停止, PID: 13960
2024年 07月 01日 星期一 23:18:24 CST: tts.py 运行失败,退出状态码 1, PID: 13968
2024年 07月 01日 星期一 23:18:26 CST: wenzhi.py 被停止, PID: 13972
2024年 07月 01日 星期一 23:18:26 CST: tts.py 运行失败,退出状态码 1, PID: 13980
2024年 07月 01日 星期一 23:18:28 CST: wenzhi.py 被停止, PID: 13984
2024年 07月 01日 星期一 23:18:28 CST: tts.py 运行失败,退出状态码 1, PID: 13992
2024年 07月 01日 星期一 23:18:30 CST: wenzhi.py 被停止, PID: 13996
2024年 07月 01日 星期一 23:18:30 CST: tts.py 运行失败,退出状态码 1, PID: 14004
2024年 07月 01日 星期一 23:18:32 CST: wenzhi.py 被停止, PID: 14017
2024年 07月 01日 星期一 23:18:32 CST: tts.py 运行失败,退出状态码 1, PID: 14025
2024年 07月 01日 星期一 23:18:34 CST: wenzhi.py 被停止, PID: 14029
2024年 07月 01日 星期一 23:18:34 CST: tts.py 运行失败,退出状态码 1, PID: 14046
2024年 07月 01日 星期一 23:18:36 CST: wenzhi.py 被停止, PID: 14050
2024年 07月 01日 星期一 23:18:36 CST: tts.py 运行失败,退出状态码 1, PID: 14076
2024年 07月 01日 星期一 23:18:38 CST: wenzhi.py 被停止, PID: 14080
2024年 07月 01日 星期一 23:18:38 CST: tts.py 运行失败,退出状态码 1, PID: 14088
2024年 07月 01日 星期一 23:18:40 CST: wenzhi.py 被停止, PID: 14092
2024年 07月 01日 星期一 23:18:40 CST: tts.py 运行失败,退出状态码 1, PID: 14109
2024年 07月 01日 星期一 23:18:42 CST: wenzhi.py 被停止, PID: 14113
2024年 07月 01日 星期一 23:18:42 CST: tts.py 运行失败,退出状态码 1, PID: 14130
2024年 07月 01日 星期一 23:18:44 CST: wenzhi.py 被停止, PID: 14134
2024年 07月 01日 星期一 23:18:44 CST: tts.py 运行失败,退出状态码 1, PID: 14142
2024年 07月 01日 星期一 23:18:46 CST: wenzhi.py 被停止, PID: 14146
2024年 07月 01日 星期一 23:18:46 CST: tts.py 运行失败,退出状态码 1, PID: 14154
2024年 07月 01日 星期一 23:18:48 CST: wenzhi.py 被停止, PID: 14167
2024年 07月 01日 星期一 23:18:48 CST: tts.py 运行失败,退出状态码 1, PID: 14184
2024年 07月 01日 星期一 23:18:50 CST: wenzhi.py 被停止, PID: 14197
2024年 07月 01日 星期一 23:18:50 CST: tts.py 运行失败,退出状态码 1, PID: 14223
2024年 07月 01日 星期一 23:18:52 CST: wenzhi.py 被停止, PID: 14227
2024年 07月 01日 星期一 23:18:52 CST: tts.py 运行失败,退出状态码 1, PID: 14235
2024年 07月 01日 星期一 23:18:54 CST: wenzhi.py 被停止, PID: 14248
2024年 07月 01日 星期一 23:18:54 CST: tts.py 运行失败,退出状态码 1, PID: 14282
2024年 07月 01日 星期一 23:18:56 CST: wenzhi.py 被停止, PID: 14296
2024年 07月 01日 星期一 23:18:56 CST: tts.py 运行失败,退出状态码 1, PID: 14313
2024年 07月 01日 星期一 23:18:58 CST: wenzhi.py 被停止, PID: 14334
2024年 07月 01日 星期一 23:18:58 CST: tts.py 运行失败,退出状态码 1, PID: 14361
2024年 07月 01日 星期一 23:19:00 CST: wenzhi.py 被停止, PID: 14374
2024年 07月 01日 星期一 23:19:00 CST: tts.py 运行失败,退出状态码 1, PID: 14391
2024年 07月 01日 星期一 23:19:02 CST: wenzhi.py 被停止, PID: 14395
2024年 07月 01日 星期一 23:19:02 CST: tts.py 运行失败,退出状态码 1, PID: 14403
2024年 07月 01日 星期一 23:19:04 CST: wenzhi.py 被停止, PID: 14425
2024年 07月 01日 星期一 23:19:04 CST: tts.py 运行失败,退出状态码 1, PID: 14433
2024年 07月 01日 星期一 23:19:06 CST: wenzhi.py 被停止, PID: 14446
2024年 07月 01日 星期一 23:19:07 CST: tts.py 运行失败,退出状态码 1, PID: 14463
2024年 07月 01日 星期一 23:19:09 CST: wenzhi.py 被停止, PID: 14485
2024年 07月 01日 星期一 23:19:09 CST: tts.py 运行失败,退出状态码 1, PID: 14502
2024年 07月 01日 星期一 23:19:11 CST: wenzhi.py 被停止, PID: 14515
2024年 07月 01日 星期一 23:19:11 CST: tts.py 运行失败,退出状态码 1, PID: 14532
2024年 07月 01日 星期一 23:19:13 CST: wenzhi.py 被停止, PID: 14536
2024年 07月 01日 星期一 23:19:13 CST: tts.py 运行失败,退出状态码 1, PID: 14544
2024年 07月 01日 星期一 23:19:15 CST: wenzhi.py 被停止, PID: 14548
2024年 07月 01日 星期一 23:19:15 CST: tts.py 运行失败,退出状态码 1, PID: 14574
2024年 07月 01日 星期一 23:19:17 CST: wenzhi.py 被停止, PID: 14578
2024年 07月 01日 星期一 23:19:17 CST: tts.py 运行失败,退出状态码 1, PID: 14586
2024年 07月 01日 星期一 23:19:19 CST: wenzhi.py 被停止, PID: 14599
2024年 07月 01日 星期一 23:19:19 CST: tts.py 运行失败,退出状态码 1, PID: 14616
2024年 07月 01日 星期一 23:19:21 CST: wenzhi.py 被停止, PID: 14620
2024年 07月 01日 星期一 23:19:21 CST: tts.py 运行失败,退出状态码 1, PID: 14646
2024年 07月 01日 星期一 23:19:23 CST: wenzhi.py 被停止, PID: 14650
2024年 07月 01日 星期一 23:19:23 CST: tts.py 运行失败,退出状态码 1, PID: 14658
2024年 07月 01日 星期一 23:19:25 CST: wenzhi.py 被停止, PID: 14671
2024年 07月 01日 星期一 23:19:25 CST: tts.py 运行失败,退出状态码 1, PID: 14679
2024年 07月 01日 星期一 23:19:27 CST: wenzhi.py 被停止, PID: 14692
2024年 07月 01日 星期一 23:19:27 CST: tts.py 运行失败,退出状态码 1, PID: 14709
2024年 07月 01日 星期一 23:19:29 CST: wenzhi.py 被停止, PID: 14713
2024年 07月 01日 星期一 23:19:29 CST: tts.py 运行失败,退出状态码 1, PID: 14721
2024年 07月 01日 星期一 23:19:31 CST: wenzhi.py 被停止, PID: 14735
2024年 07月 01日 星期一 23:19:31 CST: tts.py 运行失败,退出状态码 1, PID: 14743
2024年 07月 01日 星期一 23:19:33 CST: wenzhi.py 被停止, PID: 14756
2024年 07月 01日 星期一 23:19:33 CST: tts.py 运行失败,退出状态码 1, PID: 14773
2024年 07月 01日 星期一 23:19:35 CST: wenzhi.py 被停止, PID: 14777
2024年 07月 01日 星期一 23:19:35 CST: tts.py 运行失败,退出状态码 1, PID: 14785
2024年 07月 01日 星期一 23:19:37 CST: wenzhi.py 被停止, PID: 14798
2024年 07月 01日 星期一 23:19:37 CST: tts.py 运行失败,退出状态码 1, PID: 14815
2024年 07月 01日 星期一 23:19:39 CST: wenzhi.py 被停止, PID: 14819
2024年 07月 01日 星期一 23:19:39 CST: tts.py 运行失败,退出状态码 1, PID: 14836
2024年 07月 01日 星期一 23:19:41 CST: wenzhi.py 被停止, PID: 14840
2024年 07月 01日 星期一 23:19:41 CST: tts.py 运行失败,退出状态码 1, PID: 14848
2024年 07月 01日 星期一 23:19:43 CST: wenzhi.py 被停止, PID: 14852
2024年 07月 01日 星期一 23:19:43 CST: tts.py 运行失败,退出状态码 1, PID: 14860
2024年 07月 01日 星期一 23:19:45 CST: wenzhi.py 被停止, PID: 14864
2024年 07月 01日 星期一 23:19:45 CST: tts.py 运行失败,退出状态码 1, PID: 14872
2024年 07月 01日 星期一 23:19:47 CST: wenzhi.py 被停止, PID: 14885
2024年 07月 01日 星期一 23:19:47 CST: tts.py 运行失败,退出状态码 1, PID: 14893
2024年 07月 01日 星期一 23:19:49 CST: wenzhi.py 被停止, PID: 14897
2024年 07月 01日 星期一 23:19:49 CST: tts.py 运行失败,退出状态码 1, PID: 14905
2024年 07月 01日 星期一 23:19:51 CST: wenzhi.py 被停止, PID: 14909
2024年 07月 01日 星期一 23:19:51 CST: tts.py 运行失败,退出状态码 1, PID: 14926
2024年 07月 01日 星期一 23:19:53 CST: wenzhi.py 被停止, PID: 14948
2024年 07月 01日 星期一 23:19:53 CST: tts.py 运行失败,退出状态码 1, PID: 14956
2024年 07月 01日 星期一 23:19:55 CST: wenzhi.py 被停止, PID: 14969
2024年 07月 01日 星期一 23:19:55 CST: tts.py 运行失败,退出状态码 1, PID: 14977
2024年 07月 01日 星期一 23:19:58 CST: wenzhi.py 被停止, PID: 14981
2024年 07月 01日 星期一 23:19:58 CST: tts.py 运行失败,退出状态码 1, PID: 15007
2024年 07月 01日 星期一 23:20:00 CST: wenzhi.py 被停止, PID: 15020
2024年 07月 01日 星期一 23:20:00 CST: tts.py 运行失败,退出状态码 1, PID: 15037
2024年 07月 01日 星期一 23:20:02 CST: wenzhi.py 被停止, PID: 15041
2024年 07月 01日 星期一 23:20:02 CST: tts.py 运行失败,退出状态码 1, PID: 15049
2024年 07月 01日 星期一 23:20:04 CST: wenzhi.py 被停止, PID: 15053
2024年 07月 01日 星期一 23:20:04 CST: tts.py 运行失败,退出状态码 1, PID: 15061
2024年 07月 01日 星期一 23:20:06 CST: wenzhi.py 被停止, PID: 15067
2024年 07月 01日 星期一 23:20:06 CST: tts.py 运行失败,退出状态码 1, PID: 15075
2024年 07月 01日 星期一 23:20:08 CST: wenzhi.py 被停止, PID: 15079
2024年 07月 01日 星期一 23:20:08 CST: tts.py 运行失败,退出状态码 1, PID: 15105

@ -0,0 +1,40 @@
#!/bin/bash
# repted.sh
while true; do
# 在后台运行itt目录中的wenzhi.py脚本并获取其PID
python3 itt/wenzhi.py &
wenzhi_pid=$!
# 等待一段时间让wenzhi.py开始执行
sleep 1
# 检查wenzhi.py是否还在运行
if kill -0 $wenzhi_pid 2>/dev/null; then
# wenzhi.py仍在运行尝试停止它
kill $wenzhi_pid
wait $wenzhi_pid
echo "$(date): wenzhi.py 被停止, PID: $wenzhi_pid" >> log.txt
else
# wenzhi.py已经停止记录日志
echo "$(date): wenzhi.py 已经停止, PID: $wenzhi_pid" >> log.txt
fi
# 在后台运行tts目录中的tts.py脚本并获取其PID
python3 tts/tts.py &
tts_pid=$!
# 等待tts.py脚本结束以获取其退出状态
wait $tts_pid
tts_exit_status=$?
# 检查tts.py脚本是否成功运行
if [ $tts_exit_status -eq 0 ]; then
echo "$(date): tts.py 运行成功, PID: $tts_pid" >> log.txt
else
echo "$(date): tts.py 运行失败,退出状态码 $tts_exit_status, PID: $tts_pid" >> log.txt
fi
# 等待一段时间后再重复这个过程
sleep 1
done

@ -0,0 +1,69 @@
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from keras.models import Sequential
from keras.layers import Dense, Embedding, Flatten
from keras.preprocessing.sequence import pad_sequences
from keras.utils import to_categorical
import re
# 文本清洗函数
def clean_text(text):
# 使用正则表达式去除非标准字符
cleaned_text = re.sub(r'[^a-zA-Z0-9\s]', '', text.lower())
return cleaned_text
# 读取文本文件
def read_text_file(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
return f.read()
# 数据准备
def prepare_data(text, max_sequence_length=10):
words = set(clean_text(text).split())
word2index = {word: i for i, word in enumerate(words, 1)}
index2word = {i: word for word, i in word2index.items()}
sentences = text.split('. ')
X, y = [], []
for sentence in sentences:
cleaned_sentence = clean_text(sentence)
tokens = [word2index[word] for word in cleaned_sentence.split() if word in word2index]
for i in range(1, len(tokens)):
X.append(tokens[:-i])
y.append(tokens[i])
# 使用pad_sequences处理变长序列
X = pad_sequences(X, maxlen=max_sequence_length, padding='pre', truncating='post')
y = to_categorical(np.array(y), num_classes=len(word2index))
return X, y, word2index, index2word
# 读取文本文件并准备数据
text = read_text_file('input.txt') # 假设输入文件名为input.txt
X, y, word2index, index2word = prepare_data(text)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 构建NNLM模型这里使用Embedding层来捕获词汇之间的相似性
model = Sequential()
model.add(Embedding(input_dim=len(word2index) + 1, output_dim=32, input_length=max_sequence_length))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(len(word2index), activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy')
# 训练模型
model.fit(np.array([x for x in X_train]), y_train, epochs=10, batch_size=32)
# 预测
predictions = model.predict([x for x in X_test])
predicted_words = [np.argmax(pred) for pred in predictions]
predicted_sentences = [' '.join(index2word[word] for word in [sentence[0]] + [predicted_words[i] for i, _ in enumerate(sentence[1:]) if i < len(predicted_words)])
for sentence in X_test]
# 将预测结果写入文本文件
with open('output.txt', 'w', encoding='utf-8') as f:
for sentence in predicted_sentences:
f.write(sentence + '\n')

@ -0,0 +1,76 @@
import subprocess
import os
import datetime
from datetime import timedelta
import re
def speak_text_from_file(file_path, voice='zh', speed=150, pitch=50, output_file=None):
"""
从文件中读取文本并使用espeak将其转换为语音
:param file_path: 文本文件的路径
:param voice: 使用的声音例如 'zh' 用于中文
:param speed: 语速默认为 150
:param pitch: 音调默认为 50
:param output_file: 如果指定将语音输出保存为WAV文件
"""
with open(file_path, 'r', encoding='utf-8') as file:
text = file.read()
# 构建espeak命令
cmd = ['espeak', '-v', voice, '-s', str(speed), '-p', str(pitch)]
if output_file:
cmd.extend(['-w', output_file])
else:
# 如果没有指定输出文件,则直接播放语音
pass # 这里可以添加其他选项,如音量调整等
# 使用stdin将文本传递给espeak
try:
proc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8')
proc.communicate(input=text)
if proc.returncode != 0:
# 获取并打印错误信息
error_message = proc.stderr.read()
print(f"Error executing espeak: {error_message}")
except Exception as e:
print(f"An error occurred: {e}")
# 获取当前文件夹路径
current_dir = os.getcwd()
# 获取父文件夹路径
parent_dir = os.path.dirname(current_dir)
specific_folder_name = "txt"
specific_folder_path = os.path.join(current_dir, specific_folder_name)
# 列出当前文件夹中的所有txt文件
txt_files = [f for f in os.listdir(specific_folder_path) if f.endswith('.txt')]
# 提取文件名中的数字,并找出最大的数字
max_number = -1
max_file = None
for txt_file in txt_files:
# 使用正则表达式提取文件名中的数字
match = re.search(r'^(\d+)\.txt$', txt_file)
if match:
file_number = int(match.group(1))
if file_number > max_number:
max_number = file_number
max_file = txt_file
# 检查是否找到了数字命名最大的txt文件
if max_file:
file_path = os.path.join(current_dir, max_file)
# 调用函数来朗读文本文件
speak_text_from_file(file_path, voice='zh', speed=140, pitch=55)
# 如果你想要将语音保存为WAV文件可以这样做
output_wav_file = 'output/output.wav' # WAV文件的输出路径
speak_text_from_file(file_path, voice='zh', speed=140, pitch=55, output_file=output_wav_file)
else:
print("没有找到数字命名最大的txt文件。")
print(specific_folder_path)

@ -1,30 +0,0 @@
# asr-linux-cpp-demo
## 简介
Linux C++ SDK 仅有在线长语音功能,包含在线语义。没有任何离线功能。
- 仅支持x64 linux 操作系统 g++ 4.8 以上版本
在centos 4 6 7 及ubuntu 14.04 g++ 4.8 版本测试通过
**SDK内部限制个线程并发即最多支持个音频的实时识别。 **
## 运行
sample目录下有三个实例工程
sample/asr 运行 sh build_and_run.sh
sample/asrDemo2 下 run目录中运行 sh build_and_run.sh 。同时也是为Clion工程
sample/asrDemo-srt 阅读该目录下的readme文件再运行
## 完整文档
http://ai.baidu.com/docs#/ASR-Linux-SDK/top
## 项目地址
https://github.com/Baidu-AIP/asr-linux-cpp-demo

@ -1,2 +0,0 @@
3.0.0.30628d440-V1
1. 新增自训练平台支持LMID参数

@ -1,6 +0,0 @@
cd sample
cd asr && make clean && rm core main *.log
cd ..
cd asrDemo2/run && make clean
cd ../..
cd asrDemo-srt && rm -rf run/*

@ -1,234 +0,0 @@
//
// bds_ASRDefines.hpp
// SDKTester
//
// Created by baidu on 16/2/23.
// Copyright © 2016年 baidu. All rights reserved.
//
#ifndef bds_ASRDefines_h
#define bds_ASRDefines_h
#include <string>
//#include "bds_int_types.h"
#include <stdint.h>
namespace bds {
#pragma mark - 设定采样率
typedef enum TBDVoiceRecognitionRecordSampleRateFlags
{
EVoiceRecognitionRecordSampleRateAuto = 0,
EVoiceRecognitionRecordSampleRate8K,
EVoiceRecognitionRecordSampleRate16K,
} TBDVoiceRecognitionRecordSampleRateFlags;
#pragma mark - 语音识别类型
typedef enum TBDVoiceRecognitionProperty
{
EVoiceRecognitionPropertyMusic = 10001, // 音乐
EVoiceRecognitionPropertyVideo = 10002, // 视频
EVoiceRecognitionPropertyApp = 10003, // 应用
EVoiceRecognitionPropertyWeb = 10004, // web
EVoiceRecognitionPropertySearch = 10005, // 热词
EVoiceRecognitionPropertyEShopping = 10006, // 电商&购物
EVoiceRecognitionPropertyHealth = 10007, // 健康&母婴
EVoiceRecognitionPropertyCall = 10008, // 打电话
EVoiceRecognitionPropertySong = 10009, // 录歌识别
EVoiceRecognitionPropertyShake = 10010, // 摇一摇拾台
EVoiceRecognitionPropertyMedicalCare = 10052, // 医疗
EVoiceRecognitionPropertyCar = 10053, // 汽车
EVoiceRecognitionPropertyCatering = 10054, // 娱乐餐饮
EVoiceRecognitionPropertyFinanceAndEconomics = 10055, // 财经
EVoiceRecognitionPropertyGame = 10056, // 游戏
EVoiceRecognitionPropertyCookbook = 10057, // 菜谱
EVoiceRecognitionPropertyAssistant = 10058, // 助手
EVoiceRecognitionPropertyRecharge = 10059, // 话费充值
EVoiceRecognitionPropertyMap = 10060, // 地图
EVoiceRecognitionPropertyInput = 20000, // 输入
// 离线垂类
EVoiceRecognitionPropertyContacts = 100014, // 联系人指令
EVoiceRecognitionPropertySetting = 100016, // 手机设置
EVoiceRecognitionPropertyTVInstruction = 100018, // 电视指令
EVoiceRecognitionPropertyPlayerInstruction = 100019, // 播放器指令
EVoiceRecognitionPropertyRadio = 100020, // 收音机
} TBDVoiceRecognitionProperty;
#pragma mark - 设置识别语言
typedef enum TBDVoiceRecognitionLanguage
{
EVoiceRecognitionLanguageChinese = 0,
EVoiceRecognitionLanguageCantonese,
EVoiceRecognitionLanguageEnglish,
EVoiceRecognitionLanguageSichuanDialect,
} TBDVoiceRecognitionLanguage;
#pragma mark - 语音识别请求资源类型
typedef enum TBDVoiceRecognitionProtocol
{
EPROTOCOL_DEFAULT = 0,
EPROTOCOL_SEARCH_NBEST = 1,
EPROTOCOL_INPUT_NBEST_PROTOCOL = 2,
EPROTOCOL_POST_PROTOCOL = 101,
EPROTOCOL_WISE_PROTOCOL = 300,
EPROTOCOL_WISE_TEXT_PROTOCOL = 301,
EPROTOCOL_AUDIO_DA_PROTOCOL = 302,
EPROTOCOL_NLU_PROTOCOL = 303,
EPROTOCOL_NLU_TEXT_PROTOCOL = 304,
EPROTOCOL_WISE_NLU_PROTOCOL = 305,
EPROTOCOL_TALK_PROTOCOL = 306,
EPROTOCOL_SEARCH_MUSIC_PROTOCOL = 1000,
} TBDVoiceRecognitionProtocol;
#pragma mark - 调试日志级别
typedef enum TBDVoiceRecognitionDebugLogLevel
{
EVRDebugLogLevelOff = 0,
EVRDebugLogLevelFatal = 1,
EVRDebugLogLevelError = 2,
EVRDebugLogLevelWarning = 3,
EVRDebugLogLevelInformation = 4,
EVRDebugLogLevelDebug = 5,
EVRDebugLogLevelTrace = 6
} TBDVoiceRecognitionDebugLogLevel;
#pragma mark - 语音识别状态
typedef enum TBDVoiceRecognitionClientWorkStatus
{
EVoiceRecognitionClientWorkStatusStartWorkIng, // 识别工作开始,开始采集及处理数据
EVoiceRecognitionClientWorkStatusStart, // 检测到用户开始说话
EVoiceRecognitionClientWorkStatusEnd, // 本地声音采集结束,等待识别结果返回并结束录音
EVoiceRecognitionClientWorkStatusNewRecordData, // 录音数据回调
EVoiceRecognitionClientWorkStatusFlushData, // 连续上屏
EVoiceRecognitionClientWorkStatusFinish, // 语音识别功能完成,服务器返回正确结果
EVoiceRecognitionClientWorkStatusMeterLevel, // 当前音量回调
EVoiceRecognitionClientWorkStatusCancel, // 用户取消
EVoiceRecognitionClientWorkStatusError, // 发生错误
/* 离线引擎状态 */
EVoiceRecognitionClientWorkStatusLoaded, // 离线引擎加载完成
EVoiceRecognitionClientWorkStatusUnLoaded, // 离线引擎卸载完成
/* CHUNK状态 */
EVoiceRecognitionClientWorkStatusChunkThirdData, // CHUNK: 识别结果中的第三方数据
EVoiceRecognitionClientWorkStatusChunkVPRes, // CHUNK: 声纹会议返回信息 vp_res
EVoiceRecognitionClientWorkStatusChunkNlu, // CHUNK: 识别结果中的语义结果
EVoiceRecognitionClientWorkStatusChunkEnd, // CHUNK: 识别过程结束
/* LOG */
EVoiceRecognitionClientWorkStatusFeedback, // Feedback: 识别过程反馈的打点数据
/* Only for iOS */
EVoiceRecognitionClientWorkStatusRecorderEnd, // 录音机关闭,页面跳转需检测此时间,规避状态条 (iOS)
/* LONG SPEECH END */
EVoiceRecognitionClientWorkStatusLongSpeechEnd // 长语音结束状态
} TBDVoiceRecognitionClientWorkStatus;
#pragma mark - 语音识别策略
typedef enum TBDVoiceRecognitionStrategy
{
EVR_STRATEGY_ONLINE = 0, // 在线识别
EVR_STRATEGY_OFFLINE, // 离线识别
EVR_STRATEGY_ONLINE_PRI, // 在线优先
EVR_STRATEGY_OFFLINE_PRI, // 离线优先
EVR_STRATEGY_BOTH, // 并行模式
} TBDVoiceRecognitionStrategy;
#pragma mark - 语音识别离线引擎类型
typedef enum TBDVoiceRecognitionOfflineEngineType
{
EVR_OFFLINE_ENGINE_INPUT = 0, // 离线引擎输入法模式
EVR_OFFLINE_ENGINE_NAVI, // 离线引擎导航模式
EVR_OFFLINE_ENGINE_GRAMMER, // 离线引擎语法模式
} TBDVoiceRecognitionOfflineEngineType;
#pragma mark - 识别结果类型
typedef enum TBDVoiceRecognitionResultType
{
EVR_RESULT_TYPE_ERROR = -1, // Error code
EVR_RESULT_TYPE_EMPTY = 0, // Empty reply
EVR_RESULT_TYPE_PARTIAL = 1, // Partial result
EVR_RESULT_TYPE_NBEST = 2, // Nbest result
EVR_RESULT_TYPE_CN = 3, // CN result
EVR_RESULT_TYPE_RESOURCE = 4, // NLU & resource result
EVR_RESULT_TYPE_THIRD = 5, // CHUNK: Third party data
EVR_RESULT_TYPE_FINISH = 6, // CHUNK: Finish
EVR_RESULT_TYPE_END = 7, // CHUNK: End
EVR_RESULT_TYPE_VP_RES = 8, // vp_res
} TBDVoiceRecognitionResultType;
#pragma mark - 网络类型
typedef enum TBDVoiceRecognitionNetworkType
{
EVR_NETWORK_TYPE_NO = 0,
EVR_NETWORK_TYPE_2G,
EVR_NETWORK_TYPE_3G,
EVR_NETWORK_TYPE_4G,
EVR_NETWORK_TYPE_WIFI,
} TBDVoiceRecognitionNetworkType;
#pragma mark - 语音压缩类型
typedef enum TBDVoiceRecognitionAudioCompressionType
{
EVR_AUDIO_COMPRESSION_MIN = 0,
EVR_AUDIO_COMPRESSION_PCM = 1,
EVR_AUDIO_COMPRESSION_BV32 = 2,
EVR_AUDIO_COMPRESSION_AMR = 3,
EVR_AUDIO_COMPRESSION_MAX = 4,
} TBDVoiceRecognitionAudioCompressionType;
#pragma mark - 语音识别错误通知状态分类
typedef enum TVoiceRecognitionClientErrorDomain
{
EVRClientErrorDomainRecord = 10, // 录音设备出错
EVRClientErrorDomainVAD = 20, // 语音数据处理过程出错
EVRClientErrorDomainOnline = 30, // 在线识别引擎出错
EVRClientErrorDomainLocalNetwork = 31, // 本地网络联接出错
EVRClientErrorDomainHTTP = 32, // HTTP协议错误
EVRClientErrorDomainServer = 33, // 服务器返回错误
EVRClientErrorDomainOffline = 34, // 离线引擎返回错误
EVRClientErrorDomainCommon = 40, // 其他错误
} TVoiceRecognitionClientErrorDomain;
#pragma mark - 语音识别错误通知状态
typedef enum TVoiceRecognitionClientErrorCode
{
EVRClientErrorCodeRecoderException = (EVRClientErrorDomainRecord << 16) | (0x0000FFFF & 1), // 录音设备异常
EVRClientErrorCodeRecoderNoPermission = (EVRClientErrorDomainRecord << 16) | (0x0000FFFF & 2), // 无录音权限
EVRClientErrorCodeRecoderUnAvailable = (EVRClientErrorDomainRecord << 16) | (0x0000FFFF & 3), // 录音设备不可用
EVRClientErrorCodeInterruption = (EVRClientErrorDomainRecord << 16) | (0x0000FFFF & 4), // 录音中断
EVRClientErrorCodeVADException = (EVRClientErrorDomainVAD << 16) | (0x0000FFFF & 1), // 前端库异常
EVRClientErrorCodeNoSpeech = (EVRClientErrorDomainVAD << 16) | (0x0000FFFF & 2), // 用户未说话
EVRClientErrorCodeShort = (EVRClientErrorDomainVAD << 16) | (0x0000FFFF & 3), // 用户说话声音太短
EVRClientErrorCodeOnlineExceptioin = (EVRClientErrorDomainOnline << 16) | (0x0000FFFF & 1), // 在线识别引擎异常
EVRClientErrorCodeOnlineNetworkUnavailable = (EVRClientErrorDomainOnline << 16) | (0x0000FFFF & 2), // 网络不可用
EVRClientErrorCodeOnlineTokenFailed = (EVRClientErrorDomainOnline << 16) | (0x0000FFFF & 3), // 获取token失败
EVRClientErrorCodeOnlineResolveUrlFailed = (EVRClientErrorDomainOnline << 16) | (0x0000FFFF & 4), // 解析url失败
EVRClientErrorCodeLocalTimeout = (EVRClientErrorDomainLocalNetwork << 16) | (0x0000FFFF & 1), // 请求超时
EVRClientErrorCodeServerParamError = (EVRClientErrorDomainServer << 16) | (0x0000FFFF & -3001), // 协议参数错误
EVRClientErrorCodeServerRecognError = (EVRClientErrorDomainServer << 16) | (0x0000FFFF & -3002), // 识别过程出错
EVRClientErrorCodeServerNoFindResult = (EVRClientErrorDomainServer << 16) | (0x0000FFFF & -3003), // 没有找到匹配结果
EVRClientErrorCodeServerAppNameUnknownError = (EVRClientErrorDomainServer << 16) | (0x0000FFFF & -3004), // AppnameUnkown错误
EVRClientErrorCodeServerSpeechQualityProblem = (EVRClientErrorDomainServer << 16) | (0x0000FFFF & -3005), // 声音不符合识别要求
EVRClientErrorCodeServerSpeechTooLong = (EVRClientErrorDomainServer << 16) | (0x0000FFFF & -3006), // 语音过长
EVRClientErrorCodeServerSpeechParamsUnknow = (EVRClientErrorDomainServer << 16) | (0x0000FFFF & -3008), // 上行参数未知,(可能是gzip解压失败)
EVRClientErrorCodeServerSpeechNoUploadLink = (EVRClientErrorDomainServer << 16) | (0x0000FFFF & -3011), // 只有下行链接没有上行链接
EVRClientErrorCodeCommonBusy = (EVRClientErrorDomainCommon << 16) | (0x0000FFFF & 4095), // 识别器忙
EVRClientErrorCodeCommonPropertyListInvalid = (EVRClientErrorDomainCommon << 16) | (0x0000FFFF & 2), // 垂类设置有误
EVRClientErrorCodeCommonEnqueueError = (EVRClientErrorDomainCommon << 16) | (0x0000FFFF & 3) // 语音数据enqueue失败
} TVoiceRecognitionClientErrorCode;
#pragma mark -- INTERNAL DEFINES
#pragma mark - 语音识别模式
typedef enum TBDVoiceRecognitionMode {
EVR_MODE_MULTI_SENTENCE = 0,
EVR_MODE_SINGLE_SENTENCE,
EVR_MODE_MUSIC,
EVR_MODE_SHAKE,
} TBDVoiceRecognitionMode;
}
#endif /* bds_ASRDefines_h */

@ -1,54 +0,0 @@
//
// bds_WakeupDefines.hpp
// BDASRCore
//
// Created by baidu on 16/5/20.
// Copyright © 2016年 baidu. All rights reserved.
//
#ifndef bds_WakeupDefines_hpp
#define bds_WakeupDefines_hpp
namespace bds {
#pragma mark - 唤醒引擎状态
typedef enum TWakeupEngineWorkStatus
{
EWakeupEngineWorkStatusStarted, // 引擎开始工作
EWakeupEngineWorkStatusStopped, // 引擎关闭完成
EWakeupEngineWorkStatusLoaded, // 唤醒引擎加载完成
EWakeupEngineWorkStatusUnLoaded, // 唤醒引擎卸载完成
EWakeupEngineWorkStatusTriggered, // 命中唤醒词
EWakeupEngineWorkStatusError, // 引擎发生错误
} TWakeupEngineWorkStatus;
#pragma mark - 唤醒引擎错误分类
typedef enum TWakeupEngineErrorDomain
{
EWakeupEngineErrorDomainRecord = 10, // 录音设备出错
EWakeupEngineErrorDomainEngine = 38, // 录音设备出错
} TWakeupEngineErrorDomain;
#pragma mark - 唤醒引擎错误状态
typedef enum TWakeupEngineErrorCode
{
EWakeupEngineRecoderException = (EWakeupEngineErrorDomainRecord << 16) | (0x0000FFFF & 1), // 录音设备异常
EWakeupEngineRecoderNoPermission = (EWakeupEngineErrorDomainRecord << 16) | (0x0000FFFF & 2), // 无录音权限
EWakeupEngineRecoderUnAvailable = (EWakeupEngineErrorDomainRecord << 16) | (0x0000FFFF & 3), // 录音设备不可用
EWakeupEngineRecoderInterruption = (EWakeupEngineErrorDomainRecord << 16) | (0x0000FFFF & 4), // 录音中断
EWakeupEngineExceptioin = (EWakeupEngineErrorDomainEngine << 16) | (0x0000FFFF & 1), // 唤醒引擎异常
EWakeupEngineNoLicense = (EWakeupEngineErrorDomainEngine << 16) | (0x0000FFFF & 2), // 无授权文件
EWakeupEngineLicenseInvalid = (EWakeupEngineErrorDomainEngine << 16) | (0x0000FFFF & 3), // 授权文件异常
EWakeupEngineWakeupWordsInvalid = (EWakeupEngineErrorDomainEngine << 16) | (0x0000FFFF & 4), // 唤醒次异常
EWakeupEngineDatFileInvalid = (EWakeupEngineErrorDomainEngine << 16) | (0x0000FFFF & 5), // 模型文件异常
EWakeupEngineInitializeFailed = (EWakeupEngineErrorDomainEngine << 16) | (0x0000FFFF & 6), // 引擎初始化失败
EWakeupEngineAllocMemFailed = (EWakeupEngineErrorDomainEngine << 16) | (0x0000FFFF & 7), // 内存分配失败
EWakeupEngineResetFailed = (EWakeupEngineErrorDomainEngine << 16) | (0x0000FFFF & 8), // 引擎重置失败
EWakeupEngineFreeFailed = (EWakeupEngineErrorDomainEngine << 16) | (0x0000FFFF & 9), // 引擎释放失败
EWakeupEngineArchiNotSupportted = (EWakeupEngineErrorDomainEngine << 16) | (0x0000FFFF & 10), // 引擎不支持该架构
} TWakeupEngineErrorCode;
}
#endif /* bds_WakeupDefines_hpp */

@ -1,581 +0,0 @@
#ifndef _BD_ASR_DEFINITIONS_H_
#define _BD_ASR_DEFINITIONS_H_
#include <string>
namespace bds {
/*
* SDKType definition to load ASR SDK from
* BDSpeechSDK::get_instance(const std::string &SDKType, std::string &outErrorDescription);
*/
extern const std::string SDK_TYPE_ASR;
/*================================ Message names for using ASR SDK ===============================*/
extern const std::string ASR_CMD_CONFIG;
extern const std::string ASR_CMD_START;
extern const std::string ASR_CMD_PUSH_AUDIO;
extern const std::string ASR_CMD_STOP;
extern const std::string ASR_CMD_CANCEL;
extern const std::string ASR_CMD_KWS_LOAD;
extern const std::string ASR_CMD_KWS_UNLOAD;
extern const std::string BDS_COMMAND_SET_WRITABLE_LIBRARY_DATA_PATH;
/*=============================== Message names for Events from ASR ==============================*/
extern const std::string asr_callback_name;
extern const std::string CALLBACK_ASR_STATUS;
extern const std::string CALLBACK_ASR_RESULT;
extern const std::string CALLBACK_ASR_LEVEL;
extern const std::string CALLBACK_ERROR_DESC;
extern const std::string CALLBACK_ERROR_CODE;
extern const std::string CALLBACK_ERROR_DOMAIN;
extern const std::string CALLBACK_ERROR_SERIAL_NUM;
/*================================ ASR SDK parameter keys ===============================*/
/*
* ASR_PARAM_KEY_CHUNK_KEY
* Value explanation: Chunk
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_CHUNK_KEY;
/*
* ASR_PARAM_KEY_CUID
* Value explanation: CUID
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_CUID;
/*
* ASR_PARAM_KEY_CHUNK_PARAM
* Value explanation: Chunk
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_CHUNK_PARAM;
/*
* ASR_PARAM_KEY_CHUNK_ENABLE
* Value explanation: Chunk
* Value type: int
* Valid value: Enable (1) or Disable (0)
* Default value: 0
*/
extern const std::string ASR_PARAM_KEY_CHUNK_ENABLE;
/*
* ASR_PARAM_KEY_ENABLE_LONG_SPEECH
* Value explanation:
* Value type: bool
* Valid value: Enable (1) or Disable (0)
* Default value: 0
*/
extern const std::string ASR_PARAM_KEY_ENABLE_LONG_SPEECH;
extern const std::string BDS_PARAM_KEY_WRITABLE_LIBRARY_DATA_PATH;
/*
* ASR_PARAM_KEY_SAVE_AUDIO_ENABLE
* Value explanation: ASR
* Value type: bool
* Default value: false
*/
extern const std::string ASR_PARAM_KEY_SAVE_AUDIO_ENABLE;
/*
* ASR_PARAM_KEY_SAVE_AUDIO_PATH
* Value explanation: ASR
* Value type: string
* Default value: "./sdk_save_audio.d"
*/
extern const std::string ASR_PARAM_KEY_SAVE_AUDIO_PATH;
/*================================ Params with Command ===============================*/
/*
* ASR_PARAM_KEY_REALTIME_DATA
* Value explanation:
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_REALTIME_DATA;
/*================================ Debug ===============================*/
/*
* COMMON_PARAM_KEY_DEBUG_LOG_LEVEL
* Value explanation:
* Value type: TBDVoiceRecognitionDebugLogLevel (int)
* Valid value: Be listed in enum TBDVoiceRecognitionDebugLogLevel
* Default value: EVRDebugLogLevelOff
*/
extern const std::string COMMON_PARAM_KEY_DEBUG_LOG_LEVEL;
/*================================ AUDIO ===============================*/
/*
* MIC_PARAM_KEY_AUDIO_FILE_PATH
* Value explanation:
* Value type: std::string
* Default value: -
*/
extern const std::string MIC_PARAM_KEY_AUDIO_FILE_PATH;
/*
* MIC_PARAM_KEY_NEED_CACHE
* Value explanation: Need cached data in recorder.
* Value type: int
* Value requirement: Optional
* Default value: 0
*/
extern const std::string MIC_PARAM_KEY_NEED_CACHE;
/*
* MIC_PARAM_KEY_DISABLE_AUDIO_OPERATION
* Value explanation: Disable sdk audio operation (Set audio session disactive).
* Value type: int
* Value requirement: Optional
* Default value: 0
*/
extern const std::string MIC_PARAM_KEY_DISABLE_AUDIO_OPERATION;
/*================================ BASIC ===============================*/
/*
* ASR_PARAM_KEY_SDK_VERSION
* Value explanation: SDK version
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_SDK_VERSION;
/*
* ASR_PARAM_KEY_START_TONE
* Value explanation:
* Value type: int
* Valid value: Enable (1) or Disable (0)
* Default value: 0
*/
extern const std::string ASR_PARAM_KEY_START_TONE;
/*
* ASR_PARAM_KEY_STRATEGY
* Value explanation:
* Value type: TBDVoiceRecognitionStrategy (int)
* Valid value: Be listed in enum TBDVoiceRecognitionStrategy
* Default value: EVR_STRATEGY_ONLINE
*/
extern const std::string ASR_PARAM_KEY_STRATEGY;
/*
* ASR_PARAM_KEY_SAMPLE_RATE
* Value explanation:
* Value type: TVoiceRecognitionRecordSampleRateFlags (int)
* Valid value: Be listed in enum TVoiceRecognitionRecordSampleRateFlags
* Default value: EVoiceRecognitionRecordSampleRate16K
*/
extern const std::string ASR_PARAM_KEY_SAMPLE_RATE;
/*================================ VAD-MFE ===============================*/
/*
* ASR_PARAM_KEY_MAX_SPEECH_PAUSE
* Value explanation:
* Value type: float (10ms
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_MAX_SPEECH_PAUSE;
/*
* ASR_PARAM_KEY_MAX_WAIT_DURATION
* Value explanation:
* Value type: float (10ms)
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_MAX_WAIT_DURATION;
/*
* ASR_PARAM_KEY_MFE_DNN_DAT_FILE
* Value explanation: MFE
* Value type: string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_MFE_DNN_DAT_FILE;
/*
* ASR_PARAM_KEY_MFE_CMVN_DAT_FILE
* Value explanation: MFE CMVN
* Value type: string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_MFE_CMVN_DAT_FILE;
/*================================ SERVER FUNCTIONS ===============================*/
/*
* ASR_PARAM_KEY_DISABLE_PUNCTUATION
* Value explanation:
* Value type: int
* Valid Value: Disable (1) or Not Disable (0)
* Default value: 0
*/
extern const std::string ASR_PARAM_KEY_DISABLE_PUNCTUATION;
/*
* ASR_PARAM_KEY_ENABLE_SERVER_VAD
* Value explanation: VAD
* Value type: int
* Valid Value: Enable (1) or Disable (0)
* Default value: 1
* VADSDK
*/
extern const std::string ASR_PARAM_KEY_ENABLE_SERVER_VAD;
/*
* ASR_PARAM_KEY_ENABLE_CONTACTS
* Value explanation:
* Value type: int
* Valid Value: Enable (1) or Disable (0)
* Default value: 0
*/
extern const std::string ASR_PARAM_KEY_ENABLE_CONTACTS;
/*
* ASR_PARAM_KEY_ENABLE_EARLY_RETURN
* Value explanation:
* Value type: int
* Valid Values: Enable (1) or Disable (0)
* Default value: 1
*/
extern const std::string ASR_PARAM_KEY_ENABLE_EARLY_RETURN;
/*================================ SERVER ===============================*/
/*
* ASR_PARAM_KEY_API_SECRET_KEY
* Value explanation: SECRET_KEY
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_SECRET_KEY;
/*
* ASR_PARAM_KEY_SERVER_URL
* Value explanation:
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_SERVER_URL;
/*
* ASR_PARAM_KEY_BROWSER_UA
* Value explanation: (Http request header)UA
* Value type: std::string
* Default value: -[UIWebView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]
*/
extern const std::string ASR_PARAM_KEY_BROWSER_USER_AGENT;
/*
* ASR_PARAM_KEY_APP_ID
* Value explanation: APP_ID
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_APP_ID;
/*
* ASR_PARAM_KEY_LMID
* Value explanation: LMID
* Value type: int
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_LMID;
/*
* ASR_PARAM_KEY_VP_PARAMS
* Value explanation: vp_params
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_VP_PARAMS;
/*
* ASR_PARAM_KEY_API_KEY
* Value explanation: API_KEY
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_API_KEY;
/*================================ Recognition ===============================*/
/*
* ASR_PARAM_KEY_PROPERTY_LIST
* Value explanation:
* Value type: std::string(JSON array)
* Default value: {"property_list":[EVoiceRecognitionPropertySearch]}
* NOTE: Give a JSON string containing "property_list" key. The value for this key
* should be a json array of integers.\
*
*Example: To pass in EVoiceRecognitionPropertyMusic
* and EVoiceRecognitionPropertyVideo the JSON should be as follows:
* {"property_list":[10001,10002]}
*/
extern const std::string ASR_PARAM_KEY_PROPERTY_LIST;
/*
* ASR_PARAM_KEY_PRODUCT_ID
* Value explanation: ID
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_PRODUCT_ID;
/*
* ASR_PARAM_KEY_CITY_ID
* Value explanation: ID
* Value type: int
* Default value: 1
*/
extern const std::string ASR_PARAM_KEY_CITY_ID;
/*
* ASR_PARAM_KEY_PROTOCOL
* Value explanation:
* Value type: TBDVoiceRecognitionProtocol (int)
* Valid value: Be listed in enum TBDVoiceRecognitionProtocol
* Default value: EPROTOCOL_DEFAULT
*/
extern const std::string ASR_PARAM_KEY_PROTOCOL;
/*
* ASR_PARAM_KEY_LANGUAGE
* Value explanation:
* Value type: TBDVoiceRecognitionLanguage (int)
* Valid value: Be listed in enum TBDVoiceRecognitionLanguage
* Default value: EVoiceRecognitionLanguageChinese
*/
extern const std::string ASR_PARAM_KEY_LANGUAGE;
/*
* ASR_PARAM_KEY_ENABLE_NLU
* Value explanation: json
* Value type: int
* Valid value: Enable (1) or Disable (0)
* Default value: 0
*/
extern const std::string ASR_PARAM_KEY_ENABLE_NLU;
/*
* ASR_PARAM_KEY_ENABLE_LOCAL_VAD
* Value explanation:
* Value type: int
* Valid value: Enable (1) or Disable (0)
* Default value: 1
*/
extern const std::string ASR_PARAM_KEY_ENABLE_LOCAL_VAD;
/*
* ASR_PARAM_KEY_ENABLE_MODEL_VAD
* Value explanation: 使modelVAD
* Value type: int
* Valid value: Enable (1) or Disable (0)
* Default value: 0
*/
extern const std::string ASR_PARAM_KEY_ENABLE_MODEL_VAD;
/*
* ASR_PARAM_KEY_MODEL_VAD_DAT_FILE
* Value explanation: modelVAD
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_MODEL_VAD_DAT_FILE;
/*
* ASR_PARAM_KEY_COMPRESSION_TYPE
* Value explanation:
* Value type: TBDVoiceRecognitionAudioCompressionType (int)
* Valid value: Be listed in enum TBDVoiceRecognitionAudioCompressionType
* Default value: EVR_AUDIO_COMPRESSION_BV32
*/
extern const std::string ASR_PARAM_KEY_COMPRESSION_TYPE;
/*
* ASR_PARAM_KEY_ENABLE_DRC
* Value explanation:
* Value type: int
* Valid value: Enable (1) or Disable (0)
* Default value: 1
*/
extern const std::string ASR_PARAM_KEY_ENABLE_DRC;
/*================================ 扩展参数 ===============================*/
/*
* ASR_PARAM_KEY_PAM
* Value explanation:
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_PAM;
/*
* ASR_PARAM_KEY_STC
* Value explanation:
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_STC;
/*
* ASR_PARAM_KEY_LTP
* Value explanation: uid
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_LTP;
/*
* ASR_PARAM_KEY_TXT
* Value explanation:
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_TXT;
/*
* ASR_PARAM_KEY_BUA
* Value explanation: , use for wise
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_BUA;
/*================================ Configuration for contract with server ===============================*/
/*
* ASR_PARAM_KEY_NETWORK_STATUS
* Value explanation:
* Value type: TBDVoiceRecognitionNetworkType (int)
* Valid value: Be listed in enum TBDVoiceRecognitionNetworkType
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_NETWORK_STATUS;
/*
* ASR_PARAM_KEY_APP
* Value explanation: App name
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_APP;
/*
* ASR_PARAM_KEY_PLATFORM
* Value explanation: Platform
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_PLATFORM;
/*
* ASR_PARAM_KEY_COK
* Value explanation: Cookie, use for wise
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_COK;
/*
* ASR_PARAM_KEY_PU
* Value explanation: Pu, use for wise
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_PU;
/*
* ASR_PARAM_KEY_FRM
* Value explanation: From, use for wise
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_FRM;
/*
* ASR_PARAM_KEY_RSV
* Value explanation: Reserve, use for wise
* Value type: std::string (json)
* Default value: -
* Note: Give a json formatted string containing string parameters with keys.
* Example: To pass in 2 parameters (reserved_1 and reserved_2 with values "value 1" and "value 2")
* pass following json string.
* {"reserved_1":"value 1","reserved_2":"value 2"}
*/
extern const std::string ASR_PARAM_KEY_RSV;
/*================================ Offline Engine Verify ===============================*/
/*
* OFFLINE_PARAM_KEY_APP_CODE
* Value explanation: 线APPCODE
* Value type: std::string
* Default value: -
*/
extern const std::string OFFLINE_PARAM_KEY_APP_CODE;
/*
* OFFLINE_PARAM_KEY_LICENSE_FILE_PATH
* Value explanation: 线
* Value type: std::string
* Default value: -
*/
extern const std::string OFFLINE_PARAM_KEY_LICENSE_FILE_PATH;
/*================================ Offline Engine KWS ===============================*/
/*
* ASR_PARAM_KEY_OFFLINE_ENGINE_TYPE
* Value explanation: 线
* Value type: TBDVoiceRecognitionOfflineEngineType (int)
* Valid value: Be listed in enum TBDVoiceRecognitionOfflineEngineType
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_OFFLINE_ENGINE_TYPE;
/*
* ASR_PARAM_KEY_OFFLINE_ENGINE_DAT_FILE_PATH
* Value explanation: 线
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_OFFLINE_ENGINE_DAT_FILE_PATH;
/*
* ASR_PARAM_KEY_OFFLINE_ENGINE_GRAMMER_FILE_PATH
* Value explanation: 线
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_OFFLINE_ENGINE_GRAMMER_FILE_PATH;
/*
* ASR_PARAM_KEY_OFFLINE_ENGINE_GRAMMER_SLOT
* Value explanation: 线
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_OFFLINE_ENGINE_GRAMMER_SLOT;
/*
* ASR_PARAM_KEY_OFFLINE_ENGINE_WAKEUP_WORDS_FILE_PATH
* Value explanation: 使使线
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_OFFLINE_ENGINE_WAKEUP_WORDS_FILE_PATH;
/*
* ASR_PARAM_KEY_OFFLINE_ENGINE_TRIGGERED_WAKEUP_WORD
* Value explanation:
* Value type: std::string
* Default value: -
*/
extern const std::string ASR_PARAM_KEY_OFFLINE_ENGINE_TRIGGERED_WAKEUP_WORD;
extern const std::string PARAM_TYPE_MAX_ASR_INSTANCE_NUM;
}
#endif

@ -1,137 +0,0 @@
//
// bds_WakeupParameters.hpp
// BDASRCore
//
// Created by baidu on 16/5/19.
// Copyright © 2016年 baidu. All rights reserved.
//
#ifndef bds_WakeupParameters_hpp
#define bds_WakeupParameters_hpp
#include <string>
namespace bds {
/*
* SDKType definition to load Wakeup SDK from
* BDSpeechSDK::get_instance(const std::string &SDKType, std::string &outErrorDescription);
*/
extern const std::string SDK_TYPE_WAKEUP;
/*================================ Message names for using Wakeup SDK ===============================*/
extern const std::string WAK_CMD_CONFIG;
extern const std::string WAK_CMD_START;
extern const std::string WAK_CMD_PUSH_AUDIO;
extern const std::string WAK_CMD_STOP;
extern const std::string WAK_CMD_LOAD_ENGINE;
extern const std::string WAK_CMD_UNLOAD_ENGINE;
extern const std::string BDS_COMMAND_SET_WRITABLE_LIBRARY_DATA_PATH;
extern const std::string BDS_COMMAND_GET_EVENT_MANAGER_VERSION;
/*============================= Message names for events from Wakeup SDK ============================*/
extern const std::string wakeup_callback_name;
extern const std::string CALLBACK_WAK_STATUS;
extern const std::string CALLBACK_WAK_RESULT;
extern const std::string CALLBACK_ERROR_DESC;
extern const std::string CALLBACK_ERROR_DOMAIN;
extern const std::string CALLBACK_ERROR_CODE;
extern const std::string BDS_CALLBACK_EVENT_MANAGER_VERSION;
/*================================ Wakeup command parameters ===============================*/
#pragma mark - Debug
/*
* COMMON_PARAM_KEY_DEBUG_LOG_LEVEL
* Value explanation:
* Value type: TBDVoiceRecognitionDebugLogLevel (int)
* Default value: EVRDebugLogLevelOff
*/
extern const std::string COMMON_PARAM_KEY_DEBUG_LOG_LEVEL;
#pragma mark - Offline Engine Verify
/*
* OFFLINE_PARAM_KEY_APP_CODE
* Value explanation: 线APPCODE
* Value type: std::string
* Default value: -
*/
extern const std::string OFFLINE_PARAM_KEY_APP_CODE;
/*
* OFFLINE_PARAM_KEY_LICENSE_FILE_PATH
* Value explanation: 线
* Value type: std::string
* Default value: -
*/
extern const std::string OFFLINE_PARAM_KEY_LICENSE_FILE_PATH;
/*
* OFFLINE_PARAM_KEY_APP_NAME
* Value explanation: 线APPNAME (Linux)
* Value type: std::string
* Default value: -
*/
extern const std::string OFFLINE_PARAM_KEY_APP_NAME;
/*
* OFFLINE_PARAM_KEY_CUID
* Value explanation: 线CUID (Android)
* Value type: std::string
* Default value: -
*/
extern const std::string OFFLINE_PARAM_KEY_CUID;
/*
* OFFLINE_PARAM_KEY_JNI_CONTEXT
* Value explanation: 线JNI_CONTEXT (Android)
* Value type: std::string
* Default value: -
*/
extern const std::string OFFLINE_PARAM_KEY_JNI_CONTEXT;
#pragma mark - Offline Engine Wakeup
/*
* WP_PARAM_KEY_ENABLE_DNN_WAKEUP
* Value explanation: 使DNN
* Value type: bool
* Default value: false
*/
extern const std::string WP_PARAM_KEY_ENABLE_DNN_WAKEUP;
/*
* WP_PARAM_KEY_WAKEUP_WORDS
* Value explanation:
* Value type: std::vector
* Value type: std::string (json format list of words, UTF-8 encoded, list key "words")
* Default value: -
* Example: std::string("{\"words\":[\"小度你好\",\"百度你好\"]}")
*/
extern const std::string WP_PARAM_KEY_WAKEUP_WORDS;
/*
* WP_PARAM_KEY_WAKEUP_WORDS_FILE_PATH
* Value explanation:
* Value type: std::string
* Default value: -
*/
extern const std::string WP_PARAM_KEY_WAKEUP_WORDS_FILE_PATH;
/*
* WP_PARAM_KEY_WAKEUP_DAT_FILE_PATH
* Value explanation:
* Value type: std::string
* Default value: -
*/
extern const std::string WP_PARAM_KEY_WAKEUP_DAT_FILE_PATH;
extern const std::string BDS_PARAM_KEY_WRITABLE_LIBRARY_DATA_PATH;
}
#endif /* bds_WakeupParameters_hpp */

@ -1,66 +0,0 @@
/***************************************************************************
*
* Copyright (c) 2016 Baidu.com, Inc. All Rights Reserved
*
**************************************************************************/
/**
* @file BDSSDKMessage.hpp
* @author Vaino(lappivaeinoe@baidu.com)
* @date 2016/10/26 17:51:32
* @brief Message container to pass commands to SDK and receive events/callbacks from the SDK
*
**/
#ifndef _BDS_SDK_MESSAGE_HPP_
#define _BDS_SDK_MESSAGE_HPP_
#include <map>
#include <vector>
#include <string>
namespace bds {
extern const std::string DATA_CHUNK;
class BDSSDKMessageImpl;
class BDSSDKMessage{
public:
BDSSDKMessage(const std::string &p_name);
BDSSDKMessage();
BDSSDKMessage(const BDSSDKMessage &m);
virtual BDSSDKMessage& operator=(const BDSSDKMessage &m);
std::string name;
/*
char* data;
unsigned int length;
*/
virtual ~BDSSDKMessage();
/* Set parameters to message */
void set_parameter(const std::string &key, const std::string &value);
void set_parameter(const std::string &key, int value);
void set_parameter(const std::string &key, float value);
void set_parameter(const std::string &key, const char* value, int valueLen);
void set_parameter(const std::string &key, const std::vector<std::string> &value);
/* Get keys for parameters set to message */
std::vector<std::string> string_param_keys();
std::vector<std::string> int_param_keys();
std::vector<std::string> float_param_keys();
std::vector<std::string> char_param_keys();
std::vector<std::string> vector_param_keys();
/* Get parameters from message */
bool get_parameter(const std::string &key, std::string &outValue);
bool get_parameter(const std::string &key, int &outValue);
bool get_parameter(const std::string &key, float &outValue);
bool get_parameter(const std::string &key, const char* &outValue, int &outValueLen);
bool get_parameter(const std::string &key, std::vector<std::string> &outValue);
private:
BDSSDKMessageImpl* _impl;
friend class BDSSDKMessageImpl;
};
}
#endif

@ -1,49 +0,0 @@
/***************************************************************************
*
* Copyright (c) 2016 Baidu.com, Inc. All Rights Reserved
*
**************************************************************************/
/**
* @file BDSpeechSDK.hpp
* @author Vaino(lappivaeinoe@baidu.com)
* @date 2016/10/26 17:52:07
* @brief Main interface for speech SDK for Linux.
*
**/
#ifndef _BDS_SPEECH_SDK_HPP_
#define _BDS_SPEECH_SDK_HPP_
#include <string>
#include "BDSSDKMessage.hpp"
namespace bds {
class BDSpeechSDK{
public:
static BDSpeechSDK* get_instance(const std::string &SDKType, std::string &outErrorDescription);
virtual void set_event_listener(void(*listener)(BDSSDKMessage&,void*), void* userParam) = 0;
static void release_instance(BDSpeechSDK* instance);
virtual bool post(BDSSDKMessage &message, std::string &outErrorDescription) = 0;
/*
* Cleanup for closing the program.
* This function will clean up some globals and makes sure that
* everything has been stopped before returning.
* Call is needed only when the whole program is about to shut down
* Not calling this function before returning from main() function of the program may lead to a crash due to async nature of release_instance() functions.
*/
static void do_cleanup();
static void open_log_file(const char *logFileName, int fileSize = 0);
static void close_log_file();
static std::string get_sdk_version();
static int set_global_param(const std::string& param_type, void* value, std::string &outErrorDescription);
protected:
BDSpeechSDK();
virtual ~BDSpeechSDK();
};
}
#endif

Binary file not shown.

File diff suppressed because one or more lines are too long

@ -1,54 +0,0 @@
vec 26
1.485246e+01
1.579741e+01
1.663629e+01
1.698390e+01
1.708107e+01
1.745045e+01
1.752832e+01
1.758490e+01
1.746364e+01
1.743286e+01
1.744198e+01
1.735617e+01
1.735499e+01
1.730315e+01
1.726894e+01
1.729055e+01
1.728198e+01
1.718504e+01
1.712417e+01
1.710584e+01
1.715915e+01
1.723995e+01
1.730050e+01
1.728485e+01
1.728487e+01
1.729697e+01
vec 26
2.764144e-01
2.703758e-01
2.584008e-01
2.514187e-01
2.496835e-01
2.436650e-01
2.391809e-01
2.393867e-01
2.416821e-01
2.443231e-01
2.473226e-01
2.507182e-01
2.540205e-01
2.566869e-01
2.590701e-01
2.611003e-01
2.630226e-01
2.658522e-01
2.699072e-01
2.724641e-01
2.723619e-01
2.699174e-01
2.670183e-01
2.660550e-01
2.658852e-01
2.637595e-01

@ -1 +0,0 @@
fAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõfAEYGGtÓEYXgB_ZBòõ

@ -1 +0,0 @@
66af2eef7a9e6cf37646e6a0c9c0abcbb2149789b4a8c5532796731a694e7254b2f9c4815e0dd162633078eec0e09d31d88485feb9c9980c7d47bd98b0cb413e749e35f7751fa6dc05efe64003bbf8e1c145e4c9b1a625e268cb9bca9b123f7c13992c4a751a85bf356019726c17197279b637d6868a5fe93a59b54cedf4d60d844782908589335de28e5fe6eeba404ee827431a2ee60edaf013c2ca14ba062a2e8e3ee99ec7664a48e646e216a1e7267971fdad4d14f14dda1912723e87408cb244ac92321f6abf04df4a6bf6c2a05a0aecd4d307ed10c461a109315a7bf0b8dd2870d59c4e8ea1b5395fa15da2a4f3f7081cc6bb8543b8f4e240838eb41290

@ -1,54 +0,0 @@
vec 26
1.485246e+01
1.579741e+01
1.663629e+01
1.698390e+01
1.708107e+01
1.745045e+01
1.752832e+01
1.758490e+01
1.746364e+01
1.743286e+01
1.744198e+01
1.735617e+01
1.735499e+01
1.730315e+01
1.726894e+01
1.729055e+01
1.728198e+01
1.718504e+01
1.712417e+01
1.710584e+01
1.715915e+01
1.723995e+01
1.730050e+01
1.728485e+01
1.728487e+01
1.729697e+01
vec 26
2.764144e-01
2.703758e-01
2.584008e-01
2.514187e-01
2.496835e-01
2.436650e-01
2.391809e-01
2.393867e-01
2.416821e-01
2.443231e-01
2.473226e-01
2.507182e-01
2.540205e-01
2.566869e-01
2.590701e-01
2.611003e-01
2.630226e-01
2.658522e-01
2.699072e-01
2.724641e-01
2.723619e-01
2.699174e-01
2.670183e-01
2.660550e-01
2.658852e-01
2.637595e-01

@ -1 +0,0 @@
79bb1333ee01a55a5e1f51286d7c4bc4

@ -1,39 +0,0 @@
## asr Makefile ##
CC=g++
#AR=ar
#FILE_NAME=$(src)
FILE_NAME=src/main.cpp
INC_PATH= -I../../include\
-I../../include/ASR\
SRC_PATH=./src
OBJ_PATH=.
TARGET=$(basename $(FILE_NAME))
LIB_PATH=../../lib
EXTERN_PATH=../../extern/lib
TARGET_PATH=./
CPPFLAGS1=-Wall -O0 -fPIC -g -D__LINUX__ -Wno-unknown-pragmas -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++11
CPPFLAGS= $(CPPFLAGS1) $(LIB_PATH)/libBDSpeechSDK.a $(EXTERN_PATH)/libcurl.a $(EXTERN_PATH)/libiconv.a $(EXTERN_PATH)/libz.a $(EXTERN_PATH)/libssl.a $(EXTERN_PATH)/libcrypto.a $(EXTERN_PATH)/libuuid.a -lrt -ldl -lpthread
SRC_FILE=$(shell cd $(SRC_PATH)&&echo *.cpp)
SRC:=$(foreach n,$(SRC_FILE),$(SRC_PATH)/$(n))
OBJ_FILE=$(SRC_FILE:.cpp=.o)
OBJ:=$(foreach n,$(OBJ_FILE),$(OBJ_PATH)/$(n))
DEP_FILE=$(SRC_FILE:.cpp=.d)
DEP:=$(foreach n,$(DEP_FILE),$(OBJ_PATH)/$(n))
$(TARGET):$(SRC)
$(CC) -o $(TARGET) ./$(FILE_NAME) $(INC_PATH) $(CPPFLAGS)
-mv $@ $(TARGET_PATH)
clean:
-rm -f $(OBJ)
-rm -f $(TARGET)
cleanall:
-rm -f $(OBJ)
-rm -f $(TARGET)

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save