百度雲ai-車型識別

不知道大家有沒有被最近的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兩框架,具體使用請自行查看相應文檔.好啦!今天就這樣吧!哈哈,好沒得營養呀!有問題可以留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章