体验万象优图鉴黄服务

腾讯云
基础
0 个任务
剩余 2 个名额

你还可以 创建 或者 使用已有 云主机不限时上机

实验内容

智能鉴黄(Porn Identification)是基于腾讯优图的深度学习图像识别技术,可精确高效识别色情图片和性感图片,准确率高达99.95%。本实验使用 Bash 脚本,结合图片鉴黄 API 接口,带你体验如何对网络图片和本地图片进行智能鉴黄。

首次可免费使用云主机 1 小时 ,到期后云主机将被重置并退库,若想保留成果请及时留用。

实验资源

云服务器

软件环境

CentOS 7.2 64 位

目录

# 体验万象优图鉴黄服务 ## 准备工作 > <time>10min ~ 20min</time> ### 实名认证 [使用万象优图][https://www.qcloud.com/product/PornIdentification?fromSource=lab]服务需要先完成实名认证。如果你之前未进行实名认证,可[点击这里][https://console.qcloud.com/developer/auth]前往认证,本实验使用万象优图可能产生小额费用。 ### 初始化配置 使用万象优图图片鉴黄 API 接口,我们需要先完成以下步骤: - 获取腾讯云账号 APP ID - 配置云 API 公钥/密钥 - 配置优图 bucket 首先在终端执行以下命令,创建目录 `/data/try-pi`,然后进入到该目录: ```bash mkdir -p /data/try-pi && cd $_ ``` > <checker type="output-contains" command="[ -d '/data/try-pi' ]; echo $?" hint="请创建目录 /data/try-pi 先"> > <keyword regex="0" /> > </checker> 然后在目录 `/data/try-pi` 下[创建 init.sh 文件][create-init],在文件中贴入以下脚本: > <locate for="create-init" path="/data/try-pi" hint="右击,创建 init.sh"></locate> ```bash /// <example verb="create" file="/data/try-pi/init.sh" /> #!/bin/bash ######################################### # 基础配置 ######################################### # 腾讯云账号 APP ID # 在如下单引号内填入你的 APPID export APP_ID='' # 云 API 公钥 # 在如单引号内填入你的 SecretID export SECRET_ID='' # 云 API 密钥 # 在如下单引号内填入你的 SecretKey export SECRET_KEY='' # 优图 bucket 名称 # 如果你创建的 bucket 名称不叫 trial,替换为自己创建的即可 export BUCKET_NAME='trial' ``` > <checker type="output-contains" command="[ -f '/data/try-pi/init.sh' ]; echo $?" hint="请创建文件 /data/try-pi/init.sh"> > <keyword regex="0" /> > </checker> 可以看到配置文件中要求我们填入以下信息: - 腾讯云账号 APP ID - 云 API 公钥/密钥 - 优图 bucket 名称 其中,`腾讯云账号 APP ID` 及 `云 API 公钥/密钥` 可以[点击这里][https://console.qcloud.com/capi]前往腾讯云控制台 `云 API 密钥 - 个人 API 密钥` 页面查看。 如果你还没有创建过密钥,可以在该页面点击 `+新建密钥` 按钮创建一个,然后将对应信息填入到 `init.sh` 文件中,按键 [Ctrl + S][save-init] 进行保存。 > <bubble for="save-init"> > Mac 用户请按键盘 `Cmd + S` 进行保存 > </bubble> [点击这里][https://console.qcloud.com/ci/bucket]前往腾讯云控制台 `万象优图 - Bucket管理` 页面创建一个名称为 `trial`,其他选项默认即可。 > <checker type="output-contains" command="cat /data/try-pi/init.sh | grep -P &quot;APP_ID='\\d+'&quot; -c" hint="请在文件 /data/try-pi/init.sh 中配置腾讯云账号 APP ID"> > <keyword regex="1" /> > </checker> > <checker type="output-contains" command="cat /data/try-pi/init.sh | grep -P &quot;SECRET_ID='\\w+'&quot; -c" hint="请在文件 /data/try-pi/init.sh 中配置云 API 公钥"> > <keyword regex="1" /> > </checker> > <checker type="output-contains" command="cat /data/try-pi/init.sh | grep -P &quot;SECRET_KEY='\\w+'&quot; -c" hint="请在文件 /data/try-pi/init.sh 中配置云 API 密钥"> > <keyword regex="1" /> > </checker> ### 将配置项导出为环境变量 在终端中执行以下命令,将各配置项导出为 Shell 环境变量: ```bash source init.sh ``` 可以通过以下命令来验证各配置项是否已正常导出: ```bash echo $APP_ID ``` ```bash echo $SECRET_ID ``` ```bash echo $SECRET_KEY ``` ```bash echo $BUCKET_NAME ``` ## 生成鉴权签名 > <time>5min ~ 10min</time> ### 新建脚本生成签名 基础配置完成后,我们在此基础上还需生成[鉴权签名][about-auth-sign],因为调用万象优图 API 接口需要用到它。我们将创建脚本来生成有效期为 30 天的多次有效的签名。 > <bubble for="about-auth-sign"> > 关于签名鉴权的详细介绍和生成方法可移步[这里][https://cloud.tencent.com/document/product/460/6968] > </bubble> 在目录 `/data/try-pi` 下[创建 gen-sign.sh 文件][create-gen-sign],然后在文件中贴入以下脚本: > <locate for="create-gen-sign" path="/data/try-pi" hint="右击,创建 gen-sign.sh"></locate> ```bash /// <example verb="create" file="/data/try-pi/gen-sign.sh" /> #!/bin/bash ######################################### # 生成多次有效的鉴权签名(有效期 30 天) # @see https://cloud.tencent.com/document/product/460/6968 ######################################### # 当前时间戳(秒) current_time=$(date +%s) # 到期时间戳(秒) expire_time=$(($current_time + 30 * 24 * 60 * 60)) # 随机串,无符号 10 进制整数(不大于 10 位) rand='4815162342' # 历史遗留字段,写死为 0 user_id='0' # 拼接签名串 str="a=$APP_ID&b=$BUCKET_NAME&k=$SECRET_ID&e=$expire_time&t=$current_time&r=$rand&u=$user_id"; # 使用 HMAC-SHA1 算法对签名串加密 sign=$(echo -n $str | openssl dgst -sha1 -hmac $SECRET_KEY -binary) # 对加密串进行 Base64 编码 sign=$(echo -n $sign$str | base64) # 移除多余的空格得到最终的鉴权签名 sign=$(echo -n $sign | tr -d ' ') # 导出鉴权签名 export AUTH_SIGN=$sign ``` > <checker type="output-contains" command="[ -f '/data/try-pi/gen-sign.sh' ]; echo $?" hint="请创建文件 /data/try-pi/gen-sign.sh"> > <keyword regex="0" /> > </checker> > <checker type="output-contains" command="cat /data/try-pi/gen-sign.sh | grep AUTH_SIGN -c" hint="贴入脚本到文件 /data/try-pi/gen-sign.sh 中"> > <keyword regex="1" /> > </checker> ### 将签名导出为环境变量 在终端中[执行以下命令][gen-sign-bonus],生成签名并将签名导出为环境变量: ```bash source gen-sign.sh ``` > <bubble for="gen-sign-bonus"> > 该命令可多次执行,每次执行都会生成新的签名并将签名导出为环境变量 > </bubble> 可以通过以下命令来验证签名是否已正常导出 [:question][icon]: > <bubble for="icon">签名应该是一串经过 Base64 的字符串</bubble> ```bash echo $AUTH_SIGN ``` ## 体验智能鉴黄 > <time>20min ~ 30min</time> ### 准备鉴黄脚本 仍旧在目录 `/data/try-pi` 下[创建 detect-porn.sh 文件][create-detect-porn],然后在文件中贴入以下脚本: > <locate for="create-detect-porn" path="/data/try-pi" hint="右击,创建 detect-porn.sh"></locate> ```bash /// <example verb="create" file="/data/try-pi/detect-porn.sh" /> #!/bin/bash ######################################### # 鉴黄脚本 # @see https://cloud.tencent.com/document/product/460/6900 ######################################### # 图片鉴黄 API 地址 END_POINT='https://service.image.myqcloud.com/detection/porn_detect' # 使用帮助 function usage() { echo "" echo "-h --help" echo "-r --remote-image=网络图片地址" echo "-l --local-image=本地图片地址" echo "" } # 对网络图片进行鉴黄 function detect_remote() { remote_image=$1 curl -X POST \\ -H "Content-Type: application/json" \\ -H "Authorization: $AUTH_SIGN" \\ -d '{"appid":'$APP_ID',"bucket":"'$BUCKET_NAME'","url_list":["'$remote_image'"]}' \\ --silent \\ $END_POINT } # 对本地图片进行鉴黄 function detect_local() { local_image=$1 curl -X POST \\ -H "Content-Type: multipart/form-data" \\ -H "Authorization: $AUTH_SIGN" \\ -F "appid=$APP_ID" \\ -F "bucket=$BUCKET_NAME" \\ -F "image[0]=@$local_image" \\ --silent \\ $END_POINT } # 解析命令入参 while [ "$1" != "" ]; do PARAM=`echo $1 | awk -F= '{print $1}'` VALUE=`echo $1 | awk -F= '{print $2}'` case $PARAM in -h | --help) usage exit ;; -r | --remote-image) detect_remote $VALUE ;; -l | --local-image) detect_local $VALUE ;; *) echo "ERROR: 未知参数 \"$PARAM\"" exit 1 ;; esac shift done ``` > <checker type="output-contains" command="[ -f '/data/try-pi/detect-porn.sh' ]; echo $?" hint="请创建文件 /data/try-pi/detect-porn.sh"> > <keyword regex="0" /> > </checker> > <checker type="output-contains" command="cat /data/try-pi/detect-porn.sh | grep END_POINT -c" hint="贴入脚本到文件 /data/try-pi/detect-porn.sh 中"> > <keyword regex="3" /> > </checker> 在终端中敲入以下命令查看鉴黄脚本使用说明: ```bash bash detect-porn.sh -h ``` 鉴黄脚本是对[万象优图图片鉴黄 API 接口][https://cloud.tencent.com/document/product/460/6900]的实践。可以看到,我们的脚本支持对 `网络图片` 和 `本地图片` 进行鉴黄。 ### 对网络图片进行鉴黄 在终端执行以下命令,可以看到对网络图片的鉴黄结果: ```bash bash detect-porn.sh --remote-image='https://imgcache.qq.com/open_proj/proj_qcloud_v2/gateway/event/pc/ci-identify/css/img/demo/demo_8.jpg' ``` 输出结果应该是一段 JSON 字符串,[点击这里][https://cloud.tencent.com/document/product/460/6934#.E5.9B.9E.E8.B0.83.E8.AE.BE.E7.BD.AE]可以查看输出结果各字段的含义。 ### 对本地图片进行鉴黄 在终端执行执行以下命令,将网络图片下载到云主机 `/data/try-pi` 目录下: ```bash wget https://imgcache.qq.com/open_proj/proj_qcloud_v2/gateway/event/pc/ci-identify/css/img/demo/demo_10.jpg -O /data/try-pi/demo.jpg ``` 下载完成后,右键刷新 `/data/try-pi` 目录,可以看到在该目录下新增了一个名为 `demo.jpg` 的图片,点击可预览该图片。 接下来,在终端执行以下命令,可以看到对该图片的鉴黄结果: ```bash bash detect-porn.sh --local-image='/data/try-pi/demo.jpg' ``` 输出结果应该是一段 JSON 字符串,[点击这里][https://cloud.tencent.com/document/product/460/6934#.E5.9B.9E.E8.B0.83.E8.AE.BE.E7.BD.AE]可以查看输出结果各字段的含义。 当然,你也可以根据上述步骤,替换为自己准备的图片进行鉴黄体验。 ### 完成实验 Well done!通过本实验,我们了解了如何使用图片鉴黄 API 接口(包括生成 API 密钥、创建优图 bucket、生成鉴权签名),以及如何使用接口对网络图片和本地图片进行鉴黄。