Flutter 相机包:相机的 Stream/Picture 旋转 -90°

Flutter Camera Package: Stream/Picture from Camera is -90° rotated

我在 2 个 Flutter 应用程序中使用官方 Flutter(Flutter 1.22.6 • 通道稳定)相机插件 (https://pub.dev/packages/camera)。 stripped-down 截取的代码用于两个应用程序(纯复制和粘贴)。

但是,两个应用程序的结果在方向上有所不同。问题是没有在屏幕上为用户提供正确的输出。这可以使用 CameraPreviewRotatedBox。我正在使用 CameraController 中的 buildPreview() 方法来查看“相机看到的内容”(至少我希望如此)。

需要的是从 CameraController-Stream 中以正确的方向(笔直向上)录制一张图片,以便使用一些 AI SDK 对其进行处理。 或者作为变通方法,使用一些简单轻便的方法将其旋转 90 度作为 Uint8List。不可能的是只用一些 meta-data.

应该值得一提的是比较复杂的app(旋转错误的地方)有两个限制:

我已经尝试过但没有成功的:

我不知道为什么会有这种差异。任何我应该尝试的想法或者这将是惊人的!

import 'dart:async';
import 'dart:typed_data';

import 'package:camera/camera.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Timer timer;
  CameraController controller;
  CameraImage image;
  Future<CameraController> init;

  @override
  void initState() {
    init = initialize();
    super.initState();
  }

  Future<CameraController> initialize() async {
    var cameras = await availableCameras();
    controller = CameraController(cameras[0], ResolutionPreset.medium);
    await controller.initialize();
    controller.startImageStream((image) {
      this.image = image;
    });
    timer = Timer.periodic(Duration(seconds: 5), (timer) async {
      print('start scanning');
    });
    return controller;
  }

  Future<void> outText(CameraImage image) async {
    Uint8List bytes = image.planes[0].bytes;
    // AI magic...
    return;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: FutureBuilder<CameraController>(
          future: init,
          builder: (context, snapshot) {
            if (snapshot.hasData)
              return Center(
                  child: snapshot.hasData
                      ? SizedBox(child: snapshot.data.buildPreview())
                      : CircularProgressIndicator());
            else
              return SizedBox.shrink();
          },
        ),
      ),
    );
  }
}

几个小时后,唯一的区别是两个结果之间的相机插件版本。

这似乎是 camera: ^0.7.0 及更高版本出现的错误。

要获得正确的结果,解决方法是使用:camera: ^0.6.4+5 或更早的版本。

那里打开了一个错误:https://github.com/flutter/flutter/issues/76210