Face++初体验以及如何在Unity中选择本地文件(PC)
来源:互联网 发布:九章算法 培训视频 编辑:程序博客网 时间:2024/06/07 10:54
突然发现前面的笔记图片都没了,才意识到将图片复制粘贴进输入框不行嘛
年初的时候因为好奇做了好几个demo,试了试讯飞的语音识别,Face++的图像识别,Bmob的支付接口。
说实话,现在已经不记得当初发生了什么。
这种功能性的东西,用起来觉得很强大很实用,但有时候又觉得花时间去学意义也不大,无他,实在是觉得自己代码能力就太差,应该把精力用在提升内力上。而且这些东西,有些开发基础的人都能学会使用,所以除了项目有需求之外,我觉得以后还是适当的控制下好奇心比较好,不然古怪的东西总是看不完。
今天主要记一下Face++和Unity中选取本地文件
先上一张界面的截图,这样子发布图片应该是没问题的了。
最初我是想要Face++帮我判断两张图片上的是不是同一个人,就是Face++的人脸对比功能。
国际惯例,注册,登录,找到自己的app key和app serect,然后看看官方文档
https://console.faceplusplus.com.cn/documents/4887586
face++的免费服务都是在线的,通过创建表单,构建POST请求的方式得到返回结果。应该是有离线SDK的,但是好像要钱,这个我真没有···
IEnumerator UploadIE() { WWWForm wf = new WWWForm(); wf.AddField("api_key", "这里填appkey"); wf.AddField("api_secret", "这里填appserect"); WWW Img1 = new WWW("file:///" + text1.text); yield return Img1; byte[] bytes1 = Img1.bytes; //rawI1.texture = Img1.texture; WWW Img2=new WWW("file:///" + text2.text); yield return Img2; //rawI2.texture = Img2.texture; byte[] bytes2 = Img2.bytes; //byte[] bytes2 = t2.EncodeToJPG(); wf.AddBinaryData("image_file1", bytes1,"image/jpg"); wf.AddBinaryData("image_file2", bytes2,"image/jpg"); //byte bytes1 = tex1; WWW www = new WWW(faceUrl,wf); yield return www; UnityEngine.Debug.Log(www.text); JSONObject content = JSONObject.Parse(www.text); JSONObject thresholds = content.GetObject("thresholds"); //小于这个值 通常认为不是同一个人 double min = thresholds.GetNumber("1e-3"); //大于这个值 通常认为是同一个人 double max = thresholds.GetNumber("1e-5"); double confidence = content.GetNumber("confidence"); UnityEngine.Debug.Log(min + " " + max + " " + confidence); if (confidence < min) { MessageBox.Show("不是同一个人"); } else if (confidence > min&&confidence<max) { MessageBox.Show("有可能是同一个人"); } else if (confidence > max) { MessageBox.Show("是同一个人"); } }
调用URL
https://api-cn.faceplusplus.com/facepp/v3/compare
上面的代码做的事情是创建了一个表单,表单包括了key,serect和两张图片。具体的文档中关于请求参数有说明。请求的结果是一个json。我用Boomlagoon解析了一下,主要是获取thresholds节点下的三个数据:
1e-3: 误识率为千分之一的置信度阈值;
1e-4: 误识率为万分之一的置信度阈值;
1e-5: 误识率为十万分之一的置信度阈值;
如果置信值低于“千分之一”阈值则不建议认为是同一个人,如果置信值超过“十万分之一”阈值,则是同一个人的几率非常高。以及置信度confidence。
然后对比一下,就判断出是不是同一个人。
我当时找了徐峥对比汪涵,夏雨对比张一山,周杰伦对比大木老师···只是测试,并没有什么意思。
原先我的图片是通过在输入框填写本地地址,然后程序读取,然后通过表单上传。
然后这个demo我就搁置了下来,直到前两天,我突然想到,那么多程序都是选取本地图片或者文件夹的,哪有手动填地址的。我不知道怎么能选取到本地的文件,于是我决定学习一下。
我最先搜的可能是如何打开文件管理器
Process p = new Process(); p.StartInfo.FileName = "explorer.exe"; //p.StartInfo.Arguments = @" I:\2017\Learn\Face++\Assets\StreamingAssets"; string path = Application.streamingAssetsPath; path = path.Replace('/', '\\'); p.StartInfo.Arguments =@" /select,"+Path.Combine(path,"Images\\wh.jpg");
它做的是帮你打开一个文件夹,确实可以选中某个文件,但真的是选中,就像你平时找文件一样,你再双击一下,他就会按它默认的打开方式打开,根本不是我想要的。explorer.exe是访问文件的,换成iexplore.exe,它还能访问网址。
然后我找到了一个看起来靠谱点的
首先下载或者在unity安装目录下找到System.Windows.Forms.dll;然后再asset下新建Plugins目录,拖进去。
然后在代码中using一下,开始调用
OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = "file://" + UnityEngine.Application.dataPath; //ofd.RestoreDirectory = true; ofd.Title = "选择图片"; if (ofd.ShowDialog() == DialogResult.OK) { UnityEngine.Debug.Log(ofd.FileName); }这个真的是弹出一个框,选取文件,上文debug出了选中文件的完整路径。
功能上是满足了,但是,
界面长这样,怎么算。这明显是上个时代的既视感。关键是看别人博客里也不截图说界面,好像有个截了图的是正常的界面。我复制粘贴了他的代码,但是界面还是这样,我重新找了找dll,替换了下发现并没有什么改变···
于是我又继续找,终于找到了更靠谱的
这次需要新建两个文件。
直到这时候,找到了大神的一篇博客,发现该说的都说了
直接贴链接
http://www.cnblogs.com/U-tansuo/archive/2012/07/10/GetOpenFileName.html
- Face++初体验以及如何在Unity中选择本地文件(PC)
- WinCE介绍以及如何在项目中选择合适版本
- 如何在网页中通过@font-face中嵌入中文字体(Web font)
- IE浏览器中选择本地文件
- 【转】什么是@font-face及font-face如何在css中使用
- Unity3D调用系统窗口选择本地文件(PC端)
- 如何在VS2005中使用PC-Lint
- 如何在javascript写本地文件
- HiLog---unity中在手机屏幕打印日志,写入日志到本地文件
- 如何在 Unity 2D 和 3D 中放大或缩小以及点击屏幕
- Unity 中存储数据到JSON本地文件
- unity pc端 采用右键选择相机,中键盘移动缩放模型
- 如何在android使用face++(Android Studio)
- 好消息:如何在IE中体验Vista!
- 如何在IDE中体验一把Java8?
- 在iOS中读取本地文件
- Flex中如何在mx:Style中用@font-face,在Flash SWF中嵌入字体
- unity中播放视频(PC端和移动端)
- 设计模式的七大原则
- 练习
- CentOS7.3 安装MongoDB 3.2 阿里云(亲试)
- Java条件语句摘要
- 常见的移动web开发的问题
- Face++初体验以及如何在Unity中选择本地文件(PC)
- 我的思考——软件开发中的“收敛”
- 1001. A+B Format (20)[C语言]
- Linux下安装mysql
- Python Notes (4)
- qt udp/tcp 绑定发送源端口(Specify source UDP port when writing datagram)
- html5解决大文件断点续传
- Faster-RCNN+ZF用自己的数据集训练模型(Matlab版本)
- mpu6050姿态解算与卡尔曼滤波(3)加速度计标定