折腾好久, 终于发现大厂的文档也堪称混乱. 首先:要用腾讯AI有两个网址可以注册, 算是2种方案, 第一个 https://ai.qq.com/product/face.shtml#shape , 这个我不推荐. 估计是旧版本吧, 用起来很不方便. 这个网址注册出来, 会给每个应用分配一个APPID 和 APPKEY, 格式为: APPID : 2125xxxxxx , APPKEY: jgzPJhxndVxxxxxx , 注意长度明显和下文中注册得到的不一样. 要求自己按文档格式实现HTTP访问的诸多字符串准备, 编程很麻烦.
真正好用的是第二种方法, 在腾讯云上直接注册得到的, 网址是: https://cloud.tencent.com/act/event/aiAllFree#mod-hot2
不管你用哪个服务, 随便点一个接入服务, 比如我点击五官定位, 先得到 SecretId 和 SecretKey , 之后再点接入其他服务, 比如我用了"录音文件识别"和"五官定位", 在这2个服务下面都点了"0元接入" , 否则后面运行程序会提示出错的. 所有应用都用同一个secretid和secretKey, 在账号名字上点击, 出现下图, 点击"项目管理"
再点击访问密钥
新建密钥
用的是这个SecretID(长度36字符)和SecretKey(长度32), 把这个问题搞清楚, 下面的都很简单了. 我一直以为要第一个网址上注册得到的短ID和key, 浪费不少时间.
打开vs2015 , 新建一个C# winform项目, , vs菜单:工具->Nuget 管理器->管理解决方案的NuGet程序包, 安装TencentCloudSDK v3.0.42, emgu.cv, newtonjson等
腾讯云原始SDK的例子,完全把人搞懵,我要语音识别,五官定位,你叫我先整明白啥叫cvm? 虚拟主机和AI天壤之别好吗? 所有代码中的注释都完全一样.废话注释还特别多, 从百十行重复废话注释中寻找5,6行有用的代码. 真不敢相信大厂能这么写代码. 删除掉注释后发现其实腾讯SDK真的用起来好简单, 所有应用使用同一个ID和KEY, 下面的代码实现了cvm主机查询(原厂例子), 语音mp3识别文字, 五官定位并显示3个功能. 记录下来防止走弯路. 注意里面的ID/KEY替换成自己的,否则提示鉴权错误.
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using TencentCloud.Common;
using TencentCloud.Common.Profile;
using TencentCloud.Cvm.V20170312;
using TencentCloud.Cvm.V20170312.Models;
using TencentCloud.Aai.V20180522;
using TencentCloud.Aai.V20180522.Models;
using TencentCloud.Iai.V20180301;
using TencentCloud.Iai.V20180301.Models;
using Newtonsoft.Json;
using System.IO;
using Newtonsoft.Json.Linq;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
namespace WindowsFormsApp1
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private async Task<string> GetZones()
{
try
{
// 必要步骤: // 腾讯云账户密钥对secretId,secretKey。
// 下面全部应当替换成自己的ID和key才能运行.
Credential cred = new Credential
{
SecretId = "AKIDEdw5zjxxxxxxxxxxxxxxxxxxxxxxxxxx",
SecretKey = "5FBsKbkxxxxxxxxxxxxxxxxxxxxxxxxx"
};
// 实例化一个client, 不必要的选项都屏蔽
ClientProfile clientProfile = new ClientProfile();
HttpProfile httpProfile = new HttpProfile();
// 代理服务器,当你的环境下有代理服务器时设定
httpProfile.WebProxy = Environment.GetEnvironmentVariable("HTTPS_PROXY");
clientProfile.HttpProfile = httpProfile;
// 实例化要请求产品(以cvm为例)的client对象
CvmClient client = new CvmClient(cred, "ap-guangzhou", clientProfile);
DescribeZonesRequest req = new DescribeZonesRequest();
DescribeZonesResponse resp = await client.DescribeZones(req);
// 输出json格式的字符串回包
return AbstractModel.ToJsonString(resp);
} catch (Exception e)
{
return e.ToString();
}
}
private async void Button1_Click(object sender, EventArgs e)
{
var result = await GetZones();
textBox1.Text = result;
}
private async void btnMp3ToTxt_Click(object sender, EventArgs e)
{
txtBoxMp3.Text = "";
var result = await GetTxtFromMp3( txtBoxFileName.Text);
txtBoxMp3.Text = result;
}
private async Task<string> GetTxtFromMp3(string strFullPathMp3FileName)
{
try
{
// 必要步骤:腾讯云账户密钥对secretId,secretKey。
Credential cred = new Credential
{
SecretId = "AKIDEdw5zjxxxxxxxxxxxxxxxxxxxxxxxxxx",
SecretKey = "5FBsKbkxxxxxxxxxxxxxxxxxxxxxxxxx"
};
// 实例化一个client选项
ClientProfile clientProfile = new ClientProfile();
HttpProfile httpProfile = new HttpProfile();
clientProfile.HttpProfile = httpProfile;
Aai