Как загрузить изображение в код Python на ПК (localhost) с помощью приложения для Android? - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть модель для определения 5 типов змей. Эта модель написана на python, когда я помещаю изображение змеи в свою тестовую папку, а затем запускаю код python, он дает тип этой змеи, поэтому мне нужно, чтобы этот процесс выполнялся с использованием androidapp. Это означает отправку изображения с помощью приложения Android на ПК, и использование этого изображения обеспечивает вывод (тип змеи) обратно в приложение Android. Теперь у меня есть приложение Android, и я получил вывод с ПК на приложение Android, используя изображение в тестепапку, но я не могу загрузить изображение с помощью приложения для Android, этот процесс сделал с помощью "Flask"

Моя модель Python,

import cv2                 # working with, mainly resizing, images
import numpy as np         # dealing with arrays
import os                  # dealing with directories
from random import shuffle # mixing up or currently ordered data that might 
lead our network astray in training.
from tqdm import tqdm      # a nice pretty percentage bar for tasks.
TRAIN_DIR = 'train'
TEST_DIR = 'test'
IMG_SIZE = 50
LR = 1e-3

MODEL_NAME = 'snakes-{}-{}.model'.format(LR, '2conv-basic')

def process_test_data():
    testing_data = []
    for img in tqdm(os.listdir(TEST_DIR)):
        path = os.path.join(TEST_DIR,img)
        img_num = img.split('.')[0]
        img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
        img = cv2.resize(img, (IMG_SIZE,IMG_SIZE))
        testing_data.append([np.array(img), img_num])
    shuffle(testing_data)
    np.save('test_data.npy', testing_data)
    return testing_data

#train_data = create_train_data()
train_data=np.load('train_data.npy')

import tflearn
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.estimator import regression
import tensorflow as tf
tf.reset_default_graph()

convnet = input_data(shape=[None, IMG_SIZE, IMG_SIZE, 1], name='input')

convnet = conv_2d(convnet, 32, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)

convnet = conv_2d(convnet, 64, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)

convnet = conv_2d(convnet, 128, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)

convnet = conv_2d(convnet, 64, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)

convnet = conv_2d(convnet, 32, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)

convnet = fully_connected(convnet, 1024, activation='relu')
convnet = dropout(convnet, 0.8)

convnet = fully_connected(convnet, 5, activation='softmax')
convnet = regression(convnet, optimizer='adam', learning_rate=LR, 
loss='categorical_crossentropy', name='targets')

model = tflearn.DNN(convnet, tensorboard_dir='log')



if os.path.exists('{}.meta'.format(MODEL_NAME)):
    model.load(MODEL_NAME)
    print('model loaded!')

import matplotlib.pyplot as plt
test_data=process_test_data()
test_data=np.load('test_data.npy')

fig=plt.figure()

for num,data in enumerate(test_data[:12]):

    img_num = data[1]
    img_data = data[0]

    y = fig.add_subplot(1,2,num+1)
    orig = img_data
    data = img_data.reshape(IMG_SIZE,IMG_SIZE,1)
    #model_out = model.predict([data])[0]
    model_out = model.predict([data])[0]
    print("\nmodel out =",model_out)

    if np.argmax(model_out) == 0: str_label='kunakatuwa'
    elif np.argmax(model_out) == 1: str_label='naya'
    elif np.argmax(model_out) == 2: str_label='thel karawalaya'
    elif np.argmax(model_out) == 3: str_label='Thith polaga'
    elif np.argmax(model_out) == 4: str_label='weli polaga'

    print(str_label)    
    y.imshow(orig,cmap='gray')
    plt.title(str_label)
    y.axes.get_xaxis().set_visible(False)
    y.axes.get_yaxis().set_visible(False)
plt.show()

Мой код Android,

package com.example.shasika.snakenew;

import android.content.Intent;
import android.graphics.Bitmap;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;

public class MainActivity extends AppCompatActivity {

    Integer REQUEST_CAMERA = 1;

    RequestQueue requestQueue1;
    String IP = "192.168.137.1";
    String url = "http://" + IP + ":5000/";




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        Button iButton = findViewById(R.id.btnDiseSelect);
        iButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                selectImage();

            }
        });

        Button find= findViewById(R.id.find);
        final TextView snake=findViewById(R.id.sanke);
        final ImageView ivCamImage=findViewById(R.id.ivCamImage);
        requestQueue1 = Volley.newRequestQueue(this);

        find.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                System.out.println("OK1");
                JsonObjectRequest jsonObjReq = new JsonObjectRequest(
                        Request.Method.GET, url,
                        new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject response) {
                                Log.d("API", response.toString());
                                try {
                                    Log.d("API", response.getString("result"));
                                    String de = response.getString("result");

                                    snake.setText(de);
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.d("API", "Error : " + error);
                    }
                }) {
                    /** Passing some request headers* */
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                        HashMap<String, String> headers = new HashMap<>();
                        headers.put("Content-Type", "application/json; charset=utf-8");
                        return headers;
                    }
                };
                jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(50000,5, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
                requestQueue1.add(jsonObjReq);


            }
        });


    }

    private void selectImage() {

        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(takePictureIntent, REQUEST_CAMERA);
        }


    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        ImageView ivImage = (ImageView) findViewById(R.id.ivCamImage);
        if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bitmap imageBitmap = null;

            if (data.getData() == null) {
                imageBitmap = (Bitmap) data.getExtras().get("data");


            } else {
                try {
                    imageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            ivImage.setImageBitmap(imageBitmap);
        }
    }

}

Как я могу сделать загрузку изображения в свой код Python для получения выходных данных классификации. Какие изменения необходимы? Любая помощь будет высоко оценена.

...