在Unity中对文字图像进行识别的方法 VR资源

仅为年时 2017-10-10 16:21:07
文字识别没那么难,因为我们有别人提供的API——————


想做一个数字的识别,就研究了一下Face++的API


首先我们需要在Face++官网注册一个用户


注册完后我们就需要创建应用,以便于获取一个key值和secret值,这点是非常重要的,我们用的是试用版,正式的是需要收费的


然后找到我们的控制台,查看相应的API吧,如图所示:


 



这API里介绍的很详细,示例也很清楚。


POST的请求,请求参数和返回值这两个是关键,请求参数就是我们访问他给的网址需要传递过去的参数,返回值就是识别后返回给我们的值,这里返回识别值是Unicode编码的,这里用因为返回的是json串,所以用引入litjson,解析一下就可以输出识别出的字了。


如图是请求与返回参数:
 



这里附上代码:
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using LitJson;
using UnityEngine.UI;
 
public class FaceTest1 : MonoBehaviour
{
    public string ImageURL = "";
    //按钮上的文本
    public Text Btn_ShibieText;
    //显示结果
    public GameObject ShowResult;
 
    // Use this for initialization
    void Start()
    {
 
    }
 
    // Update is called once per frame
    void Update()
    {
 
    }
 
    public void TestHttpSend()
    {
        //识别文字
        WWWForm form = new WWWForm();
        form.AddField("api_key", "q8QTfr-xS5hm-i25JuWRLmWQQSHRRtzy");
        form.AddField("api_secret", "3JAabNdllrl-Dm_-iYSG43B0ewypFlWt");
        form.AddField("image_url", ImageURL);
        StartCoroutine(SendPost("https://api-cn.faceplusplus.com/imagepp/v1/recognizetext", form));
    }
    //提交数据进行识别
    IEnumerator SendPost(string _url, WWWForm _wForm)
    {
        WWW postData = new WWW(_url, _wForm);
        yield return postData;
        if (postData.error != "")
        {
            Debug.Log(postData.error);
            ShowResult.SetActive(true);
            Btn_ShibieText.text = "识别";
            ShowResult.transform.Find("Text").GetComponent<Text>().text = "识别失败!";
            GameObject.Find("DebugText").GetComponent<Text>().text = postData.error;
            //myTimer = 2.0f;
        }
        else
        {
            Btn_ShibieText.text = "识别";
            Debug.Log(postData.text);
            GameObject.Find("DebugText").GetComponent<Text>().text = postData.text;
            JsonJieXi(postData.text);
        }
    }
    void JsonJieXi(string str)
    {
        JsonData jd = JsonMapper.ToObject(str);
        Debug.Log(jd["result"].Count);
        for (int i = 0; i < jd["result"].Count; i++)
        {
            for (int j = 0; j < jd["result"]["child-objects"].Count; j++)
            {
                Debug.Log(jd["result"]["child-objects"][j]["type"].ToString());
                Debug.Log(jd["result"]["child-objects"][j]["value"].ToString());
            }
        }
    }
     
}


然后给大家看看面板是什么样子的,如图:
 



有了面板和代码,大家应该就很清楚了。


图片是访问的网络的,不过API里介绍有明确的图片各种限制和报错返回值的可能原因,大家可以根据原因来差错。

我用的是这个图片,成功识别出,网址:
如图:
 



结果图:
 



到此,简单的图片识别流程就OK了。不管是识别本地图片还是网络图片,根据API来就可以了。

补充:我发现切换不同版本的unity产生一个很扯淡的错误,就是postData.error != null和postData.error != ""这两句竟然在有的版本识别第一个,有的版本识别第二个,导致我总是跳不过,好像后面有人问到这个了,用两个都试一试可能就通过了奥!或者两个都写上。
99VR视界二维码
热门推荐
Hot Recommended
在线客服