官方文档: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. vs 2017 打开 iis express问题

    问题: 更新vs2017 15.6.4后,首次打开网站 iis express 一直报 无法连接到web服务器. 解决办法: 关闭防火墙,在次启动即可,启动成功后,在次打开防火墙也无影响.

  2. Oneinstack 环境安装 Flarum 轻量级论坛程序

    之前做了个论坛,使用的是discuz框架,虽然这个框架已经很成熟,功能也相对较多,但毕竟老框架了,今天尝试用Flarum来搭建一个论坛,Flarum相对来说美观而且速度快 系统环境使用oneinsta ...

  3. JavaScript 基础排序的实现(一)

    作为一个有追求的前端,忙里偷闲(闲得发慌)地复习了一下基础的排序算法,以此文留念. 本篇主要记录O(n²)复杂度的基础算法O(nlogn)的算法将在下次有空(闲得发慌)时更新 在记录时发现Es6语法中 ...

  4. ubuntu在终端下复制粘贴的2种方法

    最近因为项目需要在ubuntu环境下开发(我是用的unbantu虚拟环境),经常要在终端下手动输入很长的文件路径,觉得很麻烦,就谷歌了2种方法如下 你可能会问,什么是ubuntu? 简单来说就是一个基 ...

  5. vsftp搭建文档

    vsftpd端口的作用:控制连接:tcp21端口用于发送FTP命令数据连接:tcp20端口用于上传下载数据 传输模式:分为主动模式和被动模式主动模式是当需要传输数据时,客户端以PORT命令告知服务器, ...

  6. Centos 基本命令不能用恢复方法

    遇到命令都不能用,直接执行下面的语句就可以: export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/roo ...

  7. Error running 'Unnamed': Address localhost:1099 is already in use

    当使用idea运行项目时,出现‘Error running 'Unnamed': Address localhost:1099 is already in use’. 解决方案: 1.打开任务管理器 ...

  8. 页面怎么引用外部css+js代码

    外部css样式:把css样式写到一个文件内,方便使用,减少冗余. 如果使用的是外部css样式,页面怎么引用: 使用 <link rel="stylesheet" type=& ...

  9. 【PHP篇】运算及流程控制

    算数运算: 1.运算符罗列: 算数运算符:[+].[-].[*].[/].[%].[++].[--] 赋值运算符:[=].[+=].[-=].[*=].[/=].[%=].[.=] 比较运算符:[&g ...

  10. dbvisual 9 使用自定义jdk版本运行

    dbvisual 9 不支持jdk1.8 ,当系统默认的jdk是1.8且不方便修改时,可以自行指定运行dbvisual9.2 的jdk版本 打开dbvisgui.bat 将set JAVA_EXEC= ...