我想使用android应用程序中的按钮将图像发送到本地主机。在本地主机中,该图像传递给使用python开发的模型。
使用图像进行处理后,模型会将输出提供给android应用。取得结果的结果很好。
我想知道如何发送图像?
或建议使用另一种方法进行该过程。
这是模型中的代码,用于获取图像,并将其复制到PC的测试文件夹中。我想开发此图像以从android应用获取图像。
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])
print("\n****testing_data********",testing_data)
shuffle(testing_data)
np.save('test_data.npy', testing_data)
return testing_data
答案 0 :(得分:0)
这实际上取决于您使用哪个库连接到Internet。但是对于发送图片,我建议先将其转换为Base64文本并发送。 Python一定会知道如何处理它。
fun bitmapToBase64StringInline(bitmap: Bitmap): String {
val byteArrayOutputStream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, byteArrayOutputStream)
val bytes = byteArrayOutputStream.toByteArray()
return android.util.Base64.encodeToString(bytes, Base64.NO_WRAP)
}
此外,最好在单独的线程中执行此操作,并在使用大图像时注意OOM异常。 要发送它,请使用一些不错的连接库,例如OkHttp,Volley,Retrofit等。或者,只需实现一个基本的AsyncTask即可,如下所示:
protected void doInBackground(String... params) {
URL url = new URL(yourTextUrl);
try {
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setConnectTimeout(MyConstants.CONNECTION_TIMEOUT);
connection.setReadTimeout(MyConstants.READ_TIMEOUT);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.connect();
Writer writer = new OutputStreamWriter(connection.getOutputStream());
String out = params[0];
Log.d("Uploading this: ", out);
writer.write(out);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
Log.e("ERR", e.getMessage());
if (null != e.getMessage() && e.getMessage().equals("timeout")) {
this.cancel(true);
}
} finally {
connection.disconnect();
}
}
连接是HttpURLConnection或Http s URLConnection,基于 您的协议。
我希望它足够清楚。