Я пытаюсь создать приложение AR с использованием flutter ffi, и в качестве первого шага я хочу отправить кадры камеры в C++ и добавить красную рамку поверх кадров, но у меня возникла проблема с преобразованием изображений между dart и C++. .
Когда я печатаю base64Image, полученный из C++, я получаю следующее:
processedImage: {"jsonrpc":"2.0","method":"streamNotify","params":{"streamId":"Stdout","event":{"type":"Event","kind":"WriteEvent","isolateGroup":{"type":"@IsolateGroup","id":"isolateGroups\/320456043667104","name":"main.dart","number":"320456043667104","isSystemIsolateGroup":false},"isolate":{"type":"@Isolate","id":"isolates\/3656785618916595","name":"main","number":"3656785618916595","isSystemIsolate":false,"isolateGroupId":"isolateGroups\/320456043667104"},"timestamp":1732029529901,"bytes":"Cg=="}}}
Это мой флаттер-код:
// Function to process camera frame and send to native C++ code
Future _processCameraFeed(CameraImage image) async {
final bytes = _convertCameraImageToBytes(image);
final width = image.width;
final height = image.height;
try {
String base64Image = await startAR(bytes, width, height);
print("processedImage: $base64Image");
setState(() {
processedImage = base64Image;
});
} catch (e) {
print('Error processing camera feed: $e');
}
}
Uint8List _convertCameraImageToBytes(CameraImage image) {
final Uint8List yPlane = image.planes[0].bytes;
final Uint8List uPlane = image.planes[1].bytes;
final Uint8List vPlane = image.planes[2].bytes;
final Uint8List combinedPlanes =
Uint8List(yPlane.length + uPlane.length + vPlane.length);
combinedPlanes.setRange(0, yPlane.length, yPlane);
combinedPlanes.setRange(
yPlane.length, yPlane.length + uPlane.length, uPlane);
combinedPlanes.setRange(
yPlane.length + uPlane.length, combinedPlanes.length, vPlane);
return combinedPlanes;
}
void _startCamera() async {
try {
await _initializeControllerFuture;
_controller.startImageStream((CameraImage image) async {
await _processCameraFeed(image);
});
setState(() {
_isCameraStarted = true; // Update state to show camera preview
});
} catch (e) {
print('Error starting camera: $e');
}
}
и это мой родной код:
extern "C" __attribute__((visibility("default"))) __attribute__((used))
void startAR(unsigned char* frameData, int width, int height, char* outputBuffer, int maxBufferSize) {
try {
// Convert raw frame data into OpenCV Mat
cv::Mat yuv(height + height / 2, width, CV_8UC1, frameData); // YUV420 format
if (yuv.empty()) {
std::cerr
Подробнее здесь: https://stackoverflow.com/questions/792 ... -dart-to-c
Отправить кадр камеры из дарта в С++ ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как отправить кадр захвата камеры на потоковую передачу YouTube с помощью ffmpeg
Anonymous » » в форуме Python - 0 Ответы
- 54 Просмотры
-
Последнее сообщение Anonymous
-