Неожиданное выходное изображение при выводеPython

Программы на Python
Anonymous
Неожиданное выходное изображение при выводе

Сообщение Anonymous »

Я пытаюсь увеличить изображение во флаттере. Но я получаю неожиданный результат.
Я совершенно новичок в работе с моделью вывода.
Исходное изображение:
Исходное изображение
Выходное изображение:
Выходное изображение
ЖУРНАЛ: I/flutter ( 592): изображение преобразовано в нормализованный Float32List
I/flutter ( 592): изображение нормализовано успешно.
I/flutter (592): Входной тензор успешно создан.
I/flutter (592): Высота 2880 Ширина 1640
Исходное изображение: Высота 720 Ширина 210Вот код, который я пробовал:
Future inference() async {
if (selectedImage == null) {
debugPrint('No image selected');
return;
}

var preprocessedImage =
NormalizeImage.imageToNormalizedFloat32List(selectedImage!);

final shape = [1, 3, selectedImage!.height, selectedImage!.width];

debugPrint('Image normalized successfully.');

final inputOrt =
OrtValueTensor.createTensorWithDataList(preprocessedImage, shape);

final inputs = {'input': inputOrt};

debugPrint('Input tensor created successfully.');

final runOptions = OrtRunOptions();
final outputs = await ortSession.runAsync(runOptions, inputs);

inputOrt.release();
runOptions.release();

outputs?.forEach((element) {
final outputValue = element?.value;
if (outputValue is List) {
img.Image generatedImage = generateImageFromOutput(outputValue);
List pngBytes = img.encodePng(generatedImage);
img.Image decodedImage = img.decodeImage(Uint8List.fromList(pngBytes))!;

showDialog(
context: context,
builder: (BuildContext context) {
return Dialog(
child: SizedBox(
width: 200,
height: 200,
child: Image.memory(Uint8List.fromList(img.encodePng(decodedImage))),
),
);
},
);
} else {
debugPrint("Output is of unknown type");
}
element?.release();
});
}
img.Image generateImageFromOutput(List output) {
final width = output[0][0].length;
final height = output[0][0][0].length;

debugPrint("Height $height Width $width");

Float32List float32Data = flattenList(output);
var imgData = NormalizeImage.denormalizedFloat32ListToImage(float32Data, width, height);
return imgData;
}

Float32List flattenList(List nestedList) {
List flattened = [];
for (var fourDimList in nestedList) {
for (var threeDimList in fourDimList) {
for (var twoDimList in threeDimList) {
for (var value in twoDimList) {
flattened.add(value);
}
}
}
}
return Float32List.fromList(flattened);
}

Нормализовать класс
class NormalizeImage {
static Float32List imageToNormalizedFloat32List(Image image) {
final int height = image.height;
final int width = image.width;

Float32List float32Image = Float32List(3 * height * width);

for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
final int pixelIndex = (i * width + j) * 3;
final int pixel = image.getPixel(j, i);

float32Image[pixelIndex] = getRed(pixel) / 255.0;
float32Image[pixelIndex + 1] = getGreen(pixel) / 255.0;
float32Image[pixelIndex + 2] = getBlue(pixel) / 255.0;
}
}

print("Image converted to normalized Float32List");
return float32Image;
}

static Image denormalizedFloat32ListToImage(Float32List float32Image, int width, int height) {
final imgData = Image(width, height);
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
final int pixelIndex = (i * width + j) * 3;
final int r = (float32Image[pixelIndex] * 255).toInt().clamp(0, 255);
final int g = (float32Image[pixelIndex + 1] * 255).toInt().clamp(0, 255);
final int b = (float32Image[pixelIndex + 2] * 255).toInt().clamp(0, 255);
final int color = getColor(r, g, b);
imgData.setPixel(j, i, color);
}
}
return imgData;
}
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... -inference

Вернуться в «Python»