关于百度人脸识别的尝试收获
2017-06-29 13:29
246 查看
1.ajax的跨域请求问题
这里直接给出ajax的请求代码,由于ajax认为跨域的post请求不安全,所以再进行项目实现的时候,必须自己写一个中转的接口,我这里是自己写了一个addface这个接口来接受post请求,才能处理。不用get的方式是因为,图片经过base64编码后作为参数去请求域外接口时,请求体会异常庞大,甚至有时候会让浏览器无法无法解析。而且这里注意一个问题,就是在项目发布到服务器后要注意ajax的请求地址应该改成映射的地址。
2.关于json的处理
$.post("https://cac66068.ngrok.io/GasMonitor/addface", { "image":data1 }, function(data){ //进行判断,json中是否存在error_msg这个key if(data.hasOwnProperty("error_msg")) { alert("注册失败"); } else { alert("注册成功"); } }, "json");
除了这些问题以外,还要注意json类型数据的处理,特别是嵌套类型的json类型的处理,其中json(回调函数中通常写成data).hasOwnProperty(“key”)可以判断json中是否含有”key”这个属性名,这里可以用“data.属性”的方法来获取属性的值,如果是嵌套的话,还要加后续的属性,比如下面的json:
{ "result":[ {"expression":0, "beauty":48.416812896729, "gender":"male", "gender_probability":0.99925523996353, "roll":-1.3796654939651, "glasses_probability":0.99953198432922, "face_probability":0.71843481063843, "yaw":-5.5738277435303, "glasses":1, "expression_probablity":0.99941623210907, "location":{"top":189,"left":100,"width":165,"height":154}, "rotation_angle":0, "pitch":6.1355400085449, "age":27.296012878418} ], "log_id":3239516879, "result_num":1 }
我现在要取result中具体的属性就要这么取:data.result[0].gender、data.result[0].gender、data.result[0].expression
3.图片编码的问题
将图片转成二进制数组,通常用来将图片写入数据库可以这么干,user.setpicture(pic);String imagePath1 = "C:\\Users\\weiguoLiu\\Desktop\\test.jpg"; //将图片转成二进制数组进行上传 byte[] pic = null; File f = new File(imagepath); FileInputStream fis = new FileInputStream(f); pic = new byte[fis.available()]; fis.read(pic); fis.close();
关于base64编码,在拿到后,将头部的前缀去掉,拿到编码的主体:base64.substring(22);js中是imgData.substr(22);到后台进行处理的得到二进制数组直接利用工具类进行解码即可:
byte[] pic = Base64.decode(image);
当然也可以自己写两者的编码互转方式:
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class IMGToBase64 { //图片转化成base64字符串 public static String GetImageStr(String imgPath) { if(imgPath!=null && !"".equals(imgPath) && new File(imgPath).exists()){ //将图片文件转化为字节数组字符串,并对其进行Base64编码处理 String imgFile = imgPath;//待处理的图片 InputStream in = null; 4000 byte[] data = null; //读取图片字节数组 try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } //对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data);//返回Base64编码过的字节数组字符串 }else{ return null; } } //base64字符串转化成图片 public static boolean GenerateImage(String imgStr) { //对字节数组字符串进行Base64解码并生成图片 if (imgStr == null) //图像数据为空 return false; BASE64Decoder decoder = new BASE64Decoder(); try { //Base64解码 byte[] b = decoder.decodeBuffer(imgStr); for(int i=0;i<b.length;++i) { if(b[i]<0) {//调整异常数据 b[i]+=256; } } //生成jpeg图片 String imgFilePath = "d://222.jpg";//新生成的图片 OutputStream out = new FileOutputStream(imgFilePath); out.write(b); out.flush(); out.close(); return true; } catch (Exception e) { return false; } } }
相关文章推荐
- 关于百度云人脸识别概括
- 关于利用TOP+临时表进行分页一点收获
- 关于16位的OS尝试(1)
- 关于百度
- “百度与站长”更新:关于网站收录,删除,seo等
- 关于硬盘坏道(绝对有收获) 转至 蓝图湾
- 关于缓冲区溢出的尝试
- 关于用百度提升网站流量的一些心得
- 百度一道关于算法的面试题目
- 百度尝试竞价广告新模式
- 关于16位的OS尝试(2)
- 今天翻译了英文版书关于Mirus组件的一点东西,感觉还是有收获的~
- 关于如何让页面同时下载多个文件的尝试
- 关于代码生成器的初步尝试
- 关于16位的OS尝试(1)
- 关于LDAP,我自己已经学习了很长一段时间,有些收获。
- 收获!关于引用计数器!
- 关于Java的Classloader的讨论收获
- 一个关于嵌入式的网站,收获不小
- 关于google和百度