首先需要去Face++注册一个账号:(https://console.faceplusplus.com.cn/login)注册非常简单这里就不讲了。创建完我们登录后悔进入如下界面。

接着我们去创建一个应用(也就是创建一个API Key,这个非常重要)如下:

现在我们去找到我们需要的API,找到图像识别中的Detect Scene & Object API (Beta)如图:

点击 API文档进入当前API介绍和如何使用界面在这里我们只需要知道如何使用和返回值就行了:如图(它使用的是post方法)

到这一步准备工作就完成了,下面打开unity创建场景,这个过程就不讲了,如图:

直接上代码:

using UnityEngine;
using System.Collections;
using System.IO;
using LitJson;
using Vuforia;
using UnityEngine.UI;
using System.Text.RegularExpressions;public class Demo : MonoBehaviour
{public bool ImageOrWord = true;public string ImageOrWordURL="";//中英互译string CHENUrl = "http://fanyi.youdao.com/openapi.do?keyfrom=UnityFY&key=自己的有道key&type=data&doctype=json&version=1.1&q=";//相机/用于截图使用public Camera Cam;//按钮上的文本public Text Btn_PaiZhaoText;//显示结果public GameObject ShowResult;//物体信息数组public ArrayList ObjArr = new ArrayList();public ArrayList ObjArrKXD = new ArrayList();//结果显示时间public float myTimer = 2.0f;ArrayList TempArr = new ArrayList ();bool QueRen = false;// Use this for initializationvoid Start () {CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);}// Update is called once per framevoid Update () {if (myTimer > 0) {myTimer = myTimer - Time.deltaTime;}if (myTimer <= 0) {ShowResult.SetActive(false);}}//提交数据进行识别IEnumerator SendPost(string _url, WWWForm _wForm)  {  WWW postData = new WWW(_url, _wForm);  yield return postData;  if (postData.error != null)  {  Debug.Log(postData.error);  ShowResult.SetActive (true);Btn_PaiZhaoText.text = "识别";ShowResult.transform.Find ("Text").GetComponent<Text> ().text = "识别失败!";GameObject.Find("DebugText").GetComponent<Text>().text = postData.error;myTimer = 2.0f;}  else  {  Btn_PaiZhaoText.text = "识别";Debug.Log(postData.text); GameObject.Find ("DebugText").GetComponent<Text> ().text = postData.text;JsonJieXi (postData.text);}  }public void TestHttpSend()  {  if (ImageOrWord == true) {//识别图片场景中的物体WWWForm form = new WWWForm ();form.AddField("api_key", "你自己申请的api_key");form.AddField("api_secret", "你自己申请的api_secret"); //form.AddField ("image_url", ImageOrWordURL);form.AddField ("image_file", ImageOrWordURL);StartCoroutine (SendPost ("https://api-cn.faceplusplus.com/imagepp/beta/detectsceneandobject", form));} else{//识别文字WWWForm form = new WWWForm ();form.AddField("api_key", "你自己申请的api_key");form.AddField("api_secret", "你自己申请的api_secret");  form.AddField ("image_url", ImageOrWordURL);StartCoroutine (SendPost ("https://api-cn.faceplusplus.com/imagepp/beta/recognizetext", form));}     }void JsonJieXi(string str){JsonData jd = JsonMapper.ToObject (str);//图片if (QieHuanShiBieMoShiBool == true) {Debug.Log ("使用时间(time_used)" + jd ["time_used"].ToString ());/*if (jd ["scenes"].Count>0) {for (int i = 0; i < jd ["scenes"].Count; i++) {Debug.Log ("场景信息数组-名称(scenes)" + jd ["scenes"] [i] ["value"].ToString ());Debug.Log ("场景信息数组-置信度(scenes)" + jd ["scenes"] [i] ["confidence"].ToString ());Debug.Log ("");}} else {Debug.Log ("没有识别出场景");}*/if (jd ["objects"].Count > 0) {for (int i = 0; i < jd ["objects"].Count; i++) {Debug.Log ("物体信息数组-名称(objects)" + jd ["objects"] [i] ["value"].ToString ());Debug.Log ("物体信息数组-置信度(objects)" + jd ["objects"] [i] ["confidence"].ToString ());Debug.Log ("");ObjArr.Add (jd ["objects"] [i] ["value"].ToString ());//物体名称ObjArrKXD.Add (float.Parse (jd ["objects"] [i] ["confidence"].ToString ()));//对应的可信度}//TempArr.Clear ();ShowResultToUser (ObjArr, ObjArrKXD);} else {Debug.Log ("没有识别物体");ShowResult.SetActive (true);ShowResult.transform.Find ("Text").GetComponent<Text> ().text = "我不知道这是什么呢";myTimer = 2.0f;}}//文字else {Debug.Log (jd ["result"].Count);for (int i = 0; i < jd ["result"].Count; i++) {for (int j = 0; j < jd ["result"] [i] ["child-objects"].Count; j++){Debug.Log (jd ["result"] [i] ["child-objects"][j]["type"].ToString());Debug.Log (jd ["result"] [i] ["child-objects"][j]["value"].ToString());}//Debug.Log ("__________"+jd ["result"] [i] ["child-objects"]["type"].ToString());//Debug.Log ("----------"+jd ["result"] [i] ["child-objects"]["value"].ToString());}}}/// <summary>/// 正则表达式删除指定的字符串/// <并且返回一个string类型>/// <"value">原字符串>/// <"delStr">需要去除的字符>/// <"b">布尔值 如果为真表示去除标点/// <@"\d"-表示删除字符串中的所有数字>/// <@"[^\d]*"-表示删除字符串中的非数字>/// </summary>public static string RegexStringManipulation(string value,string delStr,bool b){string str;Regex re = new Regex (delStr);str = re.Replace (value, "");if (b == true) //去标点{str = Regex.Replace (str,@"\w+","");}return str;}void ShowResultToUser(ArrayList Arr,ArrayList Arra){TempArr = Arra;for (int i =0 ;i<Arr.Count;i++) {Debug.Log ("Arr = "+Arr[i].ToString()+" 下标:"+i);}for (int j =0 ;j<Arra.Count;j++) {Debug.Log ("Arra = "+Arra[j].ToString()+" 下标:"+j);}//排序取最大值Arra.Sort ();float Max =float.Parse( Arra [Arra.Count - 1].ToString());Debug.Log ("MAX = "+Max);if (Max > 92) {QueRen = true;} else {QueRen = false;}if (Arra.Count > 1) {for (int i = 0; i < TempArr.Count; i++) {if (float.Parse (TempArr [i].ToString ()) == Max) {Debug.Log (float.Parse (TempArr [i].ToString ()) + "在TempArr数组中 下标为 " + i);if (i > 0) {StartCoroutine (FanYi (Arr [i - 1].ToString ()));} break;}}} else {Debug.Log ("----------------"+Arr [0].ToString ());StartCoroutine (FanYi (Arr [0].ToString ()));}}//翻译IEnumerator FanYi(string str){WWW www = new WWW (CHENUrl + str);yield return www;if (www.error != null) {Debug.Log (">>>>>>>>>>>>>>"+www.error);} else {Debug.Log ("++++++++++++++"+www.text);FanYiJSONJieXi (www.text);}}/// <summary>/// 翻译xml解析/// </summary>void FanYiJSONJieXi(string str){//Debug.Log (str);ShowResult.SetActive (true);JsonData jd = JsonMapper.ToObject (str);Debug.Log ("翻译结果:"+jd["translation"][0].ToString ());if (QueRen == true) {ShowResult.transform.Find ("Text").GetComponent<Text> ().text = "这一定是 " + jd ["translation"] [0].ToString () + " 呢!";} else {ShowResult.transform.Find ("Text").GetComponent<Text> ().text = "我猜这是 " + jd ["translation"] [0].ToString () + " 呢!";}myTimer = 2.0f;}/// <summary>/// 拍照按钮/// </summary>public void Btn_JieTu(){Btn_PaiZhaoText.text = "识别中";TempArr.Clear ();ObjArr.Clear ();ObjArrKXD.Clear ();CaptureCamera (Cam,new Rect(0,0,Screen.width*0.5f,Screen.height*0.5f));}/// <summary>/// 显示debug信息在屏幕上/// </summary>bool Btn_DebugBool = false;public void Btn_Debug(){if (Btn_DebugBool == true) {GameObject.Find ("DebugText").GetComponent<Text> ().enabled = false;Btn_DebugBool = false;} else {GameObject.Find ("DebugText").GetComponent<Text> ().enabled = true;Btn_DebugBool = true;}}/// <summary>/// 切换识别模式/// </summary>bool QieHuanShiBieMoShiBool = true;public void Btn_QieHuanShiBieMoShi(){QieHuanShiBieMoShiBool =! QieHuanShiBieMoShiBool;Debug.Log ("------"+QieHuanShiBieMoShiBool);if (QieHuanShiBieMoShiBool == true) {GameObject.Find ("Btn_ImageOrWord").transform.Find ("Text").GetComponent<Text> ().text = "图片";} else {GameObject.Find ("Btn_ImageOrWord").transform.Find ("Text").GetComponent<Text> ().text = "文字";}}//截图并且识别void CaptureCamera(Camera camera, Rect rect)   {  // 创建一个RenderTexture对象  RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 0);  // 临时设置相关相机的targetTexture为rt, 并手动渲染相关相机  camera.targetTexture = rt;  camera.Render();  //ps: --- 如果这样加上第二个相机,可以实现只截图某几个指定的相机一起看到的图像。  //ps: camera2.targetTexture = rt;  //ps: camera2.Render();  //ps: -------------------------------------------------------------------  RenderTexture.active = rt;  Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24,false);  screenShot.ReadPixels(rect, 0, 0);  screenShot.Apply();  // 重置相关参数,以使用camera继续在屏幕上显示  camera.targetTexture = null;  RenderTexture.active = null; GameObject.Destroy(rt);
//      // 最后将这些纹理数据,成一个png图片文件  byte[] bytes = screenShot.EncodeToPNG();string filename = Application.dataPath + "/Screenshot.png";System.IO.File.WriteAllBytes(filename, bytes);Debug.Log(string.Format("截屏了一张照片: {0}", filename));  if (QieHuanShiBieMoShiBool == true) {Debug.Log ("图片");//识别图片场景中的物体WWWForm form = new WWWForm ();      form.AddField("api_key", "你自己申请的api_key");      form.AddField("api_secret", "你自己申请的api_secret"); form.AddBinaryData ("image_file", screenShot.EncodeToPNG());StartCoroutine (SendPost ("https://api-cn.faceplusplus.com/imagepp/beta/detectsceneandobject", form));} else{Debug.Log ("文字");//识别文字WWWForm form = new WWWForm ();      form.AddField("api_key", "你自己申请的api_key");      form.AddField("api_secret", "你自己申请的api_secret");  form.AddBinaryData ("image_file",screenShot.EncodeToPNG());StartCoroutine (SendPost ("https://api-cn.faceplusplus.com/imagepp/beta/recognizetext", form));} }}

这里我们用到LitJson.dll来解析返回的Json数据:(LitJson下载地址:链接: http://pan.baidu.com/s/1miOB6go 密码: ktcm)

完美!

Unity 图像识别 接入Face++ 进行 场景识别 和 文字识别相关推荐

  1. 模式识别新研究:微软OCR两层优化提升自然场景下的文字识别精度

    模式识别新研究:微软OCR两层优化提升自然场景下的文字识别精度 发表于2015-03-30 23:46| 6209次阅读| 来源CSDN| 8 条评论| 作者霍强 模式识别微软亚洲研究院微软OCR文字 ...

  2. 微软OCR两层优化提升自然场景下的文字识别精度(模式识别新研究)

    摘要:OCR识别可分为两步:首先是文本检测,将文字从图片中提取出来:然后对文本进行识别.此次的突破主要是在文本检测环节的两个子阶段:先采用对比极值区域CER检测方法,再采用基于浅层神经网络的文字/非文 ...

  3. android tensorflow文字识别身份证识别ocr文字识别商用源码

    一 ,文字识别简介 计算机文字识别,俗称光学字符识别,英文全称是Optical Character Recognition(简称OCR),它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并 ...

  4. 通用票据识别/通用文字识别/通用表格识别/手写识别简述

    经济日益繁荣,随之而来的是多如牛毛的合同.文件.表单和票据,尤其是一些大的企业集团,文件资料更是数不胜数,这些纸质资料十分占用空间,并且易丢失.易损坏,不宜传递和保存,如何有效的保存.处理和分享这些纸 ...

  5. 人脸识别、文字识别背后的方法,以及研究的热点和难点

    模式识别是什么? 作为人工智能的一个重要方向,模式识别的主要任务是模拟人的感知能力,如通过视觉和听觉信息去识别理解环境,又被称为"机器感知"或"智能感知". 人 ...

  6. 2019.07.31 科大讯飞语音生成+识别+朗读+文字识别

    科大讯飞语音生成+识别+朗读+文字识别 现在我看小说用的是之前在知乎被安利的科大讯飞出品的"听书神器",各大应用商店都有下载. 内嵌百度搜索,按浏览器正常搜索书名进入网页后,点击右 ...

  7. c#批量文字识别,百度文字识别源码

    文章目录 批量文字识别演示 下载地址 重要源码 一.一键识别按钮 二.后台工作 三.报告进度,完成任务 四.鼠标截图 五.文字识别 总结 批量文字识别演示 下载地址 https://download. ...

  8. 安卓 图像清晰度识别_OCR文字识别的功能及注意事项

    首先OCR文字识别是指电子设备检查纸上打印的字符,然后用OCR文字识别技术翻译成计算机文字的过程:就是对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程. 那么在日常生活中有很多 ...

  9. 中的图片文字识别_文字识别 图片转文字【小程序】

    文字识别小程序在文章的底部 直接拉到文章底部就可使用 ↓↓↓↓↓↓ 大家在平时办公或者学习中经常会处理到图片转文字的问题,对于一些打字比较快的朋友来说并没有太大的问题,但是对于一些打字慢的人来说确实一 ...

最新文章

  1. 洛谷 P1411 树
  2. Confluence 6 配置服务器基础地址
  3. 01.轮播图之二 :tableView 轮播
  4. 【转】dijkstra算法
  5. linux 交叉编译 静态库,从Linux为Windows开发交叉编译静态库
  6. LeetCode 775. 全局倒置与局部倒置(归并排序/二分查找/一次遍历)
  7. JS核心基础数组的操作概述
  8. Unity3D之如何创建正确的像素比在屏幕上
  9. Redhat或者Centos 手动安装htop
  10. Linux 小知识翻译 - 「GCC」
  11. 【老生谈算法】matlab特定人语音识别算法——语音识别算法
  12. 视频黑屏画面检测 blackframe
  13. 大数据常见错误及解决方案
  14. 短视频选题的方法脚本结构撰写
  15. c语言实验报告 折半查找法,C语言数组之冒泡排序+折半查找法(二分查找)
  16. 联想笔记本的window server R2系统安装、优化及相关软件安装全过程
  17. 我的资源里边有好东西(gmt、panoply等等)
  18. Win10工具推荐:自带的剪切板
  19. 掌上实验室V8系列教程(七)I2C应用 HP203B
  20. 联想台式电脑重装系统win10重启后出现error1962

热门文章

  1. 公共场所人流数据统计如何实现?解决重识别、漏检等检测难题
  2. obs多推流地址_一文搞懂:抖音obs直播怎么操作,抖音直播推流地址如何获取!...
  3. 【数学】Knuth洗牌算法及其证明
  4. 1.1 python中定义变量与数据类型
  5. js实现modbus_Modbus通讯协议
  6. 弘辽科技:拼多多为什么经常罚款?原因有哪些?
  7. 阅文集团算法工程师校招面经
  8. STL、PLY、OBJ格式分析
  9. 【STM32学习笔记】(4)—— STM32工程文件详解
  10. rdesktop的使用方法