百度云ai-车型识别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/woshi136584/article/details/78295552
不知道大家有没有被最近的AlphaGo刷屏,反正我是看的心痒痒的。也不知道咋搞的就看到了百度云的人工智能上面。闲来无事就试了试图像识别。

百度云图像识别提供了多种语言的SDK各位根据自己的需求下载相应sdk就行了。此处以javaSDK为例。
1.下载官方SDK包
2.导入项目的lib中
本以为跟着文档就行,哪只采坑刚刚开始(流泪中……),下面详细讲讲过程。官方java代码已经公开,地址https://github.com/Baidu-AIP/java-sdk
本文做的是车型识别,根据文档指引代码是这样的:

public class Sample {
    //设置APPID/AK/SK
    public static final String APP_ID = "你的 App ID";
    public static final String API_KEY = "你的 Api Key";
    public static final String SECRET_KEY = "你的 Secret Key";

    public static void main(String[] args) {
        // 初始化一个AipImageClassifyClient
        AipImageClassifyClient client = new AipImageClassifyClient(APP_ID, API_KEY, SECRET_KEY);

        // 可选:设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);

        // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
        client.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
        client.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理

        // 调用接口
        String path = "test.jpg";
        JSONObject res = client.objectDetect(path, new HashMap<String, String>());
        System.out.println(res.toString(2));

    }
}

but什么鬼,AipImageClassifyClient找不到,刚开始我以为我粗心下载错了,还特意从新下载,发现还是没有,没办法跑到github上查看官方公布的代码,并没有找到。好吧找不到咱就直接掉api吧!(顺道说下,我用车型识别的api全局找了下也没找到,谁知道原因的说下,谢谢)

下面是直接调用api实现的代码及结果:

public class MainActivity extends AppCompatActivity {
    String access_token;
    TextView result;
    ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(listener);
        result = (TextView) findViewById(R.id.textView);
        iv = (ImageView) findViewById(R.id.iv);
        Auth();
    }

    private void Auth() {
        OkGo.<String>get("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=你的应用key&client_secret=你的应用secret")
                .tag(this)
                .execute(new StringCallback() {
                    @Override
                    public void onSuccess(Response<String> response) {
                        try {
                            JSONObject jsonObject = new JSONObject(response.body());
                            access_token = jsonObject.getString("access_token");
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onError(Response<String> response) {
                        super.onError(response);
                    }
                });
    }
    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ImagePicker imagePicker = ImagePicker.getInstance();
            imagePicker.setImageLoader(new GlideAlbumLoader());
            imagePicker.setShowCamera(true);
            imagePicker.setMultiMode(false);
            imagePicker.setCrop(false);
            Intent intent = new Intent(MainActivity.this, ImageGridActivity.class);
            startActivityForResult(intent, 1002);
        }
    };

    public void car(String path) {
        String url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/car?access_token=" + access_token;
        try {
            String imgStr = file2String(new File(path));
            OkGo.<String>post(url)
                    .tag(this)
                    .params("Content-Type", "application/x-www-form-urlencoded")//
                    .params("image", imgStr)//
                    .params("top_num", "20")//
                    .isMultipart(true)
                    .execute(new StringCallback() {
                        @Override
                        public void onSuccess(Response<String> response) {
                            CarBean bean = new Gson().fromJson(response.body(), CarBean.class);
                            if (!(bean.getResult() == null || bean.getResult().size() == 0)) {
                                DecimalFormat df = new DecimalFormat("###0.00");
                                result.setText("此车型有" + (df.format((Math.round(bean.getResult().get(0).getScore() / 1 * 10000) / 10000.0) * 100)) + "%的可能是:" + bean.getResult().get(0).getName());
                            } else {
                                Toast.makeText(MainActivity.this, "", Toast.LENGTH_LONG).show();
                            }
                        }
                    });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private String file2String(File file) {
        byte[] buffer = new byte[0];
        try {
            FileInputStream inputFile = new FileInputStream(file);
            buffer = new byte[(int) file.length()];
            inputFile.read(buffer);
            inputFile.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Base64.encodeToString(buffer, Base64.DEFAULT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
            if (data != null && requestCode == 1002) {
                ArrayList<ImageItem> images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
                iv.setImageBitmap(BitmapFactory.decodeFile(images.get(0).path));
                car(images.get(0).path);
            } else {
                Toast.makeText(this, "没有数据", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

这里写图片描述
这里面引入了imageloader与OkGo两框架,具体使用请自行查看相应文档.好啦!今天就这样吧!哈哈,好没得营养呀!有问题可以留言。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页