Я новичок в использовании OpenCV в android. Я хочу обнаружить объекты, используя Йоло. Дело в том, что я не хочу использовать прослушиватель камеры OpenCV onCameraFrame
для получения кадров. Я хочу использовать onPreviewFrame
слушатель. Как вы знаете, мы go кадры в byte[]
. Поэтому я не знаю, как соединить кадры в byte[]
с Yolo с использованием OpenCV.
Вот код, который я использовал, и он работает хорошо
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
Mat frame = inputFrame.rgba();
Imgproc.cvtColor(frame, frame, Imgproc.COLOR_RGBA2RGB);
Mat imageBlob = Dnn.blobFromImage(frame, 0.00392, new Size(416, 416), new Scalar(0, 0, 0), false, false);
tinyYOLO.setInput(imageBlob);
List<Mat> result = new ArrayList<>(2);
List<String> outBlobNames = new ArrayList<>();
outBlobNames.add(0, "yolo_16");
outBlobNames.add(1, "yolo_23");
tinyYOLO.forward(result, outBlobNames);
.
.
.//SOME CODE HERE
.
А теперь я хочу использовать onPreviewFrame
:
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
if (data == null)
throw new NullPointerException();
// --------------- ------ ЗДЕСЬ Я не знаю, что делать ---------------------
Camera.Size size = camera.getParameters().getPreviewSize();
Mat frame = new Mat(size.width,size.width CvType.CV_8UC1);
frame.put(0, 0, data);
Imgproc.cvtColor(frame, frame, Imgproc.COLOR_RGBA2RGB);
//---------------------UP-------------------------------
Mat imageBlob = Dnn.blobFromImage(frame, 0.00392, new Size(416, 416), new Scalar(0, 0, 0),false, false);
tinyYOLO.setInput(imageBlob);
final List<Mat> result = new ArrayList<>(2);
final List<String> outBlobNames = new ArrayList<>();
outBlobNames.add(0, "yolo_16");
outBlobNames.add(1, "yolo_23");
tinyYOLO.forward(result, outBlobNames);
.
.
.//SOME CODE HERE
.
И со вторым кодом я получил ошибки:
2020-01-23 15: 26: 55.279 30268-30268 / com.thelonecoder.camera E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.thelonecoder.camera, PID: 30268 CvException [org.opencv.core .CvException: cv :: Exception: OpenCV (3.4.5) /build/3_4_pack-android/opencv/modules/imgproc/src/color.hpp:255: ошибка: (-2: неопределенная ошибка) в функции 'cv :: CvtHelper :: CvtHelper (cv :: InputArray, cv :: OutputArray, int) [with VScn = cv :: Set <3, 4>; VDcn = cv :: Set <3, 4>; VDepth = cv :: Set <0, 2, 5>; cv :: SizePolicy sizePolicy = (cv :: SizePolicy) 2u; cv :: InputArray = const cv :: _ InputArray &; cv :: OutputArray = const cv :: _ OutputArray &] 'Неверное количество каналов во входном изображении:' VScn :: contains (scn) ', где' scn 'равно 1]