如何在颤动中快速访问相机帧
Posted
技术标签:
【中文标题】如何在颤动中快速访问相机帧【英文标题】:How to access camera frames in flutter quickly 【发布时间】:2018-12-07 16:08:53 【问题描述】:我想在我的 Flutter 应用的相机源上实现近乎实时的 OCR。为此,我想快速访问相机数据。 据我所知,我有两个选择,并且都遇到了障碍:
通过在RepaintBoundary
周围放置RepaintBoundary
并创建RenderRepaintBoundary
并调用boundary.toImage()
来截取CameraPreview
的屏幕截图。这种方法的问题是 .toImage 方法似乎只捕获边界中的绘制小部件,而不是来自相机预览的数据。与此处描述的问题类似:https://github.com/flutter/flutter/issues/17687
使用相机 0.2.1 中的 controller.takePicture(filePath)
捕获图像,类似于示例文档。这里的问题是图像变得可用需要很长时间(2-3 秒)。我猜这是因为文件在捕获时保存到光盘中,然后需要再次从文件中读取。
有没有什么方法可以直接获取抓拍后的图片信息,做预处理和OCR之类的事情?
【问题讨论】:
这是一个长镜头,但你能从视频中抓取帧吗? ***.com/questions/48718551/capture-video-with-flutter 你会在 OpenCV 中做 OCR 吗? 我的计划是裁剪框架并使用 ml-kit 访问文本识别器,使用 mk-kit 插件:pub.dartlang.org/packages/mlkit @dazza5000 我认为视频录制还必须先将文件保存到磁盘才能访问,这意味着我会遇到同样的问题.. 您找到解决方案了吗? 【参考方案1】:对于“近实时OCR”,您需要CameraController#startImageStream
示例代码
import 'package:camera/camera.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: _MyHomePage()));
class _MyHomePage extends StatefulWidget
@override
_MyHomePageState createState() => _MyHomePageState();
class _MyHomePageState extends State<_MyHomePage>
dynamic _scanResults;
CameraController _camera;
bool _isDetecting = false;
CameraLensDirection _direction = CameraLensDirection.back;
@override
void initState()
super.initState();
_initializeCamera();
Future<CameraDescription> _getCamera(CameraLensDirection dir) async
return await availableCameras().then(
(List<CameraDescription> cameras) => cameras.firstWhere(
(CameraDescription camera) => camera.lensDirection == dir,
),
);
void _initializeCamera() async
_camera = CameraController(
await _getCamera(_direction),
defaultTargetPlatform == TargetPlatform.ios
? ResolutionPreset.low
: ResolutionPreset.medium,
);
await _camera.initialize();
_camera.startImageStream((CameraImage image)
if (_isDetecting) return;
_isDetecting = true;
try
// await doSomethingWith(image)
catch (e)
// await handleExepction(e)
finally
_isDetecting = false;
);
Widget build(BuildContext context)
return null;
此功能已合并到 https://github.com/flutter/plugins,但没有很好地记录。
参考:
https://github.com/flutter/flutter/issues/26348 https://github.com/flutter/plugins/pull/965 https://github.com/bparrishMines/mlkit_demo/blob/master/lib/main.dart#L43 https://youtu.be/OAEWySye0BQ?t=1460【讨论】:
您是否也可以实时在图像上绘图,从而操纵相机的记录? ''Future以上是关于如何在颤动中快速访问相机帧的主要内容,如果未能解决你的问题,请参考以下文章