我想在我的颤动应用程序的相机上实现近乎实时的OCR.为此,我想快速访问摄像机数据.据我所知,我有两个选择,并且两个都遇到了障碍:
CameraPreview通过RepaintBoundary围绕它创建一个RenderRepaintBoundary并调用来截取屏幕截图boundary.toImage().这种方法的问题在于.toImage方法似乎只捕获边界中绘制的小部件而不是摄像机预览中的数据.Simmilar对这里描述的问题:https://github.com/flutter/flutter/issues/17687
使用controller.takePicture(filePath)Camera 0.2.1 捕获图像,类似于示例文档.这里的问题是在图像可用之前需要超长时间(2-3秒).我想这是因为文件在捕获时保存到光盘,然后需要再次从文件中读取.
有什么方法可以在捕获后直接访问图片信息,做一些事情,比如预处理和OCR?
我需要快速访问我的新 flutter 应用程序的 CameraPreview 数据。如果我用它拍照,controller.takePicture(filePath)文件需要几秒钟的时间才能保存到磁盘,以便我可以访问它。我不需要高质量的图像,因此获得与手机屏幕显示分辨率相同的分辨率就可以了。我尝试过这种方法,但它只捕获我自己绘制的叠加层和小部件,而不捕获相机预览数据。这是使用此方法时问题的最小工作示例:
https://www.youtube.com/watch?v=CWBLjCwH5c0
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'dart:async';
import 'package:camera/camera.dart';
import 'dart:ui' as ui;
List<CameraDescription> cameras;
Future<Null> main() async {
debugPaintSizeEnabled = false;
debugPaintLayerBordersEnabled = false;
try {
cameras = await availableCameras();
} on CameraException catch (e) {
logError(e.code, e.description);
}
runApp(new MaterialApp(
home: new MyApp(),
));
}
void logError(String code, String message) =>
print('Error: $code\nError Message: $message');
class MyApp extends StatefulWidget {
@override
_State createState() => new _State();
} …Run Code Online (Sandbox Code Playgroud)