(適用于ydm-java接口與后臺,如有誤入谓晌,但愿也能給您帶來幫助)
引子:
起源于社交掠拳,后宮應(yīng)用,當(dāng)時候業(yè)主考量周密纸肉,讓增添這么一個功能溺欧,并推薦使用 圖譜科技 的鑒黃喊熟。說白了就是在視頻聊天時,截取兩者的畫面姐刁,傳給接口芥牌,接口將圖片地址告訴圖譜,圖譜給反饋聂使,色情壁拉、性感、正常柏靶;并給出認(rèn)定的百分比以及是否需要復(fù)審的狀態(tài)弃理。
碎碎念:
- 圖譜注冊一個賬戶都需要人工審核,想要試用還得加客服QQ屎蜓,這里也是一樣的痘昌,官方提供 JavaSDK ,在客服的指引下上傳公鑰炬转,保存私鑰伟众;客服一般會提供一些測試所需的AppKey之類掩完;
- 直到現(xiàn)在Android還做不到在融云視頻聊天時截取圖片上傳啥么,因為各種方面的限制吧蝌矛;所以這個功能只在iOS上是完美的;App端開一個定時器荐吵,按照固定的秒數(shù)截取圖片上傳街佑,以base64的形式,接口解作圖片捍靠,將地址給圖譜發(fā)過去,圖譜就會有返回值了森逮。這個時候各種邏輯啊榨婆,插入數(shù)據(jù)庫啊之類的就開始了;另外褒侧,會做一個判斷良风,在返回值是正常且不需要復(fù)審的情況下,將剛剛那張圖片刪除掉闷供,以節(jié)省服務(wù)器空間烟央;而有嫌疑的圖片就留著,當(dāng)做證據(jù)好了歪脏。
接口處理的代碼:
/**
* 保存鑒黃表信息
*/
public String saveComplaint(Integer video_order,String img,String privateKey,HttpServletRequest request){
//查詢雙方
BalanceOfPayments balanceOfPayments = balanceOfPaymentsMapper.queryConsumeById(video_order);
//保存
Complaint complaint = new Complaint();
//請求圖譜
ArrayList<String> imgs = new ArrayList<String>();
imgs.add(TUPUIMGPATH + img);
String[] tags = {String.valueOf(video_order)};
//返回值
JSONObject obj = TuPuApi.tuPuApi(imgs, tags, privateKey);
//驗證是否請求成功
Integer code = (Integer) obj.get("code");
if(0 == code){
log.info("成功接收到圖譜的反饋疑俭,調(diào)用鑒黃成功");
JSONObject objImg = (JSONObject) obj.get("54bcfc6c329af61034f7c2fc");
List<JSONObject> fileList = (List<JSONObject>) objImg.get("fileList");
Double rate = (Double) fileList.get(0).get("rate");
Integer label = (Integer) fileList.get(0).get("label");
String name = (String) fileList.get(0).get("name");
log.info(name);
//fileList.get(0).get("tag");
Boolean flag = (Boolean) fileList.get(0).get("review");
Integer review = 2;
if(flag){
review = 1;
}
complaint.setVideo_order(video_order);//視頻聊天訂單號
complaint.setBuy_id(balanceOfPayments.getBuyPersion().getId());//撥打人
complaint.setSell_id(balanceOfPayments.getSellPersion().getId());//接聽者
complaint.setCreate_date(new Date());//鑒黃申請時間
complaint.setReason("視頻聊天自動鑒黃");//鑒黃備注
complaint.setScreenshot(img);//鑒黃投訴圖片
complaint.setState(3);//圖譜審核
complaint.setType(0);//視頻截圖自動投訴
complaint.setLabel(label);//(鑒黃)分類: 0:色情; 1:性感婿失; 2:正常钞艇;
complaint.setReview(review);//(鑒黃)是否需要人工復(fù)審該圖片 1需要 2不需要
complaint.setRate(new BigDecimal(rate));//(鑒黃)圖像被識別為某個分類的概率值
}else{
log.error("鑒黃反饋出錯啄寡,具體原因為:" + obj.get("message"));
return "passbuterror";
}
int count = complaintMapper.add_complaint(complaint);
if(count != 1){
log.error("保存鑒黃信息出錯,視頻訂單id為:" + String.valueOf(video_order));
return "passbuterror";
}
if(complaint.getLabel() == 2 && complaint.getReview() == 2){
//刪除鑒黃圖片
String var = PathUtil.GetAppName(request).replace("/", "\\");
String project = PathUtil.GetAppRealPath(request);
String path = project.replace(var+"\\", "").trim();
FileUtil.delFile(path + img.replace("/", "\\"));
return "pass";
}else if(complaint.getLabel() != 2 && complaint.getReview() == 2){
return "yellow";
}else{
return "maybe";
}
}
圖譜提供的Api:
/**
* 請求圖譜
* @param fileList url的集合
* @param tags 圖片的附屬信息
* @param privateKey 私鑰的路徑
* @return
*/
public static JSONObject tuPuApi(ArrayList<String> fileList,String[] tags,String privateKey){
Api api = new Api(SECRETID, privateKey);
JSONObject result = api.doApiTest(ConfigUtil.UPLOAD_TYPE.UPLOAD_URI_TYPE, fileList,tags);
return result;
}
備注:
- 因為圖譜需要的私鑰是以路徑的形式傳入的哩照,不是像支付寶那樣寫在代碼里的挺物;不應(yīng)該放到upload底下,實際應(yīng)該放到服務(wù)器的某個位置飘弧,做自己的讀取识藤,放到upload下,外界都能訪問到了次伶;
- 每一個(組)圖片都對應(yīng)一個tag痴昧,反饋的時候會帶過來,我這里放的是訂單的id学少,好對后臺的邏輯進(jìn)行判斷剪个;
- 官方的做法是推薦傳很多的url,但是這里是實時的需求版确,所以就單張單張的調(diào)用了扣囊;
- base64的做法我認(rèn)為不太可取,實際上App端傳圖還是以file的形式比較好绒疗,接口這邊做文件上傳的處理就行侵歇,另外圖譜支持url和流的形式上傳圖片,當(dāng)然以url的時候吓蘑,需要做外網(wǎng)映射惕虑,不然圖譜那邊訪問不到;
- 在圖譜官網(wǎng)上傳公鑰的時候磨镶,需要將頭尾保留溃蔫;
- 圖譜應(yīng)該是遠(yuǎn)近聞名了,在融云里琳猫、七牛里均有集成伟叛。