У меня есть модель для определения 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 для получения выходных данных классификации. Какие изменения необходимы? Любая помощь будет высоко оценена.