использование IP-камеры для изображений и передача URL в API - PullRequest
0 голосов
/ 05 июля 2018

Я использую приложение IP Webcam в своем телефоне Android, чтобы использовать его в качестве IP-камеры, и я использую другой телефон Android для запуска приложения, которое распознает лица с помощью API Kairos. Я использую приложение IP-камера, и изображение передается по URL-адресу, который выглядит примерно так: "http://xxx.xxx.x.xxx:8080/photo.jpg" и я могу просматривать изображение через этот URL на всех устройствах, однако используемый мной API имеет функцию распознавания, которая принимает URL-адрес изображения в качестве одного из своих параметров, но когда я использую URL-адрес потокового изображения, он не работает. Я попытался выяснить, что происходит с помощью журналов, но все, что я мог видеть, это то, что он выдал исключение SocketTimeoutException (тайм-аут) и попробовал решения для него из SO, но ничего не получилось, какие-нибудь предложения здесь?

код:

    public void getUrlText(){

        try{
            url = new URL("http://xxx.xxx.x.xxx:8080/photo.jpg");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    Handler handler = new Handler();
    Runnable timedTask = new Runnable(){

        @Override
        public void run() {
            getUrlText();
            handler.postDelayed(timedTask, 1000);
    }};

и это внутри метода onCreate:

        getUrlText();
        handler.post(timedTask);
        recognizePhotoKairos(Uri.parse(url.toString()), userPhoneNumber);

1 Ответ

0 голосов
/ 05 июля 2018

Когда вы используете ip webcam, убедитесь, что все ваши устройства подключены к одному серверу. Во-вторых, вам нужно обновлять URL снова и снова, чтобы получить последнее изображение. Я думаю, что это ваша главная проблема в обновлении URL. Я предлагаю вам использовать для этого обработчик, который ждет определенное время, а затем снова обновляет URL или api в вашем случае. Подробнее о обработчике Я добавляю свой исходный код проекта, где я снова и снова запускаю обработчик

открытый класс CounterActivity расширяет AppCompatActivity {

TextView textView;
private boolean started = false;
private PowerManager.WakeLock wl;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_counter);

    textView=findViewById(R.id.points);
    PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "My:Tag");

// экран остается включенным в этом разделе

    start();


    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {


            final String URL="http://172.16.16.108:8080/wallgame/api/game_points";

            StringRequest request=
                    new StringRequest(Request.Method.GET, URL,
                            new Response.Listener<String>() {
                                @Override
                                public void onResponse(String response) {

                                    try {
                                        JSONObject object=new JSONObject(response);

                                        JSONObject data=object.getJSONObject("data");


                                        int points=Integer.parseInt(data.getString("game_points"));

                                        textView.setText(points+"");

                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {

                            Toast.makeText(CounterActivity.this, "Error", Toast.LENGTH_SHORT).show();
                        }
                    }
                    );
            RequestQueue queue= Volley.newRequestQueue(CounterActivity.this);
            queue.add(request);

        }
    },1000);
}

Runnable runnable = new Runnable() {
    @Override
    public void run() {

        final String URL="http://172.16.16.108:8080/wallgame/api/game_points";

        StringRequest request=
                new StringRequest(Request.Method.GET, URL,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {

                                try {
                                    JSONObject object=new JSONObject(response);

                                    JSONObject data=object.getJSONObject("data");


                                    int points=Integer.parseInt(data.getString("game_points"));

                                    textView.setText(points+"");

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(CounterActivity.this, "Error", Toast.LENGTH_SHORT).show();
                    }
                }
                );
        RequestQueue queue= Volley.newRequestQueue(CounterActivity.this);
        queue.add(request);
        start();
    }
};
public void onDestroy() {
    super.onDestroy();
    started = false;
    handler.removeCallbacks(runnable);
    if (wl.isHeld())
        wl.release();
}
public void start(){
    started = true;
    handler.postDelayed(runnable, 1500);
}

}

...