Я делаю приложение клиент / сервер. Клиент - это устройство Android, а сервер - мой компьютер, на котором работает python. На устройстве Android я сделал предварительный просмотр камеры, а затем преобразовал ее в массив байтов следующим образом (используя cameraX с вариантом использования анализа):
override fun analyze(image: ImageProxy?, rotationDegrees: Int) {
val buffer = image?.planes?.get(0)?.buffer
// Extract image data from callback object
val data = buffer?.toByteArray()
// Convert the data into an array of pixel values
// I commented this line, but I can use pixel value if you think is better
//val pixels = data?.map { it.toInt() and 0xFF }
Sender(mContext, mBufferedOutputStrem, mBufferedReader).execute(data)
}
private fun ByteBuffer.toByteArray(): ByteArray {
rewind() // Rewind the buffer to zero
val data = ByteArray(remaining())
get(data) // Copy the buffer into a byte array
return data // Return the byte array
}
Затем, с моим классом Sender,Я отправляю на мой сервер массив байтов, содержащий изображение.
override fun doInBackground(vararg p0: ByteArray): String {
return try {
mBufferedOutputStream.write(p0[0])
mBufferedOutputStream.flush()
..........
На моем сервере python я читаю буфер с такой строкой:
buf = conn.recv(4096)
Итак, buf - это массивбайта. Как я могу преобразовать это в изображение и сохранить его на диск? Я также хотел бы сначала отобразить изображение с помощью openCv. Как мне этого добиться? пс. Вместо conn.recv (4096), я должен передать другое значение вместо 4096? Если размер изображения составляет менее 4096 байт, могу ли я столкнуться с какой-либо проблемой?