Отправить кадр камеры из дарта в С++C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Отправить кадр камеры из дарта в С++

Сообщение Anonymous »

Я пытаюсь создать приложение 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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