官方文档:https://cloud.tencent.com/document/product/641/12422

请求官方API及签名的生成代码如下:

            var urlList = new List<string>();
urlList.Add(url);
//请求参数
var req = new { appid = ConfigurationManager.AppSettings["AppId"], url_list = urlList };
var psotJson = JsonConvert.SerializeObject(req); TencentCloundPicHelper tencentHelper = new TencentCloundPicHelper();
var info = tencentHelper.SendPost(psotJson);
TencentJianHuangResponse response = JsonConvert.DeserializeObject<TencentJianHuangResponse>(info); if (response != null && response.result_list.Any())
{
if (response.result_list.FirstOrDefault().code == )//成功
{
if (response.result_list.FirstOrDefault().data.result != )//是黄图
{
responseMessage.Message = CommonConst.PicNolegal;
responseMessage.ResultCode = "";
responseMessage.Info = new { Url = url, TencentJson = info };
return responseMessage;
}
}
}
    public class TencentJianHuangResponse
{
public List<ImgInfo> result_list = new List<ImgInfo>();
} public class ImgInfo{ /// <summary>
/// 错误码,0 为成功
/// </summary>
public int code { set; get; } /// <summary>
/// 服务器返回的信息
/// </summary>
public string message { set; get; } /// <summary>
/// 当前图片的 url
/// </summary>
public string url { set; get; } /// <summary>
/// 具体查询数据,具体见实体
/// </summary>
public Data data;
} public class Data
{
/// <summary>
/// 0 正常,1 黄图,2 疑似图片
/// </summary>
public int result { set; get; } /// <summary>
/// 封禁状态,0 表示正常,1 表示图片已被封禁(只有存储在腾讯云的图片才会被封禁)
/// </summary>
public int forbid_status { set; get; } /// <summary>
/// 识别为黄图的置信度,分值 0-100;是 normal_score , hot_score , porn_score的综合评分
/// </summary>
public decimal confidence { set; get; } /// <summary>
/// 图片为正常图片的评分
/// </summary>
public decimal hot_score { set; get; } /// <summary>
/// 图片为性感图片的评分
/// </summary>
public decimal normal_score { set; get; } /// <summary>
/// 图片为色情图片的评分
/// </summary>
public decimal porn_score { set; get; }
}
    public class TencentCloundPicHelper
{
/// <summary>
/// 发送Post请求腾讯云
/// </summary>
public string SendPost(string postDataStr)
{
var url = @"http://service.image.myqcloud.com/detection/porn_detect"; try
{
System.Net.ServicePointManager.Expect100Continue = false;
var request = (HttpWebRequest)HttpWebRequest.Create(url); request.Method = "POST"; SetHeaderValue(request.Headers, "content-type", "application/json");
SetHeaderValue(request.Headers, "content-length", postDataStr.Length.ToString());
SetHeaderValue(request.Headers, "Host", "service.image.myqcloud.com");
SetHeaderValue(request.Headers, "authorization", GetSign());
var memStream = new MemoryStream(); var jsonByte = Encoding.GetEncoding("utf-8").GetBytes(postDataStr);
memStream.Write(jsonByte, , jsonByte.Length); request.ContentLength = memStream.Length;
var requestStream = request.GetRequestStream();
memStream.Position = ;
var tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, , tempBuffer.Length);
memStream.Close(); requestStream.Write(tempBuffer, , tempBuffer.Length);
requestStream.Close(); var response = request.GetResponse();
using (var s = response.GetResponseStream())
{
var reader = new StreamReader(s, Encoding.UTF8);
return reader.ReadToEnd();
}
}
catch (WebException we)
{
if (we.Status == WebExceptionStatus.ProtocolError)
{
using (var s = we.Response.GetResponseStream())
{
var reader = new StreamReader(s, Encoding.UTF8);
return reader.ReadToEnd();
}
}
else
{
throw we;
}
}
catch (Exception e)
{
throw e;
}
} /// <summary>
/// 获取签名
/// </summary>
public static string GetSign()
{
var appId = ConfigurationManager.AppSettings["AppId"];//开发者的 APPID,接入智能图像时由系统生成
var bucket = "tengxunyun";//Bucket,空间名称,即图片资源的组织管理单元
var secretId = ConfigurationManager.AppSettings["SecretId"];//Secret ID
var secretKey = ConfigurationManager.AppSettings["SecretKey"];//secretKey
var ts = DateTime.UtcNow - new DateTime(, , , , , , );
var currentTime = Convert.ToInt64(ts.TotalSeconds);//当前时间戳,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒,多次签名时,e 应大于 t
var expiredTime = Convert.ToInt64((DateTime.UtcNow.AddMinutes() - new DateTime(, , , , , , )).TotalSeconds);//签名的有效期,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒;单次签名时,e 必须设置为 0
var rand = GetRandom();//随机串,无符号 10 进制整数,用户需自行生成,最长 10 位
var userid = ;//历史遗留字段,请填写为 0
var fileid = "";//资源存储的唯一标识,单次签名必填;多次签名选填,如填写则会验证与当前操作的文件路径是否一致。
var encryptText = $"a={appId}&b={bucket}&k={secretId}&e={expiredTime}&t={currentTime}&r={rand}&u=0&f=";
var sign = Hmacsha1Encrypt(encryptText, secretKey); return sign;
} /// <summary>
/// 设置Http post请求头
/// </summary>
public static void SetHeaderValue(WebHeaderCollection header, string name, string value)
{
var property = typeof(WebHeaderCollection).GetProperty("InnerCollection", BindingFlags.Instance | BindingFlags.NonPublic);
if (property != null)
{
var collection = property.GetValue(header, null) as NameValueCollection;
collection[name] = value;
}
} /// <summary>
/// HMACSHA1算法加密
/// </summary>
private static string Hmacsha1Encrypt(string encryptText, string encryptKey)
{
using (HMACSHA1 mac = new HMACSHA1(Encoding.UTF8.GetBytes(encryptKey)))
{
var hash = mac.ComputeHash(Encoding.UTF8.GetBytes(encryptText));
var pText = Encoding.UTF8.GetBytes(encryptText);
var all = new byte[hash.Length + pText.Length];
Array.Copy(hash, , all, , hash.Length);
Array.Copy(pText, , all, hash.Length, pText.Length);
return Convert.ToBase64String(all);
}
} /// <summary>
/// 获取随机数
/// </summary>
private static int GetRandom()
{
var random = new Random();
var rand = random.Next(, );
return rand;
}
}

腾讯云图片鉴黄集成到C#的更多相关文章

  1. 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期

    腾讯云图片鉴黄集成到C#   官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: public c ...

  2. 5分钟构建无服务图片鉴黄web应用(基于FunctionGraph)

    函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行.即使在一些复杂的web应用场景中,函数工作流也能发挥出令人 ...

  3. 5分钟Serverless实践 | 构建无服务器图片鉴黄Web应用

    Serverless是什么 Serverless中文译为“无服务器”,最早可以追溯到2012年Ken Fromm发表的<Why The Future Of Software And Apps I ...

  4. 5分钟搞定图片鉴黄web应用!

    函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行.通过函数工作流,开发者无需配置和管理服务器,只需关注业务逻 ...

  5. GitHub大佬:供计算机学习鉴黄功能的图片数据库

    ps:学无止境 想要构建一套鉴黄系统,必须有大量的真实图片供计算机进行学习,以便于区分开正常图片和黄色图片. 近期有位加拿大程序员在Github上传了图片列表,里面包含了大量图片地址可以供计算机进行学 ...

  6. 腾讯浏览服务X5内核集成

    腾讯浏览服务X5内核集成https://www.jianshu.com/p/8a7224ff371a TBS 腾讯浏览器服务接入文档https://x5.tencent.com/tbs/guide/s ...

  7. python鉴黄程序

    最近有客户向服务器上传了些垃圾图片,和正常图片混合在一起,大概有10W张的数量,在经历了大概3个小时翻了2000多张的时候,手指抽了下,感觉很不舒服,硬着头皮上,写个程序鉴别下吧,但是怎么搞呢,经过从 ...

  8. nsfwjs鉴黄识别最小化案例

    3个月前,也就是2月份左右吧,Github上出现一个开源项目: Infinite Red, Inc.工作室宣布开源旗下基于tensorflow的tfjs的鉴黄小工具 据说是从15000张图片中 进行机 ...

  9. 机器学习 TensorFlow 实现智能鉴黄

    前言 最近在做一款图床服务,关注公号的小伙伴一定记得小柒曾说过,会在周末放出的,不好意思放大家鸽子了.之所以一直没敢放出,是因为鉴黄接口一直没调试好,虽然我对公号的小伙伴百分之百信任,奈何互联网鱼龙混 ...

随机推荐

  1. poj 3159

    差分约束 我也忘了谁说的了,反正我记得有人说过,只要是差分约束问题都可以转换成图 至少目前看来都是这样的 我一开始spfa+queue超时 看别人博客才知道要用spfa+stack,感觉智商又下降了一 ...

  2. IDEA打开maven项目dependencies红线

    第一步:install报红的项目,从maven库下载需要的包,看看日志还缺哪些本地包,少了就去下,丢到库里.不缺包后,reimport一下一般就OK了,如果还是红的,重启一下就好了. 如果第一步还没好 ...

  3. HDU1262-寻找素数对

    //#include<bits/stdc++.h> #include<map> #include<cstdio> #include<string> #i ...

  4. 蓝桥杯_算法训练_ALGO10_集合运算

    这个题实际上思路是比较简单的,但是需要注意细节问题. 思路:读入数组之后进行排序,然后再求交.并.补集. 首先排序:(使用的是冒泡排序) #include<iostream> using ...

  5. win10个人助理conrtana软件能否支持用户反馈、后续优化

    上网查找了一下,win10的个人助理不支持用户反馈.这些反馈都是用户通过别的途径来发表反馈的信息,这个缺陷让用户不是特别满意,因为反馈信息不再那么简答,变得越来越繁琐.有些人还会担心自己反馈的问题会不 ...

  6. Requests模块—请求

    1. 安装 pip install requests import requests 2. 使用 (1) GET 1. 语法 requests.get(url, params=None, **kwar ...

  7. 第64节:Java中的Spring Boot 2.0简介笔记

    Java中的Spring Boot 2.0简介笔记 spring boot简介 依赖java8的运行环境 多模块项目 打包和运行 spring boot是由spring framework构建的,sp ...

  8. Python - Fabric简介

    1 - Fabric Fabric是一个Python的库,提供了丰富的同SSH交互的接口,可以用来在本地或远程机器上自动化.流水化地执行Shell命令. 非常适合用来做应用的远程部署及系统维护.简单易 ...

  9. yarn组件通信协议简介

    ResourceManager与NodeManager通过ResourceTracker协议通信. NodeManager通过NodeStatusUpdaterImpl中的ResourceTracke ...

  10. 我面试过没有上万人也有十几个,简历要这么写才有hr要你

    今天终于有时间好好给大家写写关于如何写简历,给自己加分了. 这篇文章拖了很久了应该说,本来想在上周写的,但是事情实在是太多,又不想草草了事,所以搁置到现在.今天早上正好空出来了,就马上给大家码出来了. ...